如何从 IDA 中找到 OllyDBG 中的偏移量

逆向工程 艾达 ollydbg
2021-06-17 04:42:46

我目前正在尝试在 RE 中获得一些练习,我需要一些帮助来修补 DLL。下面是我的步骤: 我首先分析主程序和 IDA 中的 dll 试图理解逻辑。然后我切换到 OllyDBG 进行修补。好吧,问题是,由于 Olly 动态加载 dll(与 IDA 中的静态独立分析相反),偏移量不同,我不知道如何找到我在 IDA 中检查过的偏移量。是否有一些简单的方法可以“重新发现”dll 中的偏移量?

提前致谢!

4个回答

如果只更改了基数,但偏移量是恒定的(我猜是这种情况),您可以在 IDA 中重新设置程序的基数。您可以通过 edit->segments->Rebase program ... 菜单来实现。在 IDA 中指定与 Olly 中相同的起始基数应该会有所帮助。Base 可能因多种原因而不同,其中之一可能是 ASLR。

是否有一些简单的方法可以“重新发现”dll 中的偏移量?

是的,这是算法:

Target_Address_in_OllyDbg = Source_Address_in_IDA - Base_Address_in_IDA + Base_Address_in_OllyDbg

以下是定义:

Target_Address_in_OllyDbg: OllyDbg 中的目标地址。

Source_Address_in_IDA: IDA 中的源地址。

Base_Address_in_IDA: IDA中反汇编模块的基地址。您可以通过转到IDA 菜单栏中的Edit --> Segments --> Rebase program...找到该值用于图像的基础在该对话框中是Base_Address_in_IDA

Base_Address_in_OllyDbg: OllyDbg 中目标模块的基址。您可以通过在 OllyDbg 中Alt-E来找到这个值(或者通过在 OllyDbg 的菜单栏中进入查看 --> 可执行模块)。在“可执行模块”窗口中找到您的目标模块最左边的字段 ( Base ) 是Base_Address_in_OllyDbg.

如果有人觉得它有用,我给自己做了一个小计算器,可以轻松获取使用上述相同算法的反汇编器中位置的地址。它目前默认为二进制 ninja 的基地址,但这很容易在代码中更改。 https://github.com/scrapbird/OffsetCalc

我使用这个小的 idc 脚本我设置了一次基数并使用 AskAddr 输入 olly 地址

auto olbase , oladdr , rva;
olbase = 0x20000;
oladdr = AskAddr(0,"enter address as seen in olly");
Jump(  MinEA() + oladdr - olbase);