使用注入读取运行时内存

逆向工程 部件 记忆 免疫调试器 职能 调用栈
2021-06-30 10:16:55

我正在反转一个用 C 编写的应用程序。我有一个特定的函数,我想记录运行时,而不暂停/停止应用程序。

我想要的那个函数的值是:

  • [ESP + 4] 这是缓冲区的长度
  • [ESP + 8]这是一个指向字符串缓冲区指针

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

我被告知要使用的第一件事是 Immunity's LogBpHook,它工作得很好,但它会停止应用程序并且因此变得非常慢,因为它是一个经常调用的函数。

然后我尝试设置FastLogHook听起来更像我所追求的。它注入一个日志存根并存储遇到的值,但据我所知,它不能像我上面描述的那样执行进一步的内存读取(如果可以请告诉我)。它也不断地使我的应用程序崩溃,所以这是不可能的。

所以我留下了注入自定义代码存根的想法,该存根将负责进一步读取并将值记录到文件中。有什么工具可以做到这一点,或者我必须手动编写+注入这个程序集?

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

1个回答
  1. 您可以编写您的挂钩库 (DLL),它将修补您所针对的 API。此补丁将仅将参数打印到文件/控制台并继续返回原始功能。途中不会有任何停留。要实际挂钩 API,您需要将 DLL 注入目标应用程序。您可以使用Microsoft 的 Detours作为示例,它是一个用于在应用程序下重新路由 Win32 API 的软件包。
    1. API 钩子揭示- 一篇关于CodeProject的文章和示例。但是你可以在网上找到关于这种技术的无穷无尽的例子。
    2. 使用 MS Detours 进行 API 挂钩
  2. API Monitor - API Monitor 是一款免费软件,可让您监控和控制应用程序和服务进行的 API 调用。它是查看应用程序和服务如何工作或跟踪您自己的应用程序中存在的问题的强大工具。
  3. 过程仪表-instrumentation refers to an ability to monitor or measure the level of a product's performance, to diagnose errors and to write trace information.
    1. Pin 是一个用于创建分析工具的平台-A pin tool comprises instrumentation, analysis and callback routines. 在这里您可以找到编写 pintool 的介绍,您可以根据自己的需要进行扩展。这是非常强大的技术,并且在我在这里列出的所有技术中更难适应。来自英特尔的原始站点,特别是Find the Value of Function Arguments可以帮助您找到所需的内容。