监视按功能完成的所有更改

逆向工程 艾达 补丁反转
2021-06-13 11:42:53

在执行特定功能之前和之后跟踪所有更改的最简单方法是什么。我知道我可以跟踪指令,但这可能会产生一长串所有执行的命令。我想在执行函数之前停止调试器并与之后的更改进行比较。

如何实现?

谢谢,

2个回答

在所有内存分配函数上设置钩子,将所有可写内存页标记为保护页。在尝试写入时处理由代码引起的所有 STATUS_GUARD_PAGE_VIOLATION 异常。

让我们假设您只需要查看更改,而不需要了解它们是什么以及它们是如何/为什么制作的

你可以这样做:

  1. 在调试器下启动进程并运行到函数的特定启动处。将断点放在函数的末尾以及挂起所有其他线程。
  2. 执行全进程内存转储

    2.1 对于windows - 使用windbg 命令 .writemem c:\output\start_address.dmp start_address end_address或使用 procdump:https ://docs.microsoft.com/en-us/sysinternals/downloads/procdump

    2.2 对于 linux - 使用cat /dev/[pid]/maps然后从 GDB make dumps:

    dump memory /output/memory_start_address start_address end_address

  3. 运行到函数结束,在另一个目录中再次执行[2]

  4. 比较两个转储以查看所有更改 [Notepad++]
  5. 如果需要 - 使用功能的 RE 确认​​您的发现。

祝你好运

DL