Подтвердить что ты не робот

Как работает Microsoft Detours и как его использовать для получения трассировки стека?

Я новичок в Microsoft Detours. Я установил его для отслеживания системных вызовов, которые делает процесс. Я запускаю следующие команды, которые я получил из Интернета

syelogd.exe /q C:\Users\xxx\Desktop\log.txt 
withdll.exe /d:traceapi.dll C:\Program Files\Google\Google Talk\googletalk.exe

Я получаю файл журнала. Проблема в том, что я не совсем понимаю, что здесь происходит. Как работают обходные пути? Как он отслеживает системные вызовы? Также я не знаю, как читать вывод в log.txt. Вот одна строка в log.txt

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId()

Наконец, я хочу получить трассировку стека процесса. Как я могу это получить?

4b9b3361

Ответ 1

Объяснения позволяют перехватить любую функцию. Он помещает jmp в адрес, который вы указываете, создавая батут для вашего кода. Наконец, вы вызываете старую функцию, если хотите это сделать. Чтобы использовать Detours, вам нужно ввести код в процессе, который вы хотите перехватить.

Чтобы упростить этот процесс, вы можете использовать Deviare API Hook, который выполняет все команды для инъекций, и вы можете использовать перехватывающие приложения с любого языка программирования, который поддерживает COM-технология, включая .NET, Delphi, С++, Python и т.д. После загрузки пакета вы найдете в нем несколько примеров. Существует консоль с именем DeviareCSharpConsole, которая позволяет перехватывать любой API любого процесса, отображая полную информацию о трассировке стека.

Это способ API-интерфейс API Deviare, но это то, что вам нужно сделать, если вы хотите создать приложение, которое перехватывает другой процесс:

Deviare API Hook Design

Агент должен быть создан в целевом процессе для перехвата требуемых API. Чтобы перехватить эти API, вы можете использовать Detours, но вам нужно закодировать персонал IPC, который не входит в эту библиотеку.

Если вам нужно написать код внутри целевого процесса, используя Deviare API Hook, вы можете использовать Пользовательские клики Deviare. Эта функция позволяет перехватывать API и обрабатывать обработанные параметры асинхронно.

Ответ 2

Вместо объединенных (что бесплатно для 32-битных) или easyhook (что, khm, немного беспорядочный код) вы можете проверить mhook 2.4, который является очень аккуратным кодом и лицензирован BSD. Работает на x86 и x64, обрабатывает IP-относительный код и т.д.

Там также подробное описание того, как это работает на сайте.

alt text

Как для backtrace стека, вы можете использовать CaptureStackBackTrace() из kernel32, или если вы хотите получить фантазию, используйте StackWalk64() от dbghelp.

Ответ 3

Прежде всего, я бы очень советовал, что если вы хотите выполнить привязку API, я бы пошел с easyhook: http://easyhook.codeplex.com/ ( Открытый исходный код). Это ОЧЕНЬ хорошая и легкая инфраструктура api-hooking.

О том, как получить трассировку стека, я точно не помню, как это сделать, но проверьте WinAPIOverride32: http://jacquelin.potier.free.fr/winapioverride32/ ( Открытый исходный код). Он делает именно это, и это с открытым исходным кодом. Кроме того, если вам нужны следы исследований, WinAPIOverride32 - отличное приложение для изучения того, как работают приложения.

EDIT: просто добавьте еще одно приложение. http://www.rohitab.com/ похож на WinAPIOVerride32, но он поддерживает 64-битный, и он действительно улучшился, так как я написал этот ответ. Я должен отметить, что в некоторых случаях он пропустил вызовы API, которые я нашел в WinAPIOverride32, но он все еще довольно хорош. К сожалению, источник не опубликован.

О том, как работает api-hooking, Ну, это длинное объяснение, я бы указал вам на эту статью: http://www.codeproject.com/KB/system/hooksys.aspx Это дает довольно хорошее объяснение того, как это делается под капотом (есть другие методы, кроме того, что там написано, но тем не менее, это очень хорошая статья).

Надеюсь, это поможет!: -)