保护技术个人总结

安卓逆向 保护 混淆

Posted by BC on May 22, 2019

前言

继上篇实现了自己的hook工具后,如果想要把这些代码投入业务中,还需要做好安全防护。
自觉初出茅庐,水平足以对已有的知识进行梳理。
本文总结了操作简单,效果良好的java层和native层的加密和混淆。
本文无图,MD 插个图太烦了

native层保护

1. ollvm混淆

交大版OLLVM Armariris

Armariris比起官方版ollvm,少了bcf伪造控制流,多了字符串加密,强度也略高于其他方案的字符串加密。
日后有空可以进行整合,毕竟ollvm源码思路清晰。 ## 2.隐藏符号表
app的gradle文件中添加cflags
defaultConfig {
    ...
    externalNativeBuild {
        cmake {
            cppFlags "-fvisibility=hidden"
        }
    }
    ...
} ## 3.section加密 [Android逆向之旅—基于对so中的section加密技术实现so加固](http://www.520monkey.com/archives/563)  

section加密的样本很多,大多可以通过F8大神的SoDumpHelper来dump。
所以要在loader中做调用者检测 比如类名检测 ## 4.反调试技巧 [【SO壳】17种安卓native反调试收集](https://bbs.pediy.com/thread-223460.htm) ## 5.加密关键方法的context检查(防黑盒调用) [攻击侧例子 使用Unicorn Engine绕过混淆完成算法的调用](https://bbs.pediy.com/thread-225018.htm) 1.首先,关键加解密方法应传入context对象作为参数。   2.context对象可以在读取文件、获取设备信息等时候使用。   3.检测函数可以通过内联,ollvm等方式,和加密逻辑复杂的结合在一起,使其找不到检测函数首地址,不便于hook。 ## 6.签名检查 自身CRC(或学习数盟 只检查随机部分字节) ## 7.native层hook检测 我们首先看看美团与众不同的地方是怎么做的。  - 环境检测   美团在/data/data/美团包名/lib下查找libsubstrate.so libiohook.so libva++.so 三个文件 (其实这里做的不是最好,可疑文件和策略都应该在服务器下发)   然后遍历每个so文件,使用   ```bash strings %s/%s|grep -E 'GodinHook|SubstrateHookFunction   ``` 命令寻找so文件中的关键字  攻击侧应对:注入后删除/不放在这个目录注入/zygote注入  

java层保护

1.超强空白混淆

空白混淆实现-珍惜Any
此贴内容其实只有普通的空白混淆,还没有做到极致的suck
NameFactory里既然可以放简单的abcd,也可以放简单的字符,为什么不能放一个长一点的字符串呢?

2.字符串加密

Android安全防护之旅—字符串批量加密工具(AndStringGuard)原理介绍

3.反jadx字节码trick(仿美团)

Android安全之应用防dex2jar原理及实现

通用保护技巧

1.检查调用栈(不止找xposed 还可找脱壳插件特征)

2.检测maps里的module

3.仿反作弊SDK的设备指纹验证

4.风险APP检查

-1.SafetyNet 不存在的google play

to be continued 挖坑真tm有意思