用大长度指令替换小长度指令

逆向工程 艾达 安卓 手臂 十六进制 修补
2021-07-09 21:48:40

基本上,我想替换MOVS R1, #0x0MOV.W R1, #0x123,因为后来的指令需要4个字节是不可能简单地以十六进制代码替换。

我正在使用 IDA Pro 来分析原生 android 库。我阅读了 codecaves,但我的文本段没有可用空间来添加新数据。

由于我是新手,欢迎任何教程。

1个回答

由于您只需要 2 个以上的字节,因此不需要大的代码洞。开箱即用,您可以尝试以下四件事:

  • 您的文本段中很可能有一个函数或 2 出现在某些源代码中,但从未调用过。查找loc_XXXX具有标准函数前缀 ( push ....,LR) 和pop ....,PC几十个字节后的后缀 ( ) 的标签为您的代码洞重用这些函数。
  • 检查您的代码中是否有任何多余的指令。也许你可以在附近的某个地方省略 2 个字节,然后移动其余的字节。
  • 通常,函数开始与 16 字节边界对齐。您当前的函数和下一个函数之间可能会有一些空闲字节。这些可以像nop.w汇编一样显示,或f3af 8000以十六进制显示。
  • 您可以将很少使用的错误消息的文本用于您的代码洞。将“ThisIsALongErrorMessage\0”替换为“LongError\0”,您获得了一些字节,但代价是您永远不可能看到的错误消息的清晰度。这有点难,因为您的文本可能位于未标记为可执行的某个部分,您必须摆弄 ELF 标头来解决此问题。