Subject: Tutorials Date: Sat, 19 May 2001 01:37:22 +0400 Hi! 18.05.01 0.45 You wrote: > ..Поэтому просьба к тем, кто в этом действительно заинтересован, > напишите _дайректом_... На что отвечаю: Заитересован по следующим причинам (это не дифрамбы, а реальная оценка желания человека владеющего определенными знаниями помочь другим): а) В рассылки направляется информация в основном не по заказу (дайте то..., дайте это... в отличие от ....), а информация которая может заитересовать других; б) Замечание по поводу отсутствия мануалов на ru языке полностью приемлю (не раз пытался найти что то вразумительное, но неудачно...), поэтому по всем ссылкам, представленным Вами незамедлительно прохожусь, и все что Вами предлагается оказыватся довольно итересным; в) Понятно или не понятно изложено..., на мой взгляд, учебник информатики можно купить на каждом углу :)), все зависит от желания понять, хотя у меня лично сложности есть (с учетом того, что первый раз нажал на "клаву" три года назад потными и трясущимися пальцами, в возрасте 37 лет :(( ); г) Что интересно..., практически все (об этом было сказано выше..); д) Повторяте ли Вы шаги..., в данный момент Ваши ссылки в письме - ...Hi All! Очень приятно... , пришли вовремя (по поводу SW авторов и реестра, т.к. находился на полпути к лечению одного сабжа сделанного в этом стиле, но не нашел другого решения, как сделать reg файл обнуляющий количество запусков в реестре...; е) ...я не нашел в них главного - нужны ли Вам сами Tutorials ? Лично мне нужны, при получении почты в первую очередь смотрю нет ли чего за Вашей подписью, т.к. в большинстве случаев там находится больше нужной информации, чем во всей почте. Удачи Вам, в Вашем желании помочь другим... С уважением, Mic! P.S. Согласен на получение информации директом... P.P.S. Запросы по поводу лечения Expression исходили от меня... Subject: Re: Tutorials Date: Sat, 19 May 2001 18:13:29 +0300 MIC wrote: > находился на полпути к лечению одного сабжа сделанного в этом стиле, но не > нашел другого решения, как сделать reg файл обнуляющий количество запусков в > реестре...; Когда Вы уже точно знаете ключ реестра, где хранится (не)нужная информация, то не вдаваясь в детали защиты и запутанные проверки, часто удается обойти проверку просто "испортив" имя ключа. Для этого, конечно, необходимо, чтобы для записи и чтения использовались _разные_ строковые литералы, но, как правило, оптимизация по этому параметру в компиляторе дефолтно не включена (и SW-авторы про нее не знают) и фокус удается. Например, старый (1.95) 30-дневный Jammer хранил дату в ключе [HKEY_LOCAL_MACHINE\SOFTWARE] "ProfileString180"="990282522" - Jammer.exe FRO PE.00430240 -------- 245760 | Hiew 6.55 (c)SEN -.004300E0: 4C 69 73 74-44 6C 67 00-33 33 31 32-39 39 32 31 ListDlg 33129921 -.004300F0: 39 00 00 00-53 6F 66 74-77 61 72 65-00 00 00 00 9 Software -.00430100: 50 72 6F 66-69 6C 65 53-74 72 69 6E-67 25 64 00 ProfileString%d -.00430110: 4F 70 74 69-6F 6E 73 00-F8 99 42 00-00 00 00 00 Options °ЩB -.00430120: 2E 50 41 56-43 45 78 63-65 70 74 69-6F 6E 40 40 .PAVCException@@ Замена одной буквы в слове "Software" - мне показалось забавным поменять S на $ - приводила к ошибке считывания ключа [HKEY_LOCAL_MACHINE\SOFTWARE] и, тем самым, каждый свой запуск Jammer считал самым первым :-) Точно также, в System Mechanic 3.6c, взамен 00102966: 74 EB ; Remove SIce Check 001029A2: 74 EB ; Remove NTIce Check можно было бы просто поменять буквы в литералах "SICE" и "NTICE". - sysmech.exe .FRO PE.00502AD8 -------- 1972224 ¦ Hiew 6.55 (c)SEN -.00502970: 8B C3 5B C3-5C 5C 2E 5C-53 49 43 45-00 00 00 00 Л+[+\\.\SICE -.00502980: 53 33 DB 6A-00 68 80 00-00 00 6A 03-6A 00 6A 03 S3-j hА j.j j. -.00502990: 68 00 00 00-C0 68 B0 29-50 00 E8 01-3C F0 FF 83 h Lh-)P ш.<Ё Г -.005029A0: F8 FF EB 08-50 E8 C6 3B-F0 FF B3 01-8B C3 5B C3 ° ы.Pш¦;Ё ¦.Л+[+ -.005029B0: 5C 5C 2E 5C-4E 54 49 43-45 00 00 00-E8 07 FF FF \\.\NTICE ш. Ну, и "раз зашла такая пьянка" :-) Поскольку архивы листа не хранятся, обширная цитата из моего прошлогоднего tutorial: Subject: Re: VF WinVideo Date: Tue, 02 May 2000 18:01:43 +0300 Ах, сколько недоели мы, Сколько недопили мы ... Это только семечки, друзья ! В дом любой входили мы Только через форточку - Корешок мой, Сенечка, и я ... из к/ф "Возвращение Серого Волка" Url: http://www.caravan.ru/~mclaren/winvideo.zip size: 402365 Программа VF WinVideo, подобно всем остальным продуктам этой фирмы, отличается на редкость скверным характером: если Вы ошиблись при вводе ключа (или просто нажали ОК), работа программы блокируется до ввода правильного (Вы его знаете?) значения. Как пофиксить этот баг ? ---------------------------------------------------------- ¦ FileName ¦ Size ¦ Date ¦ Time ¦ CRC-32 ¦ +--------------+--------+-------------+-------+----------+ ¦ WINVIDEO.EXE ¦ 349696 ¦ 16-Dec-1999 ¦ 00:39 ¦ 779611B5 ¦ ---------------------------------------------------------- Compiled with Borland Delphi 3.0 Packed by ASPack 1.06.01b Прежде всего, необходимо распаковать программу. Рекомендую UnASPack 1.0.9.0 - Лучший на сегодня UnASPacker. Url: http://kontum.vietmedia.com/protools/files/unpackers/2unaspack.zip size: 73732 После распаковки: ---------------------------------------------------------- ¦ FileName ¦ Size ¦ Date ¦ Time ¦ CRC-32 ¦ +--------------+--------+-------------+-------+----------+ ¦ WINVIDEO.EXE ¦ 772608 ¦ 02-May-2000 ¦ 11:11 ¦ 9E94D409 ¦ ---------------------------------------------------------- Если теперь открыть файл в каком-нибудь PE Viewer'е и посмотреть на секцию CODE, то мы увидим следующее: VirtualAddress: 0x00001000 SizeOfRawData: 0x0008A200 PointerToRawData: 0x00000400 SectionCharacteristics: 0xC0000040 // Incorrect ! PointerToRelocations: 0x00000000 NumberOfRelocations: 0 PointerToLinenumbers: 0x00000000 NumberOfLinenumbers: 0 я использовал Url: http://www.spywindows.com/ARC01/PEBROWSE.ZIP size: 750215 но годится любой другой, включая ProcDump. Как это обычно случается, упаковщик (ASPack), из собственных соображений, установил для секции CODE неправильное значение SectionCharacteristics. 0xC0000040 - Contains Initialized Data | Readable | Writeable Если Вы попытаетесь использовать Loader32 из комплекта SoftIce, то Вам не удастся загрузить программу в отладчик. Используйте ProcDump, чтобы установить корректное значение: 0x60000020 - Contains Code | Executable | Readable BTW, ACiD BuRN ( http://acidburn.forez.com/ ) рекомендует немного другое значение: > u will use the loader of Sice to unpack, so Run it (loader32.exe) and > choose the exe u want to run! for us, it is : Konix.exe. ok, run it > with the loader, but the prob is, this fucking app won't break in > Sice :( hehe, np, run Proc Dump and use PE editor ! Edit the Code's > section of the exe. (pe editor, choose the file, sections, click on > CODE and right click, edit section) > > ok, you see in sections caracteristic : C0000040 > ok, change it to : E0000020 > > Don't nag me for ask me why, only trust me, this work all the time! > do it, that's all! E0000020 - Contains Code | Executable | Readable | Writeable TIP: Может случиться, что и это не помогает, тогда используйте стандартную технику: найдите EntryPoint (в Hiew: F8, тогда F5) и замените первый байт кода на CC (INT 3). Вызовите SoftIce: CTRL-D, тогда BPINT 3 и F5. Запустите программу, исправьте в окне SoftIce CC на верное значение. (в нашем случае: 55 - PUSH EBP) Аналогично, Вы можете выставить таким образом Breakpoint в любом другом месте, "исправив" первый байт команды на INT 3. Не забудьте только потом вернуть все назад. Well, теперь нет никаких препятствий для исследования программы в отладчике. Как я уже писал, я потратил достаточное время для изучения кода, но не увидел простого способа зарегистрировать программу: коды ошибок (или что-то производное от них) передаются дальше, в качестве параметров, так что примитивный обход проверок приводит к краху программы или завершению с собщением об ошибке. С другой стороны, ничего не стоит обойти проверку количества запусков (с сохранением полной функциональности). Так что, если Вам лень регулярно чистить реестр, но все же не лень перепаковать и пропатчить программу, читайте дальше :-) -= * =- Well. Рад видеть Вас здесь :-) Закройте SoftIce - для такой простой работы он нам не потребуется. (Как и знание Ассемблера). И IDA тоже. А вот Hiew должен быть под рукой. И программа мониторинга реестра. Поищите на http://www.quarta.ru/ или возьмите здесь: Url: http://kontum.vietmedia.com/protools/files/utilities/regmon.zip size: 67638 Для начала вычищаем из реестра все следы WinVideo и снова проводим мониторинг реестра. На это раз нас интересуют не просто имена создаваемых ключей (их мы уже знаем), а точная последовательность действий. Итак, нас интересуют только 2 "регистрационных" ключа: - MODdata - DispDrv Вот фрагменты лога. ; --- On Open 136 Winvideo OpenKey HKCU\MODdata NOTFOUND 137 Winvideo CreateKey HKCU\MODdata SUCCESS hKey: 0xC1184834 138 Winvideo OpenKey HKCU\DispDrv NOTFOUND 139 Winvideo CreateKey HKCU\DispDrv SUCCESS hKey: 0xC1173BC8 141 Winvideo OpenKey HKCU\MODdata\frequency NOTFOUND 142 Winvideo OpenKey HKCU\DispDrv\CodePage NOTFOUND ; --- On Close 188 Winvideo OpenKey HKCU\MODdata\frequency NOTFOUND 189 Winvideo CreateKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 190 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS 191 Winvideo OpenKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 192 Winvideo SetValueEx HKCU\MODdata\frequency\UID SUCCESS "863" 193 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS 194 Winvideo OpenKey HKCU\DispDrv\CodePage NOTFOUND 195 Winvideo CreateKey HKCU\DispDrv\CodePage SUCCESS hKey: 0xC1173A9C 196 Winvideo CloseKey HKCU\DispDrv\CodePage SUCCESS 197 Winvideo OpenKey HKCU\DispDrv\CodePage SUCCESS hKey: 0xC1173A9C 198 Winvideo SetValueEx HKCU\DispDrv\CodePage\Top SUCCESS "91" 199 Winvideo CloseKey HKCU\DispDrv\CodePage SUCCESS 200 Winvideo OpenKey HKCU\DispDrv\CodePage SUCCESS hKey: 0xC1173A9C 201 Winvideo CloseKey HKCU\DispDrv\CodePage SUCCESS 202 Winvideo OpenKey HKCU\DispDrv\CodePage SUCCESS hKey: 0xC1173A9C 203 Winvideo SetValueEx HKCU\DispDrv\CodePage\Down SUCCESS "24" 204 Winvideo CloseKey HKCU\DispDrv\CodePage SUCCESS 205 Winvideo OpenKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 206 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS 207 Winvideo OpenKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 208 Winvideo SetValueEx HKCU\MODdata\frequency\UIDs SUCCESS "h_keyto" 209 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS 210 Winvideo OpenKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 211 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS 212 Winvideo OpenKey HKCU\MODdata\frequency SUCCESS hKey: 0xC1173A9C 213 Winvideo SetValueEx HKCU\MODdata\frequency\bios SUCCESS "1" 214 Winvideo CloseKey HKCU\MODdata\frequency SUCCESS Гм. При запуске программа только и делает, что проверяет _наличие_ ключей "frequency" и "CodePage". Если их нет - значит, это первый запуск. ОК. Открываем файл в Hiew и отыскиваем слова "frequency" и "CodePage". Отыскиваются они здесь: frequency: 0048224С и 004832С8 CodePage: 00482260 и 004832ВС Пока все идет по плану: оба слова встречаются ровно два раза. Я предполагаю, что один раз при *чтении* и другой - при *записи*. Если теперь сделать эти слова хоть немного _разными_, то программе больше не удастся прочесть записанный ключ, а это как раз то, чего мы и добиваемся. Well. Исправлем слово по смещению 0048224С на frequenc_ и Исправлем слово по смещению 00482260 на CodePag_ Вот фрагмент дампа: Winvideo.exe FR PE.004823AC -------- 772608 ¦ Hiew 6.16 (c)SEN _.00482240: 55 49 44 00-FF FF FF FF-09 00 00 00-66 72 65 71 UID ____freq _.00482250: 75 65 6E 63-5F 00 00 00-FF FF FF FF-08 00 00 00 uenc_ ____ _.00482260: 43 6F 64 65-50 61 67 5F-00 00 00 00-FF FF FF FF CodePag_ ____ Снова вычищаем из реестра все следы WinVideo и снова проводим мониторинг реестра. Вот фрагменты лога. ; --- On Open 141 Winvideo OpenKey HKCU\MODdata\frequency NOTFOUND 142 Winvideo OpenKey HKCU\DispDrv\CodePage NOTFOUND ; --- On Close 188 Winvideo OpenKey HKCU\MODdata\frequenc_ NOTFOUND 189 Winvideo CreateKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 190 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS 191 Winvideo OpenKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 192 Winvideo SetValueEx HKCU\MODdata\frequenc_\UID SUCCESS "863" 193 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS 194 Winvideo OpenKey HKCU\DispDrv\CodePag_ NOTFOUND 195 Winvideo CreateKey HKCU\DispDrv\CodePag_ SUCCESS hKey: 0xC9201294 196 Winvideo CloseKey HKCU\DispDrv\CodePag_ SUCCESS 197 Winvideo OpenKey HKCU\DispDrv\CodePag_ SUCCESS hKey: 0xC9201294 198 Winvideo SetValueEx HKCU\DispDrv\CodePag_\Top SUCCESS "91" 199 Winvideo CloseKey HKCU\DispDrv\CodePag_ SUCCESS 200 Winvideo OpenKey HKCU\DispDrv\CodePag_ SUCCESS hKey: 0xC9201294 201 Winvideo CloseKey HKCU\DispDrv\CodePag_ SUCCESS 202 Winvideo OpenKey HKCU\DispDrv\CodePag_ SUCCESS hKey: 0xC9201294 203 Winvideo SetValueEx HKCU\DispDrv\CodePag_\Down SUCCESS "19" 204 Winvideo CloseKey HKCU\DispDrv\CodePag_ SUCCESS 205 Winvideo OpenKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 206 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS 207 Winvideo OpenKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 208 Winvideo SetValueEx HKCU\MODdata\frequenc_\UIDs SUCCESS "h_keyto" 209 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS 210 Winvideo OpenKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 211 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS 212 Winvideo OpenKey HKCU\MODdata\frequenc_ SUCCESS hKey: 0xC9201294 213 Winvideo SetValueEx HKCU\MODdata\frequenc_\bios SUCCESS "1" 214 Winvideo CloseKey HKCU\MODdata\frequenc_ SUCCESS Wow ! Предел желаний ! Отныне программа читает и записывает *_разные_* ключи. Ваши "40 запусков" больше никогда не кончатся :-) Итак, что изменилось: Comparing files Winvideo.ex_ and Winvideo.exe 0000021C: 40 20 ; Set Correct "CODE" SectionCharacteristics 0000021F: C0 60 00081654: 79 5F ; 'y' --> '_' 00081667: 65 5F ; 'e' --> '_' На самом деле, при редактировании SectionCharacteristics, ProcDump поменял еще 4 байта заголовка (не знаю с какой целью, подозреваю, что это просто "подпись" Lorian & Stone). Но я их снова обнулил - как не относящиеся к делу. Запускаем программу и придирчиво ее осматриваем. Гм. В окошке "О Программе" мы обнаруживаем отвратительную красную надпись: "!!! Программа не зарегистрирована !!!" Well. Добавим еще 1 байт к нашему патчу: Comparing files Winvideo.ex_ and Winvideo.exe 0000021C: 40 20 ; Set Correct "CODE" SectionCharacteristics 0000021F: C0 60 00081654: 79 5F ; 'y' --> '_' 00081667: 65 5F ; 'e' --> '_' 0009F666: 21 00 ; Remove Unwanted Junk Противная надпись навсегда исчезла. Осталась только одна проблема: в меню "Справка" сохранился пункт "Регистрация ...". О, конечно, Вы можете сейчас вводить туда что угодно - блокировки не произойдет, но как-то это м..м..м ... неэлегантно ... К сожалению, мне неизвестен простой (без перекомпиляции ресурса) способ удаления объектов из Delphi форм. Так что я воспользовался Restorator'ом для оставшейся работы и удалил никому не нужный пункт меню "Регистрация ...". К несчастью, за счет сдвига оставшихся объектов, разница между двумя файлами составила около 60 Kb! - слишком много для отсылки в лист. Так что Вам придется либо смириться с этим "архитектурным излишеством", либо скачать Restorator и проделать это самостоятельно. Url: http://www.bome.com/Restorator/Restorator25.zip size: 1065212 Я, кстати, подумывал было (используя Restorator) перевести все менюшки на английский, но за неимением Video и видеокассет, оставил эту затею. Ну и последнее, упакуйте файл UPX, чтобы сэкономить место на диске. У меня это выглядело так: File size Ratio Format Name ------------------- ------ ----------- ----------- 772608 -> 323584 41.88% win32/pe Winvideo.exe P.S. Я не разбирался с другими программами этой фирмы - они все мне так же мало нужны и столь же неинтересны, как и первая, но подозреваю, что защита во всех устроена одинаково и обходится с той же легкостью. Оставляю проверку этого Вам - в качестве домашнего задания. И дополнение к нему: Subject: Re: VF WinVideo and so on - Solutions Date: Tue, 02 May 2000 21:24:21 +0300 > P.S. > > Я не разбирался с другими программами этой фирмы - они все мне так же > мало нужны и столь же неинтересны, как и первая, но подозреваю, что > защита во всех устроена одинаково и обходится с той же легкостью. > > Оставляю проверку этого Вам - в качестве домашнего задания. Потратил еще несколько минут на проверку этой гипотезы. Предположения подтвердились :-) Единственное, замеченное мною различие - в программе PG Address Book (авт. Григорий Петров), вместо обычных трех восклицательных знаков во фразе "!!! Программа не зарегистрирована !!!" скромно использовано всего по одному :-) Solutions --------- 1. VF DiscCollection, версия 1.1 от 11 ноября 1998 года Comparing files Disc.ex_ and Disc.exe 0006B8E8: 53 24 0006B904: 73 24 0008C7AD: 21 00 2. GameLand, версия 1.0 от 15 июля 1998 года Comparing files gameland.ex_ and gameland.exe 0004D09D: 78 7A 0004D0BC: 53 24 0004D0E4: 53 00 0004D0F8: 2D 00 3. PG Address Book, версия 2.1 от 18 июня 1999 года Comparing files address.ex_ and address.exe 000A010A: 6F 30 000A0126: 6F 30 000B6E9E: 21 00 Финишинг Вы можете сделать в Restorator'e - убрать лишнее из меню и перевести его с русского на английский :-) © Gazlan 2009 * gazlan@yandex.ru |
|