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

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

GL#0M (gl00m-crk@yandex.ru)

Спецвыпуск: Хакер, номер #057, стр. 057-036-3


Происходит открытие файла с очень странным названием lexicon1033.dat. Не спеши удалять его. Это ничего хорошего не даст. Лучше взглянуть на него при помощи Hex Workshop.

Файл содержит всего четыре байта, они-то и отвечают за trial =). Узнать это можно при помощи отладчики или еще как-нибудь... Я определил методом научного тыка =). Эти байты никогда не изменятся, они записываются лишь однажды - при установке программы. При запуске программы идет их сверка с системной датой. Самое интересное, что я заметил: если забить этот файл нулями, то программа станет полностью зарегистрированной %)!

3) Для чтения из ini-файла: GetPrivateProfileStringA, GetPrivateProfileIntA.

Пример: именно для проверки счетчика примера не нашлось, точнее, я не смог вспомнить ;). Ну, не в этом суть, главное - порядок действий. Цель - X-EXE. Сайт - www.softeza.com.

Trial'а как такового нет, только NAG с таймером ожидания. Наша задача - зарегистрировать это чудо мысли ;). Нажимаем на кнопку Enter Code и вводим в появившееся окно любую чушь, нажимаем на кнопку OK. Спустя пару секунд увидим сообщение с просьбой перезапустить программу для завершения регистрации.

Твоя первая мысль: "Программа куда-то записала введенный код..." Да, ты абсолютно прав. Взглянем на содержимое директории, в которую была установлена программа, а точнее на файл Settings.ini:

[Settings]

1=11112222 <- хехе, я именно это и вводил

2=0

Теперь откроем нашу цель в OllyDbg и поставим точку останова на GetPrivateProfileStringA. Первый же вызов наш.

00431967 50 pusheax

00431968 E8 9B4FFDFFcall00406908 ; jmp to kernel32.GetPrivateProfileStringA

0043196D 8BC8 mov ecx, eax

0043196F 8D95 00F8FFFFlea edx, dword ptr [ebp-800] <- EDX = указатель на введенный код

00431975 8B45 08mov eax, dword ptr [ebp+8]

00431978 E8 132DFDFFcall00404690

0043197D 5F pop edi

0043197E 5E pop esi

0043197F 5B pop ebx

00431980 8BE5 mov esp, ebp

00431982 5D pop ebp

00431983 C2 0800retn8

Пройдя по ret, а затем еще чуть ниже, замечаем следующее:

004784F5 8B45 F0mov eax, dword ptr [ebp-10] <= EAX = указатель на введенный код

004784F8 BA E8864700mov edx, 004786E8; ASCII "1254960154494"

004784FD E8 AAC4F8FFcall004049AC<= процедура сравнения

00478502 75 0Fjnz short 00478513

00478504 B8 00874700mov eax, 00478700; ASCII "Thank you for registration X-EXE!"

00478509 E8 EE45FBFFcall0042CAFC

Не ведись на эту уловку! Это заблокированный ключ, который не принесет должного результата. Смотрим дальше:

00478513 8B45 F0mov eax, dword ptr [ebp-10] <= указатель на введенный серийный номер

00478516 E8 45C3F8FFcall00404860 <= функция получения длины строки

0047851B 83F8 0Ccmp eax, 0C

0047851E 0F8C 91000000jl004785B5 <= длина должна быть больше 11

00478524 8D85 94FEFFFFlea eax, dword ptr [ebp-16C]

0047852A 50 pusheax

0047852B B9 09000000mov ecx, 9 <= сколько байт

00478530 BA 04000000mov edx, 4 <= с какого байта начинать

00478535 8B45 F0mov eax, dword ptr [ebp-10]

00478538 E8 83C5F8FFcall00404AC0 <= функция копирования подстроки

0047853D 8B85 94FEFFFFmov eax, dword ptr [ebp-16C] <= EAX = указатель на подстроку

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