APK脱壳的一点小总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了APK脱壳的一点小总结相关的知识,希望对你有一定的参考价值。
目前在安全加固与脱壳破解的攻防中,破解者处在了优势的位置,个人认为在虚拟机保护出现之前,也会一直这样。
对于android DEX文件的脱壳,一般分2种情况:
一种是dex会完整出现在内存当中,大部分免费版加固,某些企业版加固都是这样的,通常IDA调试断在dvmDexFileOpenPartial、dexFileParse等这些函数上面,直接内存dump就可以。但有些加固会有反调试,处理起来比较麻烦,因此直接hook这些函数更为简单,substrate、adbi这些框架可以帮助我们节省开发成本。还有一个更简单粗暴的做法,重新编译替换libdvm.so,通过修改这几个函数源码脱壳。
另一种是dex不会完整出现在内存当中的情况,比如腾讯乐固dump出来发现method都是空的,原方法内容被抽取出去单独加密,运行时再解密,运行后再加密,虽然效率要低但相比上一种方法安全效果更好一些。当然对付这种加壳也有办法,因为dalvik虚拟机在执行到具体类方法时,一定在内存中是解密的,我们可以在这里hook或修改libdvm.so,然后主动加载初始化每个类方法,重新拼装出dex文件,已经有开源的实现方法,github搜索dexhunter。
第2种方法加固方很难应对了,但会使用一些技巧,如加固会hook fwrite函数,当发现文件以dex035开头时就不执行写操作,但都是治标而不治本办法。
有同事找我问怎么入门APK脱壳,以下几点浅见:
1、学习dex文件结构,阅读dex文件加载、解释过程源码
2、使用IDA调试并dump一个dex,修复成可执行APK,样本网上很多
3、学习substrate框架使用,制作脱壳机,学习xposed框架
4、练习修改、编译Android系统源码,实践、修改、优化dexhunter
目前来看,有源码加固的话,在native里面可以做的事情很多,比如ollvm。但目前国内厂商都是扔一个APK过去,他给你丢个加固后APK回来。能对ELF做的事情不多,最多也就改下header里面section的信息,让IDA懵逼吧?
以上是关于APK脱壳的一点小总结的主要内容,如果未能解决你的问题,请参考以下文章