Android脱壳
Android脱壳
1.简介
以frida工具为基础,整理加密的Android应用脱壳技术,以及简单地修复方法。
WEB系统:代码主要运行在后端服务器
安卓APP:客户端和后端服务器均运行代码
故想要对APP客户端进行完整的分析,则需要对其进行脱壳,获得源码。
2.脱壳思路
- HOOK删除方法(获得的类最为准确)
- Dump内存中的类(获得的类较为精准)
- HOOK
ClassLinker
的DefineClass
方法(获得的类包含了非目标app的类)
2.1HOOK删除方法
加壳APP运行前会将apk解密运行后删除,故捕获被删除的文件即可获得未加密的apk
安卓中删除方法有java.io.File
的delete
方法和native层的unlink
1 | //delete.js |
1 | //unlink.js |
2.2Dump内存中的类
对加载到内存中的类进行捕获。
- 自动化工具(hluwa/frida-dexdump)
- 手动dump
2.2.1自动化工具使用
1 | //前置需要安装frida |
2.2.2手动dump
1 | adb shell |
1 | //根据找到的pid寻找maps中的dex文件 |
1 | //dump.js |
2.3HOOK ClassLinker
的 DefineClass
方法
使用已有的frida脚本项目对目标进行dump
1 | git clone https://github.com/lasting-yang/frida_dump.git |
3.简单修复
修复工具-MT管理器
3.1满足静态分析工具(步骤做完即可用jd或者jadx进行分析)
对加壳的apk内部的classes.dex进行重命名,并且解压到左边脱壳的部分
全选所有的dex文件进行dex修复
批量进行重命名,并将第一个classes1.dex更名为classes.dex,满足正常的dex命名规则
将命名好的dex文件放回apk内
将app的dex重新划分
3.2 去除so层
此处以数字壳 jiagu 为例(旧版可用,新版不一定行)
将libjiagu.so 和 libjiagu_x86.so改为libxxxxx.so libxxxxx_x86.so
jiagu有五个字母,xxxxx可改为任意字符
此处用libxxxxx.so
将so文件里的所有jiagu都改为xxxxx
如果需要正常运行,还需要考虑签名校验,后续可采用frida hook内部签名校验方法进行绕过。
参考:
How to Unpack Protected Android APK with Frida (youtube.com)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Life lover!