Использование чужих DLL
Есть тут у меня одна идея. Всяческие ресурсы из чужого софта повытаскивать. Нехорошо конечно. Но интересно. В часности выдернуть ролики из игры. В папке с игрой есть всяческие DLL'ки. Открываю их PE Explorer'ом. Там среди экспортируемых функций - OpenDivxFile. Сами файлы в немного переделанном Divx'е, как я понимаю, просто так играться не хотят. Тоже самое с музыкой. И я подумал - А пусть DLL'ка мне их играет. Вот только PE Explorer не показывает мне какие параметры принимает функция и что возвращает :( Так как я в АСМе не ах, прошу помощи у вас. Т.е. как определить какие параметы надо передавать в функцию, что она будет возвращать и как все это использовать. Думал вызвавать функции из своей программы на VB, так как его более или менее могу использовать, но... Потому и пишу сюда - в Низкоуровневое...
В import table содержатся лишь адреса, там нет количесва передаваемых аргументов. Так что выяснять придётся косвенно. Надо загрузить это дело в дебагер, и выяснить, когда происходит обращение к этой функции, а там посмотреть количество передаваемых параметров, и что они означают, но это вообщем гиморно будет.
В import table содержатся лишь адреса, там нет количесва передаваемых аргументов. Так что выяснять придётся косвенно. Надо загрузить это дело в дебагер, и выяснить, когда происходит обращение к этой функции, а там посмотреть количество передаваемых параметров, и что они означают, но это вообщем гиморно будет.
Ок. Я так и сделал.
Поставил SoftIce на свою машину с Win2000 и запустил из под него игрушку. Тока облом вышел: по всей видимости из-за того, что игра на экран картинку выводит не так как маздайка. Сам SoftIce работает - когда я его вызвал экран остался черным (игра такую картинку показывала), а когда я вслепую набрал выход - игра продолжилась.
Есть ли выход из этой ситуации?
Драйвер на видео для Сайса использую универсальный - моей MX'овой карточки у него в списке нету :(
В import table содержатся лишь адреса, там нет количесва передаваемых аргументов. Так что выяснять придётся косвенно. Надо загрузить это дело в дебагер, и выяснить, когда происходит обращение к этой функции, а там посмотреть количество передаваемых параметров, и что они означают, но это вообщем гиморно будет.
Ну не обязательно так геморно...
Достаточно воспользоваться IDA.
Ну не обязательно так геморно...
Достаточно воспользоваться IDA.
Насколько я знаю IDA - дизассемблер и как мне кажеться в данном случае мало поможет. Если нет, объясни как.
Насколько я знаю IDA - дизассемблер и как мне кажеться в данном случае мало поможет. Если нет, объясни как.
Ну это далеко не просто дизасемблер.
Количество передаваемых параметров можно получить по тому, как чиститься стек при завершении функции. IDA определяет это автоматически.
По тому, как используются передаваемые параметры внутри кода DLL можно определить, что они из себя представляют. Потом, конечно, желательно проверить дебагером.
Например, дизассемблировали код, нашли в листинге необходимую процедуру. В её листинге IDA уже указала количество передаваемых аргументов, и пронумеровала их типа arg_0, arg_4, и т.д.
Далее видим, что arg_4 передается в CreateFile первым аргументом, след-но предполагаем, что это имя файла. Ну и т.д.
Требует некоторого навыка, но кто сказал, что будет легко.
Ок. Я так и сделал.
Поставил SoftIce на свою машину с Win2000 и запустил из под него игрушку. Тока облом вышел: по всей видимости из-за того, что игра на экран картинку выводит не так как маздайка. Сам SoftIce работает - когда я его вызвал экран остался черным (игра такую картинку показывала), а когда я вслепую набрал выход - игра продолжилась.
Есть ли выход из этой ситуации?
Драйвер на видео для Сайса использую универсальный - моей MX'овой карточки у него в списке нету :(
Это бага сайса. Тебе нужен патч для него, он есть в нете. У меня такие же проблеммы были.
Ну это далеко не просто дизасемблер.
Количество передаваемых параметров можно получить по тому, как чиститься стек при завершении функции. IDA определяет это автоматически.
По тому, как используются передаваемые параметры внутри кода DLL можно определить, что они из себя представляют. Потом, конечно, желательно проверить дебагером.
Например, дизассемблировали код, нашли в листинге необходимую процедуру. В её листинге IDA уже указала количество передаваемых аргументов, и пронумеровала их типа arg_0, arg_4, и т.д.
Далее видим, что arg_4 передается в CreateFile первым аргументом, след-но предполагаем, что это имя файла. Ну и т.д.
Требует некоторого навыка, но кто сказал, что будет легко.
Может подскажешь какой-нибудь урл на страницу с описанием работы с IDA, а то я ничего в нем не понял :(