我正在反转用C语言编写的应用程序。我有一个想要记录运行时的特定功能,而无需暂停/停止该应用程序。

我对该函数的期望值为:



[ESP + 4]这是缓冲区的长度

[ESP + 8]其中是指向字符串缓冲区的指针

然后我想读取缓冲区并将其写入文件中。

我被告知要使用的第一件事是Immunity的LogBpHook,它可以正常工作很好,但是它停止了应用程序,并且由于它是一个经常调用的函数,因此它真的变得很慢。

然后我尝试设置FastLogHook,听起来更像是我想要的。它注入一个日志存根并存储遇到的值,但是据我所知,它无法像我上面描述的那样执行更多的内存读取(如果可以,请告诉我)。同样,它也经常使我的应用程序崩溃,因此毫无疑问。

所以我留下了注入自定义代码存根的想法,该代码存根将负责进一步的读取并将值记录到文件中。是否有任何工具可以执行此操作,或者我必须手动编写+注入该程序集?

如何在不停止应用程序的情况下记录函数参数的运行时间?

#1 楼


您可以编写挂钩库(DLL),该库将修补您要定位的API。该补丁只会将参数打印到文件/控制台,然后继续返回原始功能。途中不会停止。要实际挂钩API,您需要将DLL注入目标应用程序。您可以将Microsoft的Detours用作示例,该示例是用于在应用程序下重新路由Win32 API的软件包。


显示了API挂钩-有关CodeProject的示例文章。但是,您可以在网上找到无穷无尽的这种技术示例。
使用MS Detours进行API挂钩



API Monitor-API Monitor是一款免费软件,可让您监视和控制应用程序和服务进行的API调用。它是查看应用程序和服务如何工作或跟踪您自己的应用程序中存在的问题的强大工具。

过程仪表-instrumentation refers to an ability to monitor or measure the level of a product's performance, to diagnose errors and to write trace information.


Pin是一个用于创建分析工具的平台-A pin tool comprises instrumentation, analysis and callback routines.在这里,您可以找到编写pintool的简介,可以扩展您的需求。这是一项非常强大的技术,在我这里列出的所有内容中都很难适应。英特尔的原始站点,特别是“查找函数参数的值”,可以为您提供所需的帮助。





评论


Frida是另一种易于设置的过程仪器。它将Googles V8(javascript)引擎注入正在运行的进程,然后您可以使用python绑定与该进程进行交互。他们有一个如何转储函数参数的示例。祝你好运

– jbh
2014年2月5日在15:51