Leland 发表于 2021-11-15 21:04

so动态跳转混淆对抗

最近在尝试跟踪一个app so层的算法,但是这个so把代码完全打乱,在每段代码最后使用 BX 寄存器 的形式跳转到需要执行的地方,寄存器的值则动态生成,使用这种方案来对抗ida的静态分析。
如图所示,动态计算R0的值,最后BX R0跳转继续执行代码。


在动态调试后我发现大部分跳转是确定的,就写了个插件在每个BX语句下断点记录寄存器的值,然后patch源代码。通过这种方式修复可以让ida识别出一部分函数,但是还存在着许多的JUMP OUT。
对于这种混淆是否有可以学习的案例或者代码?
另一个问题就是这个so疑似使用了多线程,导致调试的时候不断发生异常(signal #33)(应该不是反调试,因为如果断点不下在关键代码处就能够正常运行),这种情况应该如何处理?
我又写了个ida插件用unicorn来执行代码计算寄存器的值来patch程序,但是又回到了问题一->反编译仍然不完整。

CrazyXyu 发表于 2021-11-19 07:39

大神能在更新fake host 么,作者软件更新了,然后就失效了

狄人3 发表于 2021-11-15 23:12

JUMPOUT的目标地址正常吗?一般JUMPOUT出现是目标地址超出正常范围了

张道陵 发表于 2021-11-16 00:03

反编译不完整

nc6 发表于 2021-11-16 02:31

厉害了,大佬

Leland 发表于 2021-11-16 10:45

狄人3 发表于 2021-11-15 23:12
JUMPOUT的目标地址正常吗?一般JUMPOUT出现是目标地址超出正常范围了

地址是正常的,就是反编译失败,我觉得是ida被四处乱跳转绕晕了?

狄人3 发表于 2021-11-16 11:31

Leland 发表于 2021-11-16 10:45
地址是正常的,就是反编译失败,我觉得是ida被四处乱跳转绕晕了?

目标地址,处是正常反汇编了吗?看一下是不是红色的,还有你patch的方法是什么?

Leland 发表于 2021-11-16 11:45

狄人3 发表于 2021-11-16 11:31
目标地址,处是正常反汇编了吗?看一下是不是红色的,还有你patch的方法是什么?

是红色的,我undefine之后定义成函数了,我patch的内容就是代码段最后的BX 寄存器成为B 固定地址
例如原来是BX R0,我patch成B 0xF2000

狄人3 发表于 2021-11-16 22:10

Leland 发表于 2021-11-16 11:45
是红色的,我undefine之后定义成函数了,我patch的内容就是代码段最后的BX 寄存器成为B 固定地址
例如原 ...

可以先分析一下出问题的地方。还有patch的话是可以吧程序块连起来的。具体操作论坛里以前一些反混淆有介绍

Leland 发表于 2021-11-16 23:14

狄人3 发表于 2021-11-16 22:10
可以先分析一下出问题的地方。还有patch的话是可以吧程序块连起来的。具体操作论坛里以前一些反混淆有介 ...

好的,我再试试看
页: [1] 2
查看完整版本: so动态跳转混淆对抗