壳类型
• 压缩壳 upx (现在很少了)
• 加密壳 (1\2\3\4代)
• 混淆壳 ollvm (一般在so中)
什么是加固
其实和大多数 JS 加密一样,JS 加密是用加密算法去加密一些明文字符串,然后把得到的结果,用Base64、Hex等进行编码后提交。
加固其实也一样,只不过他通常加密的是dex文件而已。
但是dex文件加密以后,安卓系统是没法直接运行的。所以加固的核心,就是把dex文件加密,然后app运行过程中把dex文件解密,还原到内存中。
一代
其实 dex 内存中,都是完整且真实的明文
DexClassLoader 加载
dex 一开始是明文的,当第一次运行的时候对其进行加密,然后再把明文的 dex 删掉.
二代
其实 dex 内存中,都是完整且真实的明文
直接动态加载到内存中,进行加密。
三代
代码抽取型的壳2
- 在内存中抽掉函数,这样直接在内存中得到的函数是不完整的(空壳)
- 在函数调用的时候,会将代码还原回去!
其他
- VMP壳
- ollvm混淆
加固技术
加固:CSO/CTO的摇篮
什么是最好的加固
CSO:向广度学习才是出路
CTO:绝对深度
不知防、焉知攻
合规需求占90%
业务安全需求占10%
加固对技术的要求
稳定90%
全面8%
深度2%
App客户端常见漏洞
组件控件安全
业务安全
数据安全
manifest文件检测
Webview组件安全
sqlite安全
网络通信安全
加密算法安全
敏感函数调用安全
系统漏洞检测
服务端通信安全
https://github.com/guanchao/apk_auto_enforce
反调试
常用技巧
调试器调试端口、进程名
https://bbs.pediy.com/thread-223460.htm
父、自身进程名检测
apk线程检测、进程fd文件检测
http://www.520monkey.com/archives/1263
系统自带调试检测函数
ptrace检测
函数hash值检测
断点指令检测
系统源码修改检测
单步调试陷阱
利用IDA先截获信号特性的检测
利用IDA解析缺陷反调试
五种代码执行时间检测
https://bbs.pediy.com/thread-248800.htm
三种种进程信息结构检测
Inotify事件监控内存dump
梆梆:https://bbs.pediy.com/thread-223320.htm
签名校验
数据摘要、签名文件、证书文件
梆梆:https://bbs.pediy.com/thread-223141.htm
jarsign、signapk
keystore和pk8、x509.pem
模拟器检测
https://bbs.pediy.com/thread-225717.htm
应用多开对抗实战:https://bbs.pediy.com/thread-255212.htm
hook检测
检测Xposed、Cydia、Frida
检查Package
检测/proc/mypid/maps
检测堆栈信息
检测ActivityManagerNative
https://github.com/qtfreet00/AntiFrida
定制Xposed框架:https://bbs.pediy.com/thread-255836.htm
7种Android Native Anti Hook的实现思路
https://bbs.pediy.com/thread-254853.htm
root检测
检测su
检测属性
加固
业务场景加固
秘钥保护
安全键盘
界面防劫持
短信保护
反外挂
清场
协议加密
白盒秘钥
Java源码加固
华为方舟:Java2C
https://zhuanlan.zhihu.com/openarkcompiler
Dex加固
整体型壳
https://github.com/guanchao/apk_auto_enforce
函数抽取型壳
http://www.520monkey.com/archives/1118
Smali2C
https://bbs.pediy.com/thread-253987.htm
VMP
https://github.com/chago/ADVMP
so加固
自主虚拟机:libavmpso
汇编代码压缩及加密
ELF数据隐藏
seciton加密
https://github.com/guanchao/AppProtect/tree/master/003-SectionEncrypt
函数加密
https://github.com/guanchao/AppProtect/tree/master/004-MethodEncrypt
动态注册native方法
https://github.com/guanchao/AppProtect/tree/master/003-动态注册native方法
anit方法:https://bbs.pediy.com/thread-250435.htm
hook重定向
自定义linker
https://bbs.pediy.com/thread-225798.htm
混淆
资源混淆
https://github.com/shwenzhang/AndResGuard
代码混淆
Java层混淆
Proguard:包、类、方法名、变量名
obfuseSmaliText:字符串加解密
https://mp.weixin.qq.com/s/SRv1Oar87w1iKuDXS4oaew
https://sourceforge.net/p/dex2jar/wiki/DecryptStrings/
https://github.com/CalebFenton/simplify
DexGuard:商业级(全)
Native层混淆
ollvm:控制流
孤挺花:字符串
自主混淆器:libsgmainso
对抗方法
主动调用:Frida、Xposed
unicorn
https://bbs.pediy.com/thread-252562.htm
unidbg
https://yifei.me/note/54/
https://github.com/zhkl0228/unidbg
https://bbs.pediy.com/thread-252321.htm
反反编译器
花指令
对抗重打包apktool
jd-gui、dex2jar、baksmali、shakaapktool、androguard
idapro、010editor
https://paper.seebug.org/228/
One comment
666