Bеzценzурное Аналитически-Razvитое Sooбщестvо Aнаrхистоv
Меню сайта
Категории каталога
Компьютерные примочки [8]
Посмеёмся [1]
Наш опрос
Являетесь ли вы сторонником "Анархии"?
Всего ответов: 29
Главная » Статьи » Компьютерные примочки

Взлом
Грин, Грин у меня тут игрушка прикольная, прикольная.
Но без 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
Категория: Компьютерные примочки | Добавил: messi (2006-12-23)
Просмотров: 810 | Комментарии: 6 | Рейтинг: 0.0/0
Всего комментариев: 1
1 Wizard  
0
игрок

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн : 1
Нелегалов: 1
Пользователей: 0
Copyright MyCorp © 2026Сайт создан в системе uCoz