ApkShelling
Introduction: 脱 Apk 使用 360 加固、梆梆加固、腾讯乐固、百度加固免费版加的壳
Tags:
用法
- 搭建 Xposed 环境
- 在 XposedEntry.java 中的 targetPackages 数组添加需要脱壳的包名
- 编译本模块并安装到手机
- 激活模块后,打开目标应用,随便操作一会儿,等待/data/data/packageName 下产生 dex 文件,可查看 logcat 看进展:logcat -s Xposed
- 把 dex 文件都复制到电脑上,用 jadx 反编译,如果有反编译失败的,先用 dex2jar 转成 jar 再用 jadx 反编译可解决部分失败情况
原理
在加载包的时候,匹配是否目标包名及是否加壳,如果是,就 hook java.lang.ClassLoader 类的 loadClass 方法,应用如下操作:
- 获得 loadClass 返回的 Class 对象
- 反射调用 Class 对象的 getDex 方法获得 Dex 对象
- 将 Dex 对象提交给写文件的线程,在此过程会去除重复的 Dex 对象并把不同的字节集加到队列
- 线程异步从队列中读取字节集写到文件中,避免了同步写可能导致 ANR
限制
- 只在 Android 5.1.1 版本的手机上验证过,其它的版本不一定有对应的 getBytes 和 geDex 方法
- 只验证过腾讯乐固、360 加固、梆梆加固、百度加固的免费加固工具,都可以脱掉,付费版本没有用过