"Временная" защита 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 = указатель на подстроку |