xiaomm250 发表于 2022-4-20 11:32

为什么cmpDisasm计算地址时需要减去400?

我用cmpDisasm比较原版dll与破解后的dll,
由于cmpDisasm的起始地址与ollydbg子模块的起始地址不一样,
前者似乎是固定按照401000(不确定是否正确),后者就比较复杂了。
841000(ollydbg里面的子模块起始地址)-400+0001D0C8(差异行在cmpDisasm里面的offset偏移量)=差异行在ollydbg的地址840708
这个是我观察得到的计算公式,但是问题来了:这个400是怎么回事?难道是软件的bug?

冥界3大法王 发表于 2022-4-24 09:41

@xiaomm250
打开加密与解密第四版,上面都有公式的,套用就好。
然后你同时打开cmpDisasm(汇编比较工具)、Ollydbg/x32dbg或x64dbg(该地址行选中右击 或 按自定义热键)或IDA或二进制忍者或其他反汇编工具软件吧,省略几十个
再打开WinHEX、UltraEdit、010Editor等等(查看它的FOA地址)。。。

查看 cmpDisasm【汇编标签页、16进制DUMP窗口】中的地址
接下来手动套用公式,并计算是否你理解了书上写的各种公式
反正就是3A地址(VA虚拟地址、RVA相对虚拟地址、FOA文件偏移地址)我都是记住英文全称,所以打死都不可能记错。
我记得有些计算和区块有关。。。试试几次,你都能和各种软件对上你也就熟练了。。。

woflant 发表于 2022-4-20 14:22

codeFOA=0x1D0C8                代码文件偏移
codeSectionStartFOA=0x400        .text代码段 文件偏移

codeVA=0x41DCC8                代码内存偏移
codeSectionStartVA=0x400000+0x1000=0x401000        .text代码段 内存偏移

VA
=codeSectionStartVA + offest
=codeSectionStartVA +(codeFOA-codeSectionStartFOA)
=0x401000+(0x1D0C8-0x400)
=0x41DCC8

xiaomm250 发表于 2022-4-20 11:34

@冥界3大法王 我记得你会计算这玩意的。你是怎么算的?

bester 发表于 2022-4-20 12:05

内存对齐吧

xiaomm250 发表于 2022-4-20 13:26

本帖最后由 xiaomm250 于 2022-4-20 15:34 编辑


难道是这个原因??????????
image base+base of code-offset
=400000+1000-400
=400C00

xiaomm250 发表于 2022-4-20 15:33

woflant 发表于 2022-4-20 14:22
codeFOA=0x1D0C8                代码文件偏移
codeSectionStartFOA=0x400        .text代码段 文件偏移



我不是太理解,我死记硬背吧,反正也不是个多难的活,死套公式就可以了!

xiaomm250 发表于 2022-4-21 10:55

woflant 发表于 2022-4-20 14:22
codeFOA=0x1D0C8                代码文件偏移
codeSectionStartFOA=0x400        .text代码段 文件偏移



有没有不需要人工推算在内存中地址的这个汇编比较工具?

xiaomm250 发表于 2022-4-24 09:45

冥界3大法王 发表于 2022-4-24 09:41
@xiaomm250
打开加密与解密第四版,上面都有公式的,套用就好。
然后你同时打开cmpDisasm(汇编比较工具 ...

有没有不需要人工计算的?人工计算太累人了

冥界3大法王 发表于 2022-4-24 09:54

xiaomm250 发表于 2022-4-24 09:45
有没有不需要人工计算的?人工计算太累人了


有啊,但是地址不可能是通用的啊。。。(FOA除外)
有不同的软件里有时会变化的啊。。。
所以活人掌握了方法才更靠谱啊。
{:301_971:}
页: [1] 2
查看完整版本: 为什么cmpDisasm计算地址时需要减去400?