在调试器下在运行时更改页面权限

逆向工程 调试器 x64dbg
2021-07-01 14:07:05

x64dbg 或其他调试器是否提供了一种在运行时更改给定部分的所有映射页面的页面权限的方法?也许通过插件?

2个回答

您可以在 IDA 中通过VirtualProtect使用 Appcall调用进程的上下文来完成。来自 实际应用调用示例

在下面的例子中,我们将 PE 头页保护更改为执行/读/写(通常它是只读的):

virtprot = Appcall.proto("kernel32_VirtualProtect",
  "BOOL __stdcall VirtualProtect(LPVOID addr, DWORD sz, DWORD newprot, PDWORD oldprot);")
r = virtprot(0x400000, 0x1000, Appcall.Consts.PAGE_EXECUTE_READWRITE, Appcall.byref(0));
print "VirtualProtect returned:", r
RefreshDebuggerMemory()

可能其他调试器可以做类似的事情(例如WinDbg 有.call

在 x64dbg 内存映射选项卡中,您可以右键单击映射部分并从上下文菜单中选择设置页面内存权限。

部分内存上下文菜单

从那里,您可以控制该部分中每个页面的访问权限。

页面权限

不过,Igor 的回答提供了很大的灵活性,我不确定 x64dbg 是否在其插件/脚本接口中为此提供了 API。