x64dbg 如何在一步后查看所有更改
逆向工程
调试器
x64dbg
2021-07-08 11:38:54
1个回答
根据您发布的代码截图,您似乎正在寻找两个内存快照之间的差异。也就是说,您想知道在您跳过对test.test().
我希望您明白,当您跨过整个进程内存中的单个未知任意函数时,任何地方都可能发生变化。
例如,
全局变量可以被修改,它通常位于二进制文件的可写部分。
堆栈内容可能会被修改。
可以加载第三个/第 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..$.
其它你可能感兴趣的问题



