Microsoft Detours如何工作以及如何使用它来获取堆栈跟踪?

Bru*_*uce 21 windows detours

我是微软Detours的新手.我已经安装它来跟踪进程所做的系统调用.我运行以下来自网络的命令

syelogd.exe /q C:\Users\xxx\Desktop\log.txt 
withdll.exe /d:traceapi.dll C:\Program Files\Google\Google Talk\googletalk.exe
Run Code Online (Sandbox Code Playgroud)

我得到了日志文件.问题是我不完全理解这里发生了什么.弯路如何运作?它如何跟踪系统调用?另外我不知道如何读取log.txt中的输出.这是log.txt中的一行

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId()
Run Code Online (Sandbox Code Playgroud)

最后,我想获得该过程的堆栈跟踪.我怎么能得到它?

Pab*_*abo 26

Detours让你拦截任何功能.它会在您指定的地址中放置一个jmp,为您的代码创建一个蹦床.最后,如果要执行此操作,请调用旧函数.要使用Detours,您必须在要拦截的过程中注入代码.

为了简化这个过程,您可以使用Deviare API Hook来完成所有注入人员,您可以使用任何支持COM技术的编程语言的拦截应用程序,包括.NET,Delphi,C++,Python等.下载软件包后,您将在其中找到一些例子.有一个名为DeviareCSharpConsole的控制台,可以拦截显示完整堆栈跟踪信息的任何进程的任何API.

这是Deviare API Hook的工作方式,但如果您想创建一个挂钩另一个进程的应用程序,则需要执行此操作:

Deviare API Hook设计

应在目标进程中创建代理以拦截所需的API.要拦截这些API,您可以使用Detours,但您必须编写未包含在该库中的IPC人员.

如果您需要使用Deviare API Hook在目标进程内编写代码,则可以使用Deviare Custom Hooks.此功能允许您拦截API并异步处理已处理的参数.


mar*_*ona 22

取而代之的弯路(这是免费的,仅32位)或easyhook(这是KHM,一个的有点乱码),你可能想看看mhook 2.4,这是非常整洁的代码和BSD许可.适用于x86和x64,处理IP相关代码等.

还有关于它如何在网站上工作的详尽描述.

替代文字

对于堆栈跟踪,你可以使用CaptureStackBackTrace()kernel32,或者如果你想获得幻想,用StackWalk64()dbghelp.

  • 更新:Microsoft Detours现在免费并获得MIT许可,包括x64支持。请参阅:https://github.com/Microsoft/Detours/blob/master/LICENSE.md https://github.com/microsoft/Detours/wiki/OverviewHelpers (2认同)

TCS*_*TCS 16

首先,我强烈建议,如果你想执行API挂钩,我会选择easyhook:http://easyhook.codeplex.com/ (开源).这是一个非常好的,简单的api-hook框架.

关于如何获取堆栈跟踪,我不记得到底是怎么做的,但请查看WinAPIOverride32:http://jacquelin.potier.free.fr/winapioverride32/ (开源).他正是这样做的,而且它是开源的.此外,如果您需要用于研究的跟踪,WinAPIOverride32是一个很好的应用程序,用于研究应用程序的工作方式.

编辑:只需再添加一个应用程序.http://www.rohitab.com/就像WinAPIOVerride32,但它支持64位,自从我写这个答案后它真的有所改进.我必须指出它在某些情况下它错过了我在WinAPIOverride32中找到的API调用,但它仍然相当不错.不幸的是,该来源尚未发布.

关于api-hook如何工作,嗯这是一个很长的解释,我会指向你这篇文章:http: //www.codeproject.com/KB/system/hooksys.aspx 它给出了一个很好的解释如何在引擎盖(除了那里写的还有其他方法,但仍然是一篇非常好的文章).

希望能帮助到你!:-)