|
Взлом скринсэйвера
Christmаs Timе
3D Screеnsaver 1.0 [4.06 МБ ] диск ][ за
январь 2005 (или за декабрь 2004;) W32Dasm
v9.0b
[315 KB-ZIP] http://biocyborg.narod.ru/W32dsm9b.zip HIEW
v6.81
[703 KB-ZIP] http://biocyborg.narod.ru/soft/Hiew.zip
Недавно меня
попросили взломать прикольный
скринсэйвер, сделанный в стиле "Christmas
Timе". Вообще, я не занимаюсь всякой
ерундой типа украшательств, но в этот
раз мне деваться было некуда: доступ
к Сети по определенным причинам уже
почти месяц был невозможен, а
мозги требовали хоть какой-нибудь
исследовательской работы ;).
Чем отличается процесс
взлома скринсэйвера от взлома
обычной программы? Да практически
ничем! .scr-файл можно и
дизассемблировать, и исследовать в
отладчике, и править в HEX-редакторе...
Скринсэйверы, как и обычные
программы, могут быть сжаты каким-нибудь
упаковщиком или защищены
протектором типа ASProtect.
Но в этот раз все
оказалось просто: .scr-файл был ничем
не обработан, поэтому я сразу
приступил к доработке системы защиты
этой красивой, но, IMHO, совершенно
бесполезной программы;). Проблема
заключалась в том, что
незарегистрированная версия через 60
секунд работы (которые, кстати,
отсчитывались в левом верхнем углу
экрана) начинала показывать поверх
рождественской картинки большое
окно с требованием отправиться на
сайт разработчика и
зарегистрироваться, а в окне
настроек скринсэйвера светилась
раздразающая надпись "UNREGISTERED" и
предлагалось нажать кнопку "Register...",
чтобы ввести имя и рег. код.
Я дизассеблировал файл
Christmаs Time 3D Scrеensaver.scr в Win32Dasm и стал
изучать список "String Data References". В
середине списка мне попалась
интересная строка "Registration name or
registration code is incorrect ", после которой
почти сразу шла строка "Thank you for
purchase!". Эти строки, безусловно,
относятся к процедуре регистрации,
поэтому я решил перейти к месту, где
они вызываются:
:00407DD4 8B4DC8 mov ecx, dword ptr [ebp-38]
:00407DD7 51 push ecx
:00407DD8 E8204A0000 call 0040C7FD
:00407DDD 83C404 add esp, 00000004
:00407DE0 25FF000000 and eax, 000000FF
:00407DE5 85C0 test eax, eax
:00407DE7 7444 je 00407E2D
:00407DE9 8B1530B14B00 mov edx, dword ptr [004BB130]
:00407DEF C682B114000001 mov byte ptr [edx+000014B1], 01
:00407DF6 6A00 push 00000000
* Possible Reference to Dialog:
|
:00407DF8 68F0F64A00 push 004AF6F0
* Possible StringData Ref from Data Obj ->"Thank you for purchase!"
|
:00407DFD 6800F74A00 push 004AF700
:00407E02 8B4508 mov eax, dword ptr [ebp+08]
:00407E05 50 push eax
* Possible StringData Ref from Data Obj ->"Registration"
|
:00407E3B 6818F74A00 push 004AF718
* Possible StringData Ref from Data Obj ->"Registration name or registration "
->"code is incorrect."
|
:00407E40 6828F74A00 push 004AF728
:00407E45 8B4D08 mov ecx, dword ptr [ebp+08]
:00407E48 51 push ecx
Из листинга видно, что по адресу 407DE5
стоит проверка значения регистра еах, в
зависимости от результатов которой
программа примет рег. данные или не примет.
Наиболее вероятно, что значение регистра
еах задается процедурой, вызываемой по
адресу 00407DD8.
Посмотрим, что там можно изменить ;):
* Referenced by a CALL at Addresses:
|:00407686 , :00407DD8
|
:0040C7FD 55 push ebp
:0040C7FE 8BEC mov ebp, esp
:0040C800 83EC6C sub esp, 0000006C
:0040C803 56 push esi
:0040C804 57 push edi
:0040C805 837D0800 cmp dword ptr [ebp+08], 00000000
:0040C809 7507 jne 0040C812
:0040C80B 32C0 xor al, al
:0040C80D E911010000 jmp 0040C923
Эта процедура вызывается в
программе 2 раза: при запуске (вызывается по
адресу 00407686) и при проверке рег. данных в
процессе регистрации (с адреса 00407DD8). Причем,
в первом случае происходит считывание
информации из реестра (HKEY_CURRENT_USER\Software\TERMINAL
Studio\Christmаs Time 3D Screеnsaver). Все это я узнал, изучив
участок кода, на который можно перейти, вбив
в окне "Go to Code location" (Shift+F12)
дизассемблера адрес 407686. Чтобы программа
считала себя зарегистрированной можно
начиная с адреса .40C7FD ассемблировать
следующее:
mov eax,1 ret
Теперь надоедливое окно с
просьбой о регистрации никогда не появится
:). Чтобы в окне настроек скринсэйвера
отображалось имя крякера, нужно в реестре
по адресу HKEY_CURRENT_USER\Software\TERMINAL Studio\Christmаs Time 3D
Scrеensaver создать DWORD параметр с именем RegName (это
можно сделать с помощью стандартного
редактора реестра regedit.exe). Затем щелкнуть на
созданном имени правой кнопкой и выбрать
пункт "Изменить двоичные данные". В
открывшемся окошке в правом столбце можно
вписать свое имя.
В заключении хочу дать совет
тем, кто надумает "вручную" сделать
патч для этой программы. Чтобы долго не
возиться, вбивая адреса и байты, которые
нужно пропатчить, рекомендую
воспользоваться одним из патчмейкеров,
умеющих генерировать исходники патчей,
после чего можно просто скопировать
отвечающий за пропатчивание код в исходный
текст своего патча. Исходники для Delphi умеет
создавать Patcher Generator v1.1,
а любители ассемблера могут
воспользоваться программой uNivErsaL PatCheR.
Информация приведена
исключительно для ознакомления.
Применение данной информации в
незаконных целях категорически
запрещается.
© BioCyborG, 2005
|