如何在写入文件之前查看文件的内容?

逆向工程 视窗 调试器
2021-06-30 20:10:35

我有一个写入文件(数据库)的进程。在进程监视器中我看到了WriteFile在此之后,我看到文件即将被写入或更新(偏移量:长度)。

如何使用 Ollydbg 显示此文件中即将写入或更新的内容?有教程或类似的吗?以及如何在 Ollydbg 上指定函数?

在进程监视器中,我看到了WriteFile,但是在 Ollydbg 中,它的功能是什么?

1个回答

如果您需要教程,可以查看Woodmanntuts4you如果您想查看写入的内容,则必须知道相关函数的指针存储在哪里。

这与调用约定、cdecl 和 stdcall有很大关系,了解它们对此很重要。

我将尝试使用 writeFile 函数进行解释。

WriteFile 是如何工作的

首先我们看一下 WriteFile 声明(取自MSDN

BOOL WINAPI WriteFile(
  _In_         HANDLE hFile,
  _In_         LPCVOID lpBuffer,
  _In_         DWORD nNumberOfBytesToWrite,
  _Out_opt_    LPDWORD lpNumberOfBytesWritten,
  _Inout_opt_  LPOVERLAPPED lpOverlapped
);

现在,当我们假设 Windows 有 stdcall(win32api 有)。我们可以找出在哪里可以找到变量。(有关 stdcall 的更多信息,请参阅Wikipedia)。

由于我们的维基百科文章,我们有几件事:

  • 参数按从右到左的顺序压入堆栈
  • 寄存器 EAX、ECX 和 EDX 被指定在函数内使用。
  • 返回值存储在 EAX 寄存器中。
  • stdcall 是 Microsoft Win32 API 的标准调用约定。

这很棒

现在,我们拥有了确定在哪里可以找到所需信息的位置所需的一切。当在函数调用上放置断点时,您就会知道所有变量都存储在 stsck 上。LPCVOID 是一个指针,剩下的就是跟随它并读取数据。