Грин, Грин у меня тут игрушка
прикольная, прикольная.
Но без CD-ка не работает.

Сделай ЧТО-НИБУДЬ!!!!!!!

Не знаю как вам, а мне такие
вопли приходится слушать если не каждый день, то
как минимум чрез день. Данная статья
предназначена для тех у кого что-то не работает
без диска.

Пункт первый. Реестр и
конфигурационные файлы.

Бывают случаи когда и ломать то
ничего не надо, просто открываем реестр или
файлик в каталоге с игрой и видим нечто от чего
душа радуется. Ну типа CDPath. Меняем его и радуемся
жизни.

Для справки:

Пути где в реестре может лежать
информация о вашей игрушке:

HKEY_LOCAL_MACHINE\SOFTWARE\ НАЗВАНИЕ_ФИРМЫ_ПРОИЗВОДИТЕЛЯ\ НАЗВАНИЕ_ИГРЫ\
HKEY_CURRENT_USER\Software\ НАЗВАНИЕ_ФИРМЫ_ПРОИЗВОДИТЕЛЯ\ НАЗВАНИЕ_ИГРЫ\

Пункт два если первый
пункт не помог.

Ну если не помог значит
производители люди не дурные и надо что-то
делать.

Либо использовать эмулятор
либо ломать игру. Практически все эмуляторы
которые я видел работали по принципу, сделал
слепок диска (650 метров длинной), а потом его юзаю.
Не знаю как у вас а меня, на винте редко можно 650
метров свободных найти. Поэтому я пошёл другим
путем.

Пишем эмулятор CD-ROM(а) под MD.

Как известно по крайней мере не
мне одному, все мастдаевские программы работают
через функции API. И как я припоминаю для проверки
типа диска служит функция со странным названием
GetDriveType. Ну вот и находиться она в самом страшном
файле виндов KERNEL32.DLL. Ну что, кто-нибудь ломал
виндовс? А придется. Попробуем натравить на этот
KERNEL32.DLL какой-нибудь дизассемблер, я юзаю W32Dasm.
Если вам нравиться что-то другое я не возражаю.

В полученном листинге ищем
нужную фукцию: Functions/Exports потом из приведенного
списка выбираем GetDriveTypeA щелкаем два раза и
попадаем в следующий у участок кода:

Exported fn(): GetDriveTypeA — Ord:0168h
:BFF77917 57 push edi — делаем что-то важное
:BFF77918 6A21 push 00000021
:BFF7791A 2BD2 sub edx, edx
:BFF7791C 68671DFABF push BFFA1D67
:BFF77921 64FF32 push dword ptr fs:[edx]

……………………. ………………

:BFF77939 83C408 add esp, 00000008
:BFF7793C 5F pop edi
:BFF7793D E942D3FFFF jmp BFF74C84 — переход в тело функции

Теперь будем разбираться, как
работает эта функция, для этого нам нужен
справочник по API функциям мастдая. Я лично
пользуюсь выдранным из Borland С. Посмотрим ага
находим:

UINT GetDriveType(LPCTSTR lpRootPathName);

Значитися функция взращает в eax
тип диска, имя которого ей передали.

Ага, а вот значится
возвращаемые значения:

 

Числовое значение
Строковый
эквивалент
Комментарий
0 MD не смог
определить тип диска
1 Диск не нашелся
2 DRIVE_REMOVABLE Типа дискета,
можно заменить
3 DRIVE_FIXED Типа винт
заменить нельзя
4 DRIVE_REMOTE Типа сетевой
5 DRIVE_CDROM Типа CD-ROM
6 DRIVE_RAMDISK Типа RAM-диск

Ясно, теперь будем работать (я
покажу как из винта сделать CD а если кто хочет
сделать его например из сетевого, то думаю, что он
и сам догадается как).

Переходим на команду

:BFF7793D E942D3FFFF jmp BFF74C84

И прыгаем в тело функции Execute Text
\ Execute Jump, или просто нажимаем стрелку вправо.

Попадаем сюда:

Referenced by a (U)nconditional or (C)onditional Jump at
Address:

|:BFF7793D(U)
|
:BFF74C84 55 push ebp
:BFF74C85 8BEC mov ebp, esp
:BFF74C87 81C4B0FDFFFF add esp, FFFFFDB0
…………………………………………………..…

Посмотрел я на это и понял, что
черт здесь лапу сломит, ну или я зрение. Но можно
не расстраиваться, ломать, не строить. Так вот,
что бы передать программе, что этот диск является
винтом, функции нужно занести в eax 3, вот и будем
искать команду типа

mov eax 00000003.

У меня она нашлась в этом месте:

:BFF74DB6 B905000000 mov ecx, 00000005
:BFF74DBB F3 repz
:BFF74DBC A6 cmpsb
:BFF74DBD 7407 je BFF74DC6
:BFF74DBF B803000000 mov eax, 00000003 — нечто интересное!
:BFF74DC4 EB05 jmp BFF74DCB

Ну вот можно сказать и всё,
меняем mov eax, 00000003 на mov eax, 00000005, то есть B803000000 на
B805000000 и всё.

Записываем коды парочки
предыдущих и парочки следующих команд лезем в
шестнадцатеричный редактор, находим там эту
последовательность, пытаемся найти ее ещё раз,
если не нашли то не правим это место, если нашли
то записываем коды тройки предыдущих и тройки
следующих команд лезем в шестнадцатеричный
редактор, и т.д.

Итого мы поменяли один бай в
теле мастдая, а сколько получили выгод? 🙂

Ну а третий способ саму игрушку
сломать, но это уже тема отдельной статьи.

Green Mouse

Оставить мнение

Check Also

Атака NFCdrip использует NFC для передачи данных на сравнительно дальние дистанции

Исследователь продемонстрировал, что NFC можно использовать в преступных целях и на сравни…