Ломать будем Big Crocodile 3.9 (Build 5.76) под
WinMe.
Сразу скажу, что я никогда не пользовался данной программой и
вполне возможно упустил что-то из настроек. Если такое имеет место
быть - сообщите пожалуйста мне об этом.
Инструменты, которые я использовал:
- SoftIce
- ImportReconstructor v. 1.6 Final
- PE-EDITOR v. 1.7
- PEID
- SuperBMP
Запускаем программу, файл bigcroc.exe, появляется окно с сообщением,
в котором нам напоминают, что это не бесплатный продукт и после регистрации
мы этого больше не увидим. В любом случае, закрываем это окно и оказываемся
в окне выбора зашифрованных BigCrocodile'ом файлов (контейнеров).
Т.к. мы еще ничего не шифровали, нам предлагают демонстрационный вариант
с установленным паролем "123", впрочем можно создать и новый файл-контейнер.
Открываем demo, вводим пароль и оказываемся в главном окне программы.
Сразу заходим в меню help\registration, вверху показан наш текущий статус:
unregistered (незарегистрирован), а ниже ограничения demo-версии, самым главным
является то, что demo-версия позволяет хранить только 20 паролей из 1000!
Также после регистрации перестанут появляться
раздражающие всплывающие окна с напоминанием о регистрации.
Ниже расположена кнопка "click here for registration", при нажатии по которой
нас посылают на сайт к автору, полей ввода паролей нигде нет, очевидно регистрация
происходит путем высылки нам внешнего файла или данных реестра. Посмотрим также
меню about, но ничего полезного там не находим. Теперь проверим ограничения в 20
паролей, для этого откроем меню Special\Generate Many Passwords и в поле generate
- пробуем увеличить количество паролей до предела, предел у нас выходит 17, т.к. 3 уже
существуют в файле-контейнере. Все верно. Закрываем программу, открываем
PEID и загружаем наш файл bigcroc.exe.
PEID показывает "ASProtect 1.2x [New Strain] -> Alexey Solodovnikov",
все тот же ASProtect, о котором не раз уже говорили. Приступим к снятию:
загрузим SuperBMP для защиты наших отладочных регистров, откроем bigcroc.exe
в PE-Editor'е и посмотрим ImageBase = 400000 и EntryPoint = 1000, сложим 400000 и 1000
- получим 401000, запустим программу, вызовем SoftIce и введем "addr
bigcroc", затем "bpm 401000 x", выйдем из SoftIce, закроем программу, вновь откроем и окажемся
в отладчике, протрассируем код по F8 до pushad:
017F:004E5001 60 PUSHAD
017F:004E5002 E803000000 CALL 004E500A
017F:004E5007 E9EB045D45 JMP 45AB54F7
017F:004E500C 55 PUSH EBP
017F:004E500D C3 RET
После выполнения этой инструкции введем
"bpmb esp", отпустим SoftIce и вскоре вновь в нем окажемся, как раз на безусловном
переходе, который прыгает на адрес OEP (Original Entry Point), нажмем F8 и мы на
OEP, теперь запомним два первых байта "558B", и введем в отладчике "e eip", затем EBFE
(прыжок на себя), также запомним адрес OEP по которому сейчас находимся, 0049F4B0.
Выходим из SoftIce, запускаем PE-Editor, жмем кнопку "tasks" и делаем full dump нашему
зацикленному процессу. Теперь открываем ImportReconstructor, снова выбираем наш
процесс, вводим в поле OEP 0009F4B0 и жмем IAT AutoSearch, теперь GetImport, Show Invalid
и делаем им Trace Level 1 (Disasm), почти весь импорт распознался, нераспознанных
распознаем с помощью плагина ASProtect 1.22 стандартно включаемого в дистрибутив
ImpRec'а 1.6. Теперь достаточно сделать FixDump на только что сделанный нами
Dump. Теперь любым hex редактором заменим обратно байты, по адресу OEP с EBFE на 558B.
Переименовываем наш профиксенный дамп в bigcroco.exe и заменяем им имеющийся.
Пробуем запустить, сообщение о регистрации больше не появляется, сразу открывается
окно выбора файлов контейнеров, выбираем наш demo, вводим пароль и идем в меню
help\registration, там нам пишут, что текущий статус
registered, пробуем проверить максимальное количество паролей, открываем меню
Special\Generate Many Passwords и вводим 1000, создается 1980, с учетом 20 уже имеющихся.
Работает, программа не находит ASProtect и считает себя зарегистрированной, при этом в окне
About вместо имени, на кого зарегистрированна программа, присутствеут набор символов,
я считаю это не должно волновать, но если кому-то приспичит это легко изменить в любом Resource
Editore, или же сэмулировать API ASProtect'а. Другой вопрос зачем это нужно?
В процессе работы я нашел еще один недостаток, файл peopen.dat, находящийся
в инсталляционной директории, содержит расположение созданных в программе
файлов-контейнеров, так вот если их становиться больше 8, программа при следующем
открытии любого из файлов-контейнеров вырезает из списка остальные, оставляя таким
образом только 8, а не попавшие в список приходится открывать через
browse. Не знаю из-за чего так происходит, но это явно не придает удобства. Так что, изменим
сей недостаток.
Когда будем находиться в меню выбора файлов-контейнеров откроем SoftIce и поставим
bp на writefile "bpx writefile", закроем SoftIce и выберем любой файл-контейнер,
например все тот же demo, после ввода пароля сработает writefile, теперь будем жать
F12 пока не окажемся в этом куске.
:0049E114 8B83E0020000 mov eax, dword ptr [ebx+000002E0]
:0049E11A 8BB0F0010000 mov esi, dword ptr [eax+000001F0]
:0049E120 8BC6 mov eax, esi
:0049E122 8B10 mov edx, dword ptr [eax]
:0049E124 FF5214 call [edx+14]
:0049E127 8BD0 mov edx, eax
:0049E129 4A dec edx
:0049E12A 8BC6 mov eax, esi
:0049E12C 8B08 mov ecx, dword ptr [eax]
:0049E12E FF5144 call [ecx+44]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0049E112(U)
|
:0049E131 8B83E0020000 mov eax, dword ptr [ebx+000002E0]
:0049E137 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0049E13D 8B10 mov edx, dword ptr [eax]
:0049E13F FF5214 call [edx+14]
:0049E142 83F808 cmp eax, 00000008 ; сравнивает
количество строк с 8
:0049E145 7FCD jge 49E114 ; если больше - прыжок
:0049E147 8D55F4 lea edx, dword ptr [ebp-0C]
:0049E14A 33C0 xor eax, eax
:0049E14C E8FF47F6FF call 00402950
:0049E151 8B45F4 mov eax, dword ptr [ebp-0C]
:0049E154 8D55F8 lea edx, dword ptr [ebp-08]
:0049E157 E868B2F6FF call 004093C4
:0049E15C 8D45F8 lea eax, dword ptr [ebp-08]
* Possible StringData Ref from Code Obj ->"peopen.dat"
|
:0049E15F BA1CE24900 mov edx, 0049E21C
:0049E164 E83B5DF6FF call 00403EA4
:0049E169 8B55F8 mov edx, dword ptr [ebp-08]
:0049E16C 8B83E0020000 mov eax, dword ptr [ebx+000002E0]
:0049E172 8B80F0010000 mov eax, dword ptr [eax+000001F0]
:0049E178 8B08 mov ecx, dword ptr [eax]
:0049E17A FF5164 call [ecx+64]
В любом hex редакторе заменим байты 7FCD по адресу 0049E145 на 9090.
Теперь программа не будет сокращать список.
Статья написана в образовательных целях и только.