手动去除间接跳转--Binary Ninja

题目 ez_re (N1 Junior 2025 Reverse)

0x01

将文件直接用Binary Ninja打开之后会发现有很多分析不出来的br跳转,需要修一修

0x02

找一个函数my_strlen,可以看到mov w11, #0 mov w12, #0x1初始化寄存器的值,下面的cmp w10, #0 csel w10, w11, w12, ne {0x0} {0x1}是关键,先将w10的值跟0x0比较,如果不等于0,则将w10的值设置为w11,否则设置为w12,这一步就导致了后面两种不同的情况的跳转,也就是我们需要手修的地方

看注释就行
note:
1.[5230]和[5238]在{data_5230}里面可以找到

2.w11存的值需要往上找对应的sp,先看到w8,然后再往上看需要找[x0],因为在ARM架构中前 8 个参数通过寄存器 x0-x7 传递,即去找传入函数的第一个参数

这里用伪C看就能很清晰地看到&var_28传入my_strlen,所以w8=[x0]=0xd0deba7d

3.计算出来可以知道x8=23C8 or 23D8,而23C8就是br x8指令下面一条地址,也正是以为这个跳转有两种情况所以bn分析不出来,需要手动修改

0x03

修改br x8,右键->Patch->Assemble,这里需要追前面比较的地方csel后面是ne->not equel,所以改成bne ,这里跳转的地址是相对地址,要用需要跳转的地址减去现在的地址即用23D8-23C4得到0x14,最终bne 0x14,最后Reanalyze一下就修好了

其他需要修的跳转基本上都是这个模式,先比较,有两种跳转情况,分析之后再去手修跳转


手动去除间接跳转--Binary Ninja
http://example.com/2025/03/21/fixjump/
作者
Eleven
发布于
2025年3月21日
许可协议