Pull to refresh

Comments 25

Для таких «разбирательств» очень полезна IDA — она умеет читать количество параметров для всех функций и показывать код в виде С-подобного кода, что очень сильно упрощает разбор кода. Только с её помощью я смог за неделю вытянуть из одной игры примерно 3к ветвлений сюжета, хранящихся в самой программе в виде чудовищных switch-case — на голом АСМе такие трюки тяжело делаются. Да и дебажить там проще — в любом мете отладки можно нажать F5 и курсор будет на текущей операции псевдокода. Ориентация по памяти тоже очень простая.
Ради интереса попробовал загрузить plaidscores.dll в IDA. Выбрал функцию psSubmit, нажал F5 и увидел следующую сигнатуру
int __cdecl psSubmit(int a1, double a2, int a3)
Это нормально, что IDA приняла const char* за int? Я, конечно, понимаю, что указатели можно хранить и в int'ах, но всё же
Дальше по коду будет понятно, что с типам была ошибка и можно вручную поменять тип данных — тогда и касты пропадут.
Структуры и объекты оно тоже не определяет — приходится самому все это описывать. Но это же мелочи, всё равно упрощение труда значительное получается.
UFO just landed and posted this here
Статья интересная, много инструментов, без лишних сложностей.

P.S.
Скачать IDA и нажать F5 стало так просто :)
А цена и условия приобретения кусаются, но кого это интересует, мы даже не замечаем что пишем.
А при чём здесь цена? На официальном сайте IDA можно скачать бесплатную версию
Я ждал такого ответа.
А на этой версии www.hex-rays.com/products/ida/support/download_freeware.shtml можно использовать hex-rays?
Или Ильфак изменил свою позицию, возможно пропустил в СМИ.

Расстраивает что люди перестали замечать разницу между лицензией и контрафактом.
Может у автора лицензия персональная или он работает в конторе, где есть такая лицензия? :)
Спасибо за ссылки на инструментики. Вообще, всегда поражал ход мысли хакера. Интересно, сколько времени в итоге ушло, чтобы взломать очки? Сляпать такую игру из двух дрыгающихся спрайтов и двух синих кирпичей займёт пару-тройку вечеров в любой современной игроделке.
Суммарно часов пять, наверное. Не всё шло так гладко, как написано в статье — были и попытки разобрать алгоритм генерации хеша, и написание простеньких code cave'ов для автоматизации проверок
А что, человек не мог написать игру на Delphi?
Теоретически мог, но сомнительно как-то…
Непонятно почему используется такая старая версия DiE. Не хочу сказать, что в данном примере новая чем-то сильнее помогла, просто глаза резануло.
Реальной причины использовать старую версию DiE нет. Просто валялась на компьютере, вот и решил воспользоваться

На самом деле, более новые версии DiE конкретно в данном случае ничего нового об исполняемом файле не сообщают
И почему сомнительно? Age Of Wonders написана и как-то никто не умер.
А мелкие игры так вообще постоянно на ней делаются, не даром Game Maker дельфевый.
«Космические рейнджеры» написана целиком на дельфях, вообще-то ;)
Я ожидаю в скором времени пост про: «Как играть в игру, не запуская её».
Возможно это будет осуществлять внедрением NFC-чипа под кожу…
Конечно исследование очень увлекательно, но мне кажется проще вариант использовать Fiddler (Для HTTP запросов), что бы перехватить запрос и генерировать поддельный используя встроенный Composer или Autoresponder.
Не совсем вас понял. Что именно и каким образом вы хотите подделывать в отправляемых запросах, учитывая, что алгоритм генерации хеша так и не был распарсен?
Прошу прощения упустил момент, что это не просто MD5 от данных
Возможно, это и MD5 от данных, вот только от каких именно и в каком порядке — неизвестно
Как цифровая подпись используется хег от передаваемых данных (параметров) + «соль». Параметров тут немного, а «соль» скорее всего передается вторым параметром в функцию psInit — так проще/надежней использовать единую «соль» и в EXE и в DLL. Осталось перепробовать их комбинации (параметры + «соль») и результат, скорее всего, будет найден.

PS
Очепятка?

В отличие от софтварных, хардварные брейкпоинты останавливаются на инструкции, идущей после выполнения интересующих нас действий, так что смотрим на то, что находится по адресу 0x09F60195.

Может все-таки стоит смотреть на адрес 0x09F6018E, т.к. по адресу 0x09F60195 находится собственно вызов функции?
Нельзя просто так взять и поиграть в игру.

Спасибо за познавательную статью. Кстати про float, я через ArtMoney уже сталкивался с нецелым количеством патронов. А так же изощрёнными данными моей «Империи» в формате текст. Так что с тех пор делаю с десяток изменений числа, чтобы уж наверняка попасть на нужный.
Кстати популярный ход, это побегать не зарабатывая очков, чтобы многие значения поменялись, кроме искомого.
Кстати, рекомендую использовать Cheat Engine вместо ArtMoney. Он, во первых, бесплатный, во вторых — намного более мощный. Может бы вышло и без ollydbg обойтись :)
Sign up to leave a comment.

Articles