Да, было время :-). Я первое что из реверсинга делал — пытался понять как сейвки дьяблы работают. Сидел довольно долго над этим делом. Тем более, что когда игра запускалась в полноэкранном режиме, попадание на брикпоинт завешивало систему намертво (как сделать запуск в оконном на тот момент момент у меня ума не хватало). В результате получил бесценный опыт, а в сейвах так и не разобрался. А недавно на хабре видел статейку про ребят, которые реверсили его полностью.
Может напишете как? Я, например, ботов делаю таким образом по той простой причине, что распознавание изображений для меня совершеннейшая загадка. А «попроще» и «распознавал поле» для меня уж точно не одно и то же.
Да, написал Dll используя Microsoft Detours. Потом с помощью CreateRemoteThread инжектил в процесс.
По поводу DllMain Вы тоже угадали.
Что касается декларации, то дело обстоит таким образом:
Microsoft Detours вставляет своего рода трамплин(в их терминологии) в код процесса. Трамплин выглядит примерно как jmp hook_function_addres, заменяя им 5 байт кода исследуемой программы.
Я объявляю функцию как _naked, чтобы компилятор не генерировал для нее ненужного, типа выхода по ret. Пишу там все что мне надо, затем перехожу джампом обратно. Это позволяет перехватить не только в начале функции, а вообще где угодно в коде. Как-то так.
Адрес кода который перехватывается взялся из цикла где перебираются шарики. (последний скрин перед видео)
Хоть вопрос и не ко мне, но вставлю свои 5 копеек. Про артмани лично я узнал много после того, как начал исследовать приложения. Причем узнал от программиста 1С-ника, который долго и радостно его пользовал (не для профессиональных целей, конечно). После того как скачал, сразу же с радостью купил себе лицензионную копию, настолько оно мне облегчило жизнь. Потому как до того писал сомнительного качества приблуды, которые останавливали выполнение программы и выполняли поиск, примерно как описано у bioskiller.
Библиотека от Microsoft Research для инъекции Dll и перехвата управления на себя :-). Здесь подробнее. Можно скачать и побаловаться.
Есть еще EasyHook под C#. Она вроде бы повеселее, но я по некоторым причинам не пользуюсь
Ну у меня тоже пока не играет. Но обязательно будет в следующей серии. На ту игру я тоже смотрел. Но как подойти к ней из под отладчика не догадался, а распознавание из скриншотов — не интересно.
По поводу DllMain Вы тоже угадали.
Что касается декларации, то дело обстоит таким образом:
Microsoft Detours вставляет своего рода трамплин(в их терминологии) в код процесса. Трамплин выглядит примерно как jmp hook_function_addres, заменяя им 5 байт кода исследуемой программы.
Я объявляю функцию как _naked, чтобы компилятор не генерировал для нее ненужного, типа выхода по ret. Пишу там все что мне надо, затем перехожу джампом обратно. Это позволяет перехватить не только в начале функции, а вообще где угодно в коде. Как-то так.
Адрес кода который перехватывается взялся из цикла где перебираются шарики. (последний скрин перед видео)
Есть еще EasyHook под C#. Она вроде бы повеселее, но я по некоторым причинам не пользуюсь