如何去壳脱壳
去壳
=去掉加固的壳
=脱壳
脱壳机制原理
- smali层:只做了一些简单的混淆
- Native 层:
- 和如下内容相关
- 各种so库
- 比如libdvm.so
- 对应着内部函数调用:
- .init
- .init_array
- JNI_Onload
- 分析修改ELF头信息
- sub_xxx函数
- 比如:sub_78614CD0
- R2寄存器
- 最后分析出:
- ClassLoader
- loadDex
- multidex
- 各种so库
- (作者)QEver
- 写的一个IDA的脚本=一个dex脱壳脚本
- 配合kill方法,可以实现脱绝大部分运行于dalvik上的dex壳
- 可以dump导出正确的dex文件
- 和如下内容相关
脱壳注意事项和说明
不是所有的加固的安卓apk都能成功脱壳的。
比如,康美通的安卓apk:
- 老版本
v2.0.7
:没有加固,可以直接用Jadx
反编译得到源码的 - 新版本
v4.4.0
:是360加固保
加固的,用FDex2也无法导出dex
,无法破解
总结出来就是:
没有加固
的:直接用Jadx即可导出源码- 比如老旧的Android的apk,很多都没有加固
- 不管你怎么
混淆
都很容易被人分析得干干净净
- 不管你怎么
- 比如老旧的Android的apk,很多都没有加固
- 部分加密不强的:可以脱壳
- 包括
- 老一代或免费的
360加固保
- 爱加密(收费)
- 娜迦加固(收费)
- 老一代或免费的
- 用
FDex2
可以脱壳- 可以hook导出
dex
,再dex转jar
,jar转java
源码
- 可以hook导出
- 包括
腾讯乐固
,新一代的360加固保
:没法脱壳- 即使用FDex2也无法脱壳无法破解,无法得到dex文件
- 其中新一代的360加固保:用
art
模式+dex2oat
相关机制,或许可以破解- 后续研究
- 【未解决】用ART,oat,dex2oat相关机制去破解新一代360、腾讯等安卓apk的加固
- 后续研究
- 其中新一代的360加固保:用
- 即使用FDex2也无法脱壳无法破解,无法得到dex文件
对于使用加固方案的建议和结论
- 免费版的加固可以防止大多数只会反编译的小白
- 对于普通攻击者还是很有效果的
- 对于会用工具脱壳的,还是没太大用途的
- 除非用更加高级的,收费版的加固服务
- 估计就很难破解,很难脱壳了
- 如果真的想要彻底防止别人破解
- 除了考虑(用更高级的)加固方式
- 还要花精力在app的业务逻辑层面,权限校验等方面,防止被破解