是否可以使应用程序跳过呼叫?

逆向工程 艾达
2021-06-21 00:22:58

我有一个应用程序,它在通过套接字发送数据之前调用一个子程序,并且在该子程序中对数据包进行加密。有没有办法让应用程序跳过该子程序并将数据包作为非加密发送?

2个回答

正如 Dillinur 所写,您需要取消此电话。为此,您可能需要一个十六进制编辑器,例如WinHex要 NOP 出子程序,您必须确定从哪个地址调用它。要查看该地址,请在 IDA 中转到Options -> General并标记Line Prefixes

也很高兴看到您想排除哪些操作码。转到Options -> GeneralNumber of opcode bytes字段中写入6那么您的 IDA 图形模式将如下所示:

IDA 图形模式

在我的例子中,如果我想在执行时跳过 foo-subroutine,我需要将操作码字节E8 DF E6 FF FF 设置90 90 90 90 90(E8 是调用助记符,其余的是偏移字节)。0x90 是 NOP 操作码。

为了排除这些字节,我在WinHex 中打开可执行文件并搜索偏移量 0x31CC(不是 0x4031CC,因为 0x400000 是我在 IDA 中的可执行文件的加载地址)。最后,当我找到偏移量 0x31CC 时,我会查找字节序列 E8 DF E6 FF FF,然后将它们编辑为 90 90 90 90 90。保存它。

此外,您可能会考虑在子例程之前的 PUSH 指令中使用 NOPing,以避免后续代码中出现错误。

有一个ida标签,但你的问题没有提到它,所以让我们用radare2来代替;)

在此处输入图片说明

aa分析二进制文件,pdf显示当前函数,wx写入十六进制对,并pdf再次检查结果。"wa nop;nop;nop;nop;nop"如果您更喜欢编写指令,或者甚至更好,使用魔法wao nop命令,也可以使用代替, 用 nop替换当前操作码。