如何使用逆向工程更改呼叫

Posted

技术标签:

【中文标题】如何使用逆向工程更改呼叫【英文标题】:How to change a call with Reverse engineering 【发布时间】:2012-11-20 08:15:39 【问题描述】:

我有一个示例程序test1.exe,它使用示例库test2.dll

test.dll 包含相同类型的函数A()B()test1.exe 调用A 然后退出。

在这里我找到了对A() 的调用: (http://i.stack.imgur.com/5W9Jd.jpg)

现在,如果我没记错的话,我需要将88FDFFFF 替换为B() 的正确偏移量,但是如何计算它以便调用B() 而不是A()

【问题讨论】:

如果您打算使用二进制调试工具,您最好在了解目标计算机的指令集方面进行认真的投资。这些信息很容易在参考手册中找到;对于 x86,英特尔提供了很容易找到的在线参考资料,这些参考资料会让您难以忘怀。 【参考方案1】:

如果这是在 x86 调用相关指令中,偏移值的计算方法是从目标地址中减去调用之后的指令地址(= 调用指令位置 + 5 个字节)。因此,您需要将偏移量修补为 address(B)-address(callinstruction+5)。

【讨论】:

好的。但是B()位于一个dll中,那么address(B)到底是什么?我知道它是test2.dll 中的入口点,但如何将其转换为text1.exe 中的地址? callinstruction+5 = ADD ESP,0C 呢? 欢迎来到逆向工程,在这里您可以了解比您真正想知道的更多的系统细节。是时候学习如何组织 DLL,以及标准代码如何调用 DLL 中的函数了。然后您将了解如何找到地址 (A),从而找到地址 (B)。 [我不会把“callinstruction+5 = ADD...”写成一个合理的等式。我没有检查您的示例以查看调用后的指令;可能是特定的 ADD 是该指令。在这种情况下,"address(callinstruction)+5 == address(ADD ...)" 如果这是您的问题]【参考方案2】:

我建议先学习 asm 基础知识,然后使用 HIEW hexeditor/disassembler 来更改简单的代码。

【讨论】:

我知道asm,HIEW用起来不太舒服。 是的,HIEW 是 99.9% 的逆向工具的基本工具,习惯它,它很容易使用。 大多数逆向器使用 IDA 和 OllyDBG。我以此为生,从未使用过 HIEW。只是我的 2 美分。 那么当你必须修改二进制文件时你是怎么做的呢?从 IDA 的十六进制视图?如果您从未使用过 HIEW,我很抱歉,但您是中途逆向工程师,也许您从未有过更具挑战性的项目要做。只是我 14 年的经验。【参考方案3】:

如果 b 在 test1.exe 中导入,则很容易,否则您必须使用 LoadLibrary 和 GetProcAddress。

ctrl+N查看b是否被导入。

【讨论】:

以上是关于如何使用逆向工程更改呼叫的主要内容,如果未能解决你的问题,请参考以下文章

如何更改github工程的语言属性

如何更改github工程的语言属性

Android开发如何更改SeekBar式样

助力工业物联网,工业大数据项目介绍及环境构建

使用逆向工程技术更改应用程序的网络请求路径

如何使用十六进制编辑器更改指令?