我有一个应用程序,它在通过套接字发送数据之前调用一个子程序,并且在该子程序中对数据包进行加密。有没有办法让应用程序跳过该子程序并将数据包作为非加密发送?
是否可以使应用程序跳过呼叫?
逆向工程
艾达
2021-06-21 00:22:58
2个回答
正如 Dillinur 所写,您需要取消此电话。为此,您可能需要一个十六进制编辑器,例如WinHex。要 NOP 出子程序,您必须确定从哪个地址调用它。要查看该地址,请在 IDA 中转到Options -> General并标记Line Prefixes。
也很高兴看到您想排除哪些操作码。转到Options -> General并在Number of opcode bytes字段中写入6。那么您的 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替换当前操作码。
其它你可能感兴趣的问题