常见防护手段
| 主要功能 | 描述 |
|---|---|
| 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
- 在需要分析的代码段上下都打上断点
- 开启Debugger调试
- 断点端住后点击Debugger-Tracing-Tracing options
- 取消勾选Trace over debugger segments(跟踪调试器段)
- Trace text file位置选择输出的路径和文件名称
- 点击确定
- 再次点击Debugger-Tracing
- 点击instruction tracing
- Instruction tracing 调试器将为每条指令保存所有修改后的寄存器值。
- Basic block tracing 调试器将保存到达临时基本块断点的所有地址。
- Function tracing 调试器将保存发生函数调用或函数返回的所有地址。
- 再点击运行等待执行完成即可分析日志文件
感谢:【新提醒】《安卓逆向这档事》十二、大佬帮我分析一下 – 『移动安全区』 – 吾爱破解 – LCG – LSG |安卓破解|病毒分析|www.52pojie.cn