安卓JNI-OLLVM混淆

LLVM是编译器的框架系统,OLLVM(Obfuscator-LLVM):混淆JNI文件的一种工具

OLLVM源码 : https://github.com/heroims/obfuscator/tree/llvm-8.0

控制流平坦化
平坦化是来重组原始代码执行流程,把原本易于阅读的代码流程重组成一个switch case形式的执行流程,所以被混淆的函数具有异常的控制流。

指令替换
使用功能上等效但更复杂的指令序列替换标准二元运算符(+ , – , & , | 和 ^)

虚假控制流程
这个模式主要嵌套几层判断逻辑,一个简单的运算都会在外面包几层if-else。


OLLVM反混淆
反混淆需要解决以下几个问题:

  • 找出流程里所有的相关块,确定哪些是分发控制块和真实逻辑块
  • 确定各个真实块的前后顺序与关系
  • 将真实块用跳转(B,BNE等跳转指令)连接起来

确定分发控制块
观察白色的块,其实特征非常明显,非常短(只有几条指令),仅仅只有寄存器的操作,而没有内存操作,最后都是cmp+跳转等等,这个不同厂商的混淆有细微的差别,但多数都特征非常明显,可以直接静态分析出来,在反混淆程序设计上,为了隔离这种差别引起的复杂性,可以用多态隔离掉就可以了。确定所有控制块后,直接用0清除这些块里面所有指令,免得干扰ida分析,因为修复成功后,所有真实块都不会经过这些控制块了。

确定真实逻辑块的前后关系
单从静态分析去确定真实块的关系非常浪费时间,这里可以采取两种方法
IDA动态调试,使用trace断点记录目标函数执行路径
模拟执行目标函数,并记录执行路径


ollvm CrackMe算法分析

ollvm后的算法还原案例分享

ollvm控制流混淆学习、逆向过程

基于Unicorn 的ARM64 OLLVM反混淆

Android OLLVM反混淆实战


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考古学家lx(李玺)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值