x64dbg 如何在一步后查看所有更改

逆向工程 调试器 x64dbg
2021-07-08 11:38:54

我们知道 x64dbg 在我们执行汇编指令后会将更改标记为红色,那么如何在不滚动监视器窗口的情况下获取所有更改?

x64dbg 32 位版本跟踪: 在此处输入图片说明

新更新

当调用修改至少 16 个字节的函数时,x32dbg 只显示内存的一个变化:

源代码:

在此处输入图片说明

x32dbg CPU 监视器:

在此处输入图片说明

x32dbg 跟踪监视器:

在此处输入图片说明

函数testmem.test应该有 4 个字节的变化,如何获得这些变化?

1个回答

根据您发布的代码截图,您似乎正在寻找两个内存快照之间的差异。也就是说,您想知道在您跳过对test.test().

我希望您明白,当您跨过整个进程内存中的单个未知任意函数时,任何地方都可能发生变化。

例如,

  1. 全局变量可以被修改,它通常位于二进制文件的可写部分。

  2. 堆栈内容可能会被修改。

  3. 可以加载第三个/第 n 个模块,并且可以添加在执行函数之前不存在的整个内存块。

等等……等等……

您无法可靠地查找在一个函数的单个步骤之间发生了什么变化。

跟踪窗口上的 x64dbg 为您提供每次执行时更改的内容,您必须滚动查看每条指令的更改内容。

或者,如果您可以将查找限制在某个内存范围内,则可以将内存转储到文件中并对其进行比较。

x64dbg 为您提供一个命令来保存一块内存

savedata :memdump: , 0x400000 , 0x1000  

或者就此而言,所有调试器都会为您提供一种机制,将某个大小的某个地址处的原始数据转储到文件中。

windbg .writemem 
ida makesnapshot
ollydbg binary -> backup  or dump in memory map gui
x64dbg savedata (scriptcommand) or dumpmem in GUI memory map

您可以使用像 hxd 这样的十六进制编辑器对两个转储进行字节比较,以查看对某个内存区域的所有更改。

作为一个真实的例子,您可以设置一个断点,就像您在屏幕截图上的特定代码中设置的那样。转储两个快照,一个在步骤之前,一个在步骤之后

什么被甩了

Address=0024D000 
Size=00003000 
Page Information=Thread 3F8 Stack 
Allocation Type=PRV 
Current Protection=-RW-G 
Allocation Protection=-RW-- 

转储之前并重命名转储文件

0024D000[3000] written to "xxx\pre" !

单步

INT3 breakpoint at test.01071076 (01071076)!

转储帖子并重命名转储文件

0024D000[3000] written to "xxx\post" !

注意所有更改,即 1111,2222,3333

:\>ls -lg
total 24
-rw-rw-rw-  1 0 12288 2018-11-21 03:02 post.bin
-rw-rw-rw-  1 0 12288 2018-11-21 03:01 pre.bin

:\>fc /b pre.bin post.bin
Comparing files pre.bin and POST.BIN
00002D68: 6A 76
00002D70: 0B 00
00002D71: E1 00
00002D72: 08 00
00002D73: 01 00
00002D74: 00 11
00002D75: 00 11
00002D78: 00 22
00002D79: 00 22
00002D7C: 20 33
00002D7D: E1 33
00002D7E: 08 00
00002D7F: 01 00


:\>xxd -g4 -s 0x2d68 -l 0x20 pre.bin
0002d68: 6a100701 70fd2400 0be10801 00000000  j...p.$.........
0002d78: 00000000 20e10801 04e08442 ccfd2400  .... ......B..$.

:\>xxd -g4 -s 0x2d68 -l 0x20 post.bin
0002d68: 76100701 70fd2400 00000000 11110000  v...p.$.........
0002d78: 22220000 33330000 04e08442 ccfd2400  ""..33.....B..$.