Декомпилируйте ac dll, чтобы использовать pinvoke на - PullRequest
1 голос
/ 20 марта 2012

Можете ли вы декомпилировать dll для использования pinvoke или для использования отражателя?

Как получить имена методов и подписи?

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Проще говоря, нет тривиального способа сделать то, что вы хотите.Вы можете использовать библиотеку дизассемблера, такую ​​как distorm , чтобы разобрать код вокруг экспортированных точек входа.Можно использовать некоторые эвристики, но многие из них будут работать только с 32-битными соглашениями о вызовах (__stdcall и __cdecl), в частности.Лично я нахожу привязки Python для этого полезными, но libdasm может сделать то же самое.

Любой другой инструмент с возможностями дизассемблера будет иметь большое значение, такой как OllyDbg или Immunity Debugger.

Примечание: если у вас есть программа, которая уже вызывает DLL, о которой идет речь, большую часть времени стоит запустить ее в отладчике (конечно, только если коду можно доверять,но ваш вопрос в основном подразумевает это) и устанавливает точки останова в экспортируемых функциях.С этого момента вы можете сделать гораздо больше из поведения во время выполнения и содержимого стека выполняемой цели.Тем не менее, это все еще будет сложно - особенно с __cdecl, где функция может принимать произвольное количество параметров.В таком случае вам придется просеять вызывающую программу для внешних ссылок на соответствующую функцию и вывести из очистки стека, следуя call, сколько параметров / байтов она отбрасывает.Конечно, просмотр инструкций push перед call также будет иметь определенную ценность, хотя это требует небольшого опыта, особенно когда вызовы вложены, и вам необходимо различить, какой push принадлежит какому call.

В основном вам придется разработать минимальный набор эвристик, соответствующий вашему случаю, если только вы не лицензировали один из дорогих инструментов ( и знают, как их использовать), которые поставляются с их собственными эвристиками, которые имеютобычно долго настраивались.

Если у вас уже есть лицензия IDA Pro (или плагин Hex-Rays), вы, конечно, должны ее использовать.Кроме того, бесплатные версии IDA , хотя и отстают, могут обрабатывать 32-битные файлы x86 PE (которые, конечно, включают в себя DLL), но лицензия здесь может быть препятствием в зависимости от проекта, над которым вы работаете(«Коммерческое использование запрещено»).

1 голос
/ 20 марта 2012

Вы можете использовать ходок зависимостей.

http://www.dependencywalker.com/

0 голосов
/ 20 марта 2012

Вы можете найти экспортированные имена функций с помощью dumpbin или Dependency Walker. Но чтобы знать, как вызывать функции, вам действительно нужен заголовочный файл и некоторая документация. Если у вас их нет, вам придется перепроектировать DLL, и это очень сложная задача.

...