如何检索输入的一般内存读取并确定所有相关偏移量?

逆向工程 调试 动态分析
2021-07-01 14:26:23

我想记录应用程序对给定输入文件执行的所有内存读取操作,以帮助推断输入的哪些特定部分与打开输入的特定执行相关。

我正在尝试为 Windows 应用程序实现这一点,而应用程序本身可以是x86x64,并且输入不是特定格式(例如,解决方案不仅应与 一起使用JPG,还应与PNG或 一起使用XYZ)。该解决方案适用于无需访问源代码(仅限二进制文件,无符号)的应用程序。

一个例子

输入foo.bar

  • 输入文件为100字节长,二进制格式。

程序n:

  • 可以这样调用> Program.exe foo.bar,或通过File> Open>foo.bar

  • 打开 foo.bar 并解析 offsets x, y, 并z用它做一些事情(例如转换成别的东西,在某处输出,用它做一些算术并返回结果等)。对于 input foo.bar2,使用的偏移量可能不同。

我能想到的潜在问题:

  • 如果开发人员使用类似fseek (SetFilePointer?),他们将直接转到输入中的相关偏移量。但是,在许多情况下,它可能更有可能打开整个输入/文件,然后使用类似offset_n+34.

  • 有多种方法如何输入文件可以由一个应用程序打开或访问(OpenFileCreateFileA/WMapViewOfFileOpenFileMappingA,等等)

  • 如果有很多读取操作,速度可能是一个问题(但是,就我而言,我不太关心性能)。

根据我目前的理解,我可以做的是:

1) 研究用于文件打开/处理的特定 Windows API

2)在它们上设置断点并检索参数

3) 从这里开始,我如何确定或映射输入中的特定偏移量以及对其的程序访问?

是否有任何脚本或工具已经完成了这样的操作,例如依靠 WinDbg 或 DBI 框架(如 DynamoRIO 或 PIN)?

如果没有,如果有人可以向我指出特定的资源或关键词,以帮助我更好地理解如何解决这个问题并提出实用的解决方案,我将不胜感激。任何帮助将非常感激。

0个回答
没有发现任何回复~