You are not logged in.
Pages: 1
Вот у меня есть Ида и знание основ Асма, как мне пускануть игру? При нажатии F9 меня обсыпает исключениями, а потом появляется радостное окно StreamMemoryFix и говорит, что эта версия игры не поддерживается...
Offline
Запускть из-под администратора.
А вообще, пользоваться отладчиком - непродуктивно. Если есть понимание, как оно работает - отладчик только мешает. Если нет - помогает очень слабо. gta_dll была сделана вообще без отладчика.
Я, обычно, если надо посмотреть что-то "в процессе", просто врезаю свою функцию, которая печатает то, что нужно и в нужном виде.
Offline
Скажу несколько вещей по своему малому опыту (и потому, возможно, это будут более полезные вещи для такого же новичка).
1) Особенно это касается дебега игры, работающей в полноэкранном режиме. Поставишь break - все зависнет. Возврат на рабочий стол только путем убивания процесса. Поставишь trace - малоинформативно. Как уже было сказано, ведение лога - оптимальный вариант.
2) Примеры inject'ов есть в listener'овском gta_dll. Вклиниваемся в интересующее нас место при помощи injectFunction, выводим все что нужно. Если место не очень удачное (требуется выравнивание стека, восстановление значений регистров - короче то, что требует использования асмовставок), то лучше воспользоваться спецификатором __declspec(naked). Он отрубает у функции пролог и эпилог (в прологе резервируется место под локальные переменные, сохраняются в стеке значения регистров, в эпилоге все это восстанавливается и выполняется выход из функции). Тогда можно будет вернуть все на место руками. Но при этом теряется возможность объявлять локальные переменные. Я обхожу это ограничение объявлением таких переменных как static.
3) По-моему отладчики нужны только для нахождения OEP упакованных программ и снятия дампа. Наблюдение за постоянно изменяющейся картиной начинает подбешивать через пару секунд методичного тыканья в кнопку F7.
4) Чтобы понять принцип работы программы, гораздо удобнее загрузить ее в дизассемблер и спокойно проанализировать. Если анализируется своя программа, то можно выполнить экспорт символов в PDB формате. Этот файл будет загружен вместе с базой в иду и вместо dword_xxxx будут видны настоящие имена переменных и функций.
Offline
Хм, вот как мне отловить вызов процедуры, сводящей поезд с рельс?
Offline
@Alien - Касательно п.2. К счастью, таких функций в SA нет. Там практически все можно делать без ассемблера (максимум, методы нужно объявлять как __thiscall). Вот в IV весьма интенсивно используется кодогенерация линкером (и параметры в регистрах, притом произвольных; и регистры не сохраняются сверх необходимого).
@~AquaZ~ - Ловить проверку скорости в CTrain::processControl. Отладчиком это точно не поймаешь
UPD: Насколько я посмотрел, это младший бит CTrain::m_bWreckedFlags (+0x5B9)
Нужно смотреть, где он выставляется. (поведение любого entity обрабатывается в processControl. Но искать нужное место в функции на 8..12К - то еще занятие)
Offline
под "не очень удачным местом" имеется ввиду середина функции. Например, если нужно перехватить обработчик какого-нибудь опкода и нет необходимости переписывать остальные 99 опкодов.
char __declspec(naked) opcode_00D6() { static CScriptThread *thread; __asm mov thread, esi thread->getNumberParams(1); debug("00D6 called with parameter %d", opcodeParams[0].nParam); if (opcodeParams[0].nParam) { thread->logicalOp = opcodeParams[0].nParam; if (opcodeParams[0].nParam >= 1 && opcodeParams[0].nParam <= 8) { ++thread->logicalOp; thread->condResult = 1; } else if (opcodeParams[0].nParam >= 21 && opcodeParams[0].nParam <= 28) { ++thread->logicalOp; thread->condResult = 0; } } else thread->condResult = 0; __asm { xor al, al mov ecx, [esp+0x40] pop edi pop esi pop ebp pop ebx mov large fs:0, ecx add esp, 0x3C retn 4 } }
Offline
Короче, я тут совсем тупой... CTrain::m_bWreckedFlags, как я понял, член класса CTrain, но где нарыть сисок классов?.. И вообще, как в ассемблерном коде может быть класс ?
__
Решил сказать основную цель - мне надо свести поезд с рельс скриптом. В определённом месте выполнить ассемблерный код, который всё сделает, или изменить чё-то в памяти... Но чё? Вот это я и решил найти.
Offline
Насчет списка классов... В полном виде, он есть только у R*
Какое-то количество имен классов, функций и переменных было восстановлено (порядка 20000..30000).
Где это брать:
1) я регулярно выкладываю свои .idb
2) ~200К кода восстановлено до С++ исходника (так называемая gta_dll), все полностью рабочее и может подменять соответствующие функции exe.
3) много непересекающейся информации есть в исходниках MTA (которые выложены на google code)
Что касается отношения классов и ассемблера - рекомендуется помедитировать над тем, чем структура отличается от класса и чем метод отличается от функции.
Offline
Вообще я пользуюсь идой для взлома программ :cool::cool:...(хорошо что до сайтов ей пока не пользуюсь )
Но по своему хакерскому опыту скажу что надо...
1. запустить GTA:SA
2. запустить IDA PRO
3. и ПРИАТАЧИТСЯ к процессу...
ну а дальше разбирайся сам...я так делаю когда надо взломать программу с "останками " ASPack...Да впринципе не моё это дебажить преложения чтобы их исправить...:lol:
~Надо уметь жить~
~1 правило хакера - не убей и не повреди без особой нужды~
Offline
1. запустить GTA:SA
2. запустить IDA PRO
3. и ПРИАТАЧИТСЯ к процессу...
Приведу цитату из одной хорошей книги:
Нельзя отлаживать приложения, использующие DirectX или OpenGL. ... При наступлении критической ситуации происходит автоматическое переключение в отладчик, и это может вызвать срыв в работе OC.
Offline
@listener - боюсь, что BC
Offline
Да это все понятно а как, менять значения приложения через IDA?
Offline
Offline
Pages: 1