加固类型
- 整体加固:个人理解 把核心dex加密静态的时候看的是壳子的dex。等app启动的时候通过壳子的dex解密并且运行在内存中运行dex
- 抽取加固:个人理解 把类中的方法体抽空,如果用到这个方法的时候然后回填到方法体中调用完毕以后再次抽空改方法体。
- 要对付这这种抽取加固我们要把类里面的所有方法进行主动调用调用完毕以后在保存dex。大部分时候需要修复dex 为啥要修复 你方法体抽空以后回填的时候 总要对每个方法名称和方法体做标记要不你咋知道哪个是那个方法对吧。所以要进行修复使其对应。当然这种需要阅读安卓系统源码找到加载dex的函数。和能可以主动调用合适的函数。 然后修改系统源代码编译成系统刷机。
案例
- 查壳是否是安卓报错
- 看一下app结构发现是uni-app对于这种发包请求加密可能在js层。发包可能在java层。这种用java层算法定位可能定位不了。当然这种也可以调试一下这不是我们的重点我们是要演示脱壳修复
- postern+Charles抓包看看请求是否加密
算法定位
- frida 先尝试一java算法定位,可以看到被检测到了
- 过firda 检测演示
- 使用java通杀算法定位一下,aes算法。当然用其他函数也可以定位我就不演示了
- 使用jadx查找关键函数。查询不到。要不是混淆要不就是加壳了
- 查壳爱加密企业版利用之前的脱壳工具frida-dexdump 没有脱掉,blackdex直接闪退。所以我们要使用定制系统进行脱壳当然这也不是万能的!!!
使用定制系统进行脱壳演示
- 先把app安卓到定制系统上然后直接启动app脱壳完毕以后会在指定目录下生成dex文件。当然如果你不用frida 过检测那么你用脱壳系统也会奔溃导致无法脱壳所以。我们需要使用脱壳系统和frida进行配合才可以进行脱壳。脱壳后的结果
- 脱壳修复 java -jar dexfixer.jar baidu.dex baid.bin baidu.dex 修复后把所有dex打包zip拖到jadx里面
脱壳修复后搜索关键函数
- 搜索关键函数搜索到了和我们java hook定位一样
总结
- 脱壳系统打造需要对安卓系统和前辈们的脱壳代码和脱壳点进行深入研究。查找更深入的脱壳点这需要花费大量时间和精力去研究。不是一蹴而就的我现在只能照猫画虎还完全不是很理解各个脱壳点的。当然我们渗透测试人员对于这种会点原理会使用工具就行了。我们不是专业的安卓逆向工程师。