SO防护手段-ollvm

常见防护手段

主要功能描述
SO加壳对C/C++源码编译出来的SO文件进行加壳,使SO文件无法正确反编译和反汇编。
SO源码虚拟化保护将原始汇编指令翻译为自定义的虚拟机指令,跳转到自定义的虚拟机中执行,每次保护生成的虚拟机指令随机,且对虚拟机解释器再度混淆
SO防调用对SO文件进行授权绑定,防止SO文件被非授权应用调用运行。
SO Linker对整个SO文件进行加密压缩,包括代码段、符号表和字符串等,运行时再解密解压缩到内存,从而有效的防止SO数据的泄露。
SO源码混淆常量字符串加密、分裂基本块、等价指令替换、虚假控制流、控制流平坦化。
SO环境监测防frida\xposed\root、防动态调试、防模拟器、防多开等

ollvm分类

就是将原来的代码通过下面的几个手段进行混淆,让逆向难度上升。

分类描述
指令替换(Instructions Substitution)(Sub)将一条运算指令替换为多条等价的运算指令,例如:y=x+1变为y=x+1+1-1
虚假控制流(Bogus Control Flow)(bcf)通过加入包含不透明谓词的条件跳转和不可达的基本块,来干扰IDA的控制流分析和F5反汇编
控制流平坦化(Control Flow Flattening)(Fla)主要通过一个主分发器来控制程序基本块的执行流程,将所有基本代码放到控制流最底部,然后删除原理基本块之间跳转关系,添加次分发器来控制分发逻辑,然后过新的复杂分发逻辑还原原来程序块之间的逻辑关系
字符串加密编写一个pass将其中的字符串信息使用一些加密算法进行加密,然后特定的时间进行还原,常见的特征:datadiv_decoded

ollvm对抗

1.简单ollvm可以通过交叉引用分析
2.angr去除不透明谓词
3.Unicorn/Unidbg/AndroidNativeEmu模拟执行
4.IDA Trace
5.binary ninja
6.后端编译优化
7.frida辅助分析

交差引用分析

在ida中选择目标变量按x来知晓变量的生成位置和步骤等

IDA Trace

  1. 在需要分析的代码段上下都打上断点
  2. 开启Debugger调试
  3. 断点端住后点击Debugger-Tracing-Tracing options
  4. 取消勾选Trace over debugger segments(跟踪调试器段)
  5. Trace text file位置选择输出的路径和文件名称
  6. 点击确定
  7. 再次点击Debugger-Tracing
  8. 点击instruction tracing
    1. Instruction tracing 调试器将为每条指令保存所有修改后的寄存器值。
    2. Basic block tracing 调试器将保存到达临时基本块断点的所有地址。
    3. Function tracing 调试器将保存发生函数调用或函数返回的所有地址。
  9. 再点击运行等待执行完成即可分析日志文件

感谢:【新提醒】《安卓逆向这档事》十二、大佬帮我分析一下 – 『移动安全区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn

上一篇
下一篇