Главная » Статьи » Крэкинг

Исследование Zuma Deluxe.
-----[Вступление]

  Это 50-ая взломанная мной программа, поэтому решил написать небольшой тутор, так сказать отметить. Хотя всё таки - это игра, а не прога, но это сути не меняет, в ней использовалась защита, размещённая в длл. Так что, для развития не повредит. Ну понеслась.

-----[Основная часть]

Приступим. Что тут у нас в readme.txt:
============================================
Zuma Deluxe
Copyright © 2003-2004 PopCap Games, Inc.
Presented by GameHouse, Inc.
============================================

Registration
------------

Upon completion of your purchase of Zuma Deluxe, you will receive a license
name and license code. Enter this information into the registration dialog, and
then click on "Enter License Information."

This game can be registered by clicking on the "Buy Now" button on the trial
dialog, or by visiting the GameHouse.com Store: http://www.gamehouse.com/store/
Ну ну, какие они наивные. Ладно натравим на файлик Zuma.exe любой анализатор. Хм, вроде файл не пакован, максимум, что я узнал это "Gamehouse Media Protector Version Unknown". Ну и это не точно. Ладно загрузим наш файлик в Олли и увидим:

00589000 68 80905800 PUSH 00589080
00589005 6A 00 PUSH 0
00589007 FF15 F4955800 CALL DWORD PTR DS:[<&kernel32.GetModuleHandleA>]
0058900D 50 PUSH EAX ; ZUMA.
0058900E FF15 EC955800 CALL DWORD PTR DS:[5895EC] ; ZUMARES.DoMessage

И что же тут интересного спросите вы, а вот что: ZUMARES.DoMessage. Идём в директорию с игрой и деиствительно, видим файлик: zumares.dll. Так, теперь всё проясняется, прога использует эту длл в работе. Теперь откроем длл в LordPE и посмотрим экспорт функций, меня очень привлекла функция isTrial (думую из названия всё понятно). Загрузим эту длл в олли и чуть-чуть поисследуем. Если вы это сделали, то мы окажемся в её начале и увидим:

100030B0 /$ 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
100030B4 |. 85C0 TEST EAX,EAX ; ZUMARES.
100030B6 |. 75 20 JNZ SHORT 100030D8
100030B8 |. E8 53EDFFFF CALL isTrial
100030BD |. 85C0 TEST EAX,EAX ; ZUMARES.
100030BF |. 74 25 JE SHORT 100030E6
100030C1 |. C705 506B0010 0100>MOV DWORD PTR DS:[10006B50],1
100030CB |. E8 00FEFFFF CALL 10002ED0
100030D0 |. B8 01000000 MOV EAX,1
100030D5 |. C2 0C00 RETN 0C
100030D8 |> 83F8 01 CMP EAX,1
100030DB |. 75 09 JNZ SHORT 100030E6
100030DD |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] ; ZUMARES.10000000
100030E1 |. A3 446B0010 MOV DWORD PTR DS:[10006B44],EAX ; ZUMARES.
100030E6 |> B8 01000000 MOV EAX,1
100030EB \. C2 0C00 RETN 0C

Так, ну тут всё как на ладони. Вызывается функция isTrial и в зависимости от значения, которое она вернёт в регистре EAX, у программы будет разное поведение (JE SHORT 100030E6) откроем учебник по асму, и посмотрим комманду TEST:
test AX, AX
jz zero ;Переход, если AX=0
jnz notzero ;Переход, если AX не равно 0
А что же в самой функции isTrial, зайдём в неё и узнаем:

10001E10 /$ A1 28600010 MOV EAX,DWORD PTR DS:[10006028]
10001E15 \. C3 RETN

В регистр eax заносится значение из ячейки [10006028] типа DWORD. Предположим что это переменная типа Boolean, которая может принимать значение 1 или 0. Теперь всё понятно, осталось только выяснить, что же она должна вернуть то =) Для этого загрузим программу в олли и поставим бряк на адресс 10001E10, потом запусти прогу. Прервёмся (а куда она денется) и смотрим, что у нас лежит по адрессу [10006028]

10006028 01 00 00 00

Ну я так и думал, 1. Теперь надо сделать так, чтобы по этому адрессу всегда был 0. Этого можно добиться разными путями. По хорошему, надо отследить все обращения к этой переменной и в тех местах, когда туда будет записана 1, поправить код так, чтобы этого не произошло. Но мы сделаем хитрее. Помните функцию isTrial, которая находится в zumares.dll. Давайте её не много поправим.

было:

10001E10 /$ A1 28600010 MOV EAX,DWORD PTR DS:[10006028]
10001E15 \. C3 RETN

стало:

10001E10 /$ B8 00000000 MOV EAX,0
10001E15 \. C3 RETN

Т.е. мы помещаем в регистр EAX ноль. Осталось запустить игру и проверить все наши предположения. Ура, всех ограничений, как не было. Мы добились чего хотели.

-----[Заключение]

Вот видите, всё не так страшно и сложно (но так бывает не всегда). Не надо принимать всё написанное здесь за образец! Вы должны черпать из статей главное, т.е. метод исследования. В следующий раз я посмотрю что-нибудь посложнее, а пока разрешите откланяться. [04.05.2006 by Hellsp@wn]

Источник: http://hellspawn.nm.ru/
Категория: Крэкинг | Добавил: -=Hellsing=- (17.06.2009) | Автор: Hellsp@wn W
Просмотров: 3208 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]