安卓JNI-OLLVM混淆
2023-03-15 22:05:40 时间
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断点记录目标函数执行路径 模拟执行目标函数,并记录执行路径
相关文章
- Python 实时日志平台,Sentry 8 发布
- 数据科学20个好用的Python库
- 什么是大数据?如何成为大数据的技术大牛?
- 机器学习实践:如何将Spark与Python结合?
- 用 GDB 排查 Python 程序故障
- 如何成为 Python 高手
- 八大排序算法的Python实现
- 最强观战指南 | Python分析热门夺冠球队(附源代码)
- 未来公务员都会是数据分析高手了,你还要当个只会Excel的小白吗?
- Python数据预处理:使用Dask和Numba并行化加速
- 十一个你可能不知道的Python库
- 用Python将数据写到CSV文件
- 一文理清Apache Spark内存管理脉络
- 教你用Python解决非平衡数据问题(附代码)
- 10款Web开发最佳的Python框架
- Python 之父谈 Python
- 十大最受欢迎的机器学习和数据科学Python库
- 6个最佳的开源Python应用服务器
- Python数据挖掘与机器学习技术入门实战
- 如何用200行Python代码“换脸”