逆向脱壳
Android逆向脱壳
脱壳的方式分别有:工具脱壳,hook脱壳,插桩脱壳,反射脱壳,动态调试脱壳
Ps:目前大多数的脱壳方式都还没有测试过 后续会陆续将脱壳实战补充完整 每种脱壳方式会单独的开一篇
工具脱壳
Frida-dexdump
因为不管是使用何种方式进行加壳 在app运行的某一个时间段 都会存在完整的dex文件 所以使用内存dump
简单来说就是在合适的时间进行内存dump
简单好用 前面有说如何使用这个工具
Fart
难度较高 需要修改Android源码 类似魔改系统
实现原理
Youpk
主要解决整体加固和抽取加固的方式
运行环境比较复杂 没有具体测试
据说特别好用 企业壳也能搞
注意事项
仅支持被壳保护的Dex 不支持动态加载的dex或者jar
Hook脱壳法
函数包含Dexfile对象的情况下就可以使用hook拿到该对象
frida和xposed 前面都有些如何搭建环境
脱壳方式
先查壳 np或者mt都行
找脱壳点 通过so文件搜索Dexfile 各家的都有比较明显的特征
写脚本
启动服务 等待脱壳成功 拖进jadx分析就行
插桩脱壳法
都是通过对Android源码更改 编译 和Youpk差不多
脱壳方式
同样的查找定位点
之后将dexfile对象重新复制或者其他什么办法 放到一个新的目录
反射脱壳法
脱壳方式
反射获取classloader
找到DexPathList(这个和如下的dex数组 可以自行查看 直接As一直往里进就可以看到)
拿到DexElements(dex数组 在dexpathlist内可以看见 还有一个so的数组)
获取mcookie和filename
根据cookie的值做转换 找到dexfile的内存指针
使用findClassDef匹配Dex
dump写文件