我让x64dbg和ghidra通过ret-同步同步。我在ghidra发现了一个有趣的观点:
1800382b1 4d 8b e0 MOV R12,rebitData
1800382b4 48 63 f2 MOVSXD packetSize_,packetSize在清单视图中,文件my.dll从180000000开始。因此,在x64dbg中,我为my.dll添加了一个dll中断,当我在其中时,我进入带有ctrl+shift+g的文件偏移量,并输入328 b4,但最后在(第一行):
00007FF8B2FB32B4 | 06 | ???
00007FF8B2FB32B5 | E9 80000000 | jmp my.7FF8B2FB333A
00007FF8B2FB32BA | 45:8BC6 | mov r8d,r14d
00007FF8B2FB32BD | EB 7B | jmp my.7FF8B2FB333A
00007FF8B2FB32BF | 3BFB | cmp edi,ebx
00007FF8B2FB32C1 | 73 22 | jae my.7FF8B2FB32E5
00007FF8B2FB32C3 | 41:3BDB | cmp ebx,r11d
00007FF8B2FB32C6 | 76 18 | jbe my.7FF8B2FB32E0 在x64dbg中,文件从:00007FF8B2F81000 (CPU选项卡、模块my.dll、主线程X、PID Y)开始。
很明显,说明是不一样的。(我相信我做对了)
我怎样才能使通讯员吉德拉-> x64dbg和闯入x64dbg在“同一个地方”,即相同的指示?
发布于 2021-01-24 17:39:38
但是,这并不适用于在发行版中构建的ret-sync,只适用于调试版本.这是个小虫子。
expression中输入偏移量(当前偏移量-基偏移量),并要求follow in disassembler直接跳转到偏移量。我们可以计算一个表达式,它执行重基或更复杂的函数(例如,偏移+X*N的大小)。ctrl+shift+g (go to file offset),如果所需模块位于CPU反汇编中。如果不是,您需要转到符号,并遵循在CPU反汇编中感兴趣的模块,然后是go to file offset。发布于 2021-01-19 09:06:33
你说你想去328b4,但是你的第二个片段在...32B4上,看起来你在指令的中间。我希望正确的地址是0x00007FF8B2F81000 + 0x328b4 = 0x7ff8b2fb38b4。
我不知道ret-sync支持设置断点,但是您可以通过悬停获得相对偏移量来更容易地完成地址转换。

来源:https://twitter.com/dev747368/status/1347360276476293125
然后将x64dbg偏移量00007FF8B2F81000添加到偏移量(屏幕截图中的2008h,在您的例子中是328b4h )
或者,您可以通过在shell中运行currentAddress.subtract(currentProgram.imageBase)来获得当前地址的相对偏移量(在您的示例中同样是328b4h ),然后添加x64dbg偏移量来编写脚本。因此,完整的命令是:currentAddress.subtract(currentProgram.imageBase).add(0x00007FF8B2F81000)在Python中运行这个命令,并得到当前地址的正确x64dbg地址。
https://stackoverflow.com/questions/65768385
复制相似问题