安卓JNI-OLLVM混淆

举报
冬晨夕阳 发表于 2022/03/30 00:34:47 2022/03/30
【摘要】 LLVM是编译器的框架系统,OLLVM(Obfuscator-LLVM):混淆JNI文件的一种工具 OLLVM源码 : https://github.com/heroims/obfuscator/tre...

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反混淆实战


文章来源: blog.csdn.net,作者:考古学家lx,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43582101/article/details/108192760

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。