"Временная" защита GL#0M (gl00m-crk@yandex.ru) Спецвыпуск: Хакер, номер #057, стр. 057-036-4 00478543 50 pusheax ..... Код создания строковой константы 00478597 8B95 90FEFFFFmov edx, dword ptr [ebp-170] <= EDX = указатель на константу 0047859D 58 pop eax 0047859E E8 09C4F8FFcall004049AC <= процедура сравнения 004785A3 75 10jnz short 004785B5 В результате имеем код: xxx124651914 (где xxx - любые символы). Ура! Задача выполнена =). На этом со счетчиками покончим... Хотя нет, мне хотелось бы упомянуть еще одну API-функцию – GetSystemTime =). Как уже все заметили (в первых двух пунктах), ее вызов происходит как раз перед вызовом рассмотренных API. И, что самое приятное, он единственный! "Так зачем же мы тут мучались?!" – спросишь ты. Решать тебе, но, по-моему, приведенный метод надежнее ;). 2. NAG - окно с просьбой зарегистрироваться Понятия "борьба с NAG-окнами" для меня не существует, по крайней мере, при исследовании trial-защит. Потому что единственный правильный путь - это разобрать непосредственно процедуру проверки серийного номера или, на худой конец, подправить ее, в 80% случаев получим полностью зарегистрированную программу. А что нам даст "убийство" NAG-окна? Окно пропало, а ограничения остались. Поэтому смотреть надо в сторону всех вышеперечисленных API, а также: GetWindowTextA, GetDlgItemTextA и т.д. Пример: рассмотрим все тот же MP3 Audio Converter, но теперь на предмет регистрации. Загружаем его в OllyDbg и ставим точку останова на RegQueryValueExA. Второй вызов наш: 0041E2BC|. 68 04010000push104; /Arg4 = 00000104 0041E2C1|. 8D8D FCFEFFFFlea ecx, dword ptr [ebp-104] ; | 0041E2C7|. 51 pushecx; |Arg3 0041E2C8|. 6A 03push3; |Arg2 = 00000003 0041E2CA|. 68 E0E74400push0044E7E0 ; |Arg1 = 0044E7E0 ASCII "6+E" 0041E2CF|. E8 4CEFFFFFcall0041D220 ; \CvrtMate.0041D220 0041E2D4|. 83C4 10add esp, 10 0041E2D7|. 8D95 ECFDFFFFlea edx, dword ptr [ebp-214] 0041E2DD|. 52 pushedx; /pHandle 0041E2DE|. 8D85 F0FDFFFFlea eax, dword ptr [ebp-210] ; | 0041E2E4|. 50 pusheax ; |Subkey = "SOFTWARE\EZSoftMagic\AudioConverter\SN" 0041E2E5|. 68 02000080push80000002 ; |hKey = HKEY_LOCAL_MACHINE 0041E2EA|. FF15 08D04400calldword ptr [<&ADVAPI32.RegOpenKeyA>]; \RegOpenKeyA 0041E2F0|. 8985 F4FEFFFFmov dword ptr [ebp-10C], eax 0041E2F6|. 83BD F4FEFFFF >cmp dword ptr [ebp-10C], 0 0041E2FD|. 74 04jeshort 0041E303 0041E2FF|. 33C0 xor eax, eax 0041E301|. EB 48jmp short 0041E34B 0041E303|> 8D4D 0Clea ecx, dword ptr [ebp+C] 0041E306|. 51 pushecx; /pBufSize 0041E307|. 8B55 08mov edx, dword ptr [ebp+8] ; | 0041E30A|. 52 pushedx; |Buffer 0041E30B|. 8D85 F8FEFFFFlea eax, dword ptr [ebp-108] ; | 0041E311|. 50 pusheax; |pValueType 0041E312|. 6A 00push0; |Reserved = NULL 0041E314|. 8D8D FCFEFFFFlea ecx, dword ptr [ebp-104] ; | 0041E31A|. 51 pushecx; |ValueName 0041E31B|. 8B95 ECFDFFFFmov edx, dword ptr [ebp-214] ; | 0041E321|. 52 pushedx; |hKey 0041E322|. FF15 24D04400calldword ptr [<&ADVAPI32.RegQueryValueExA>] ; \RegQueryValueExA Пройдя еще немного, мы увидим: 004018E8|. 8D8D E8FBFFFFlea ecx, dword ptr [ebp-418] 004018EE|. 51 pushecx; /Arg5 |