Поиск параметров функции Dll
-
08-07-2019 - |
Вопрос
Как найти параметры недокументированный функция dll?
Я искал по всему Интернету и в итоге нашел один способ:он включает в себя декорированные функции.Однако я не могу найти способ получить их.
Любая помощь будет оценена по достоинству.
Решение
Вам нужно разобрать приложение, используя, как заметил Пол, что-то вроде IDA Pro (или бесплатную версию того же самого).
Хорошим вводным ресурсом является Wikibook, x86 Разборка . В частности, ознакомьтесь с разделом о функциях и фреймах стека . Параметры функции вывода могут быть простыми для простых функций, принимающих несколько параметров стандартного типа.
Вероятно, лучший способ начать работу с такими вещами - это создать небольшую тестовую DLL, создать несколько функций с известными параметрами, а затем разобрать вашу DLL, чтобы увидеть шаблоны. Изучайте разборку из своих собственных функций (для которых у вас есть исходный код и полная подпись), а не погружайтесь в разборку сторонних компонентов.
Другие советы
Я сделал довольно подробный ответ здесь , ReactOS как вам кажется, это лучшая ставка, все здесь немного не в себе.
Я бы настоятельно не рекомендовал пытаться разобрать системные библиотеки DLL.
НАМНОГО более изобретательный (и я не верю, что обсуждаемый так далеко от внешнего вида вещей) метод состоит в том, чтобы перечислять содержимое PDB.
Файлы PDB являются символами отладки, как вы, возможно, знаете, однако, Microsoft требует, в связи с действиями антимонопольных судебных процессов, выпускать большие объемы незарегистрированной в ином случае информации. Р>
Полностью точная, полезная и обновляемая информация для огромного количества API Windows только документирована с помощью файла PDB. Соглашение о вызовах, количество аргументов и даже типы и имена аргументов документируются (но не в отношении особенностей использования course:).
Посмотрите DIA SDK, dia2dump - хороший пример, поставляемый с Visual Studio, для дальнейшего изучения, он также предлагает решение для декорирования функций, чтобы поговорить конкретно с вашим вопросом. Р>
Кроме того, kernel32 предоставляет UnDecorateSymbolName, так что вы можете использовать это также, если вы не хотите связываться с отладочными библиотеками SDK.
Единственный способ сделать это - разобрать функцию и посмотреть, как она использует регистры и стек. IDA Pro - лучший инструмент для этого, но он не является тривиальным.
Это COM Dll? Если это COM Dll, то зарегистрируйте его, используйте представление OLE, чтобы узнать Interafaces и параметры. Р>
Прежде всего, скачайте Зависимость Уокер и откройте в нем свою DLL.Вы увидите экспортированные и импортированные символы.Если имя вашей функции выглядит как _MyFunction - это стиль "C" (не оформленный), и вам нечего с ней делать (можно дизассемблировать, как было сказано ранее)
Если это больше похоже на ?_MyFunction@LoNgSetOfSome@_StrangeChAracTers, то оно оформлено на C++, и вы можете попытаться «отдекорировать» его, используя {неофициальную} информацию из здесь
Если единственной информацией, которую вы располагаете, является недокументированное имя функции, то, к сожалению, невозможно определить параметры функции только из этого.
Если вы хорошо разбираетесь в сборке, возможно, можно разобрать машинный код для функции и выполнить обратный инжиниринг. Но это довольно сложно сделать для всех, кроме самых простых функций.
Я не очень знаком с форматом PE, который используется в Windows, но я почти уверен, что не существует простого способа сделать это. Если таблица символов не была удалена, вы можете найти некоторую информацию (не уверен, как Windows хранит отладочную информацию в PE), но она почти наверняка не поможет вам с типами параметров. Лучше всего загрузить DLL в отладчик и поэкспериментировать с ней ... отслеживать необработанную память в кадрах стека, отправлять различные типы переменных и т. Д.
Даже если вы найдете хороший ресурс по отладочной информации в PE-файле, почти наверняка не будет никакой информации для частной функции.