Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

"Временная" защита

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

Назад на стр. 057-036-3  Содержание  Вперед на стр. 057-036-5