一、前言
Android中加固方案一直在进步,因为新的加固方案出来就会被人无情的破解脱壳了,从第一代加固方案落地加密dex文件,第二代加固方案不落地加密dex文件,在到第三代加固方案类方法抽取,以后后面的更多加固方案来说都是安全的进步,关于脱壳方案网上有很多资料,但是加固方案却没多少资料,因为有些加固方案是一些加固公司的商业机密不可泄露的,所以我们现在看到的网上加固方案还是以前的加固方案,不了解以前的加固方案同学,可以看我写的逆向大黄书「Android应用安全防护和逆向分析」,而本文就来介绍如何实现类方法抽取方案来实现应用加固。
二、指令抽取方案
首先不多说,这种方案依赖的技术就是拦截系统的加载类函数,然后进行类方法指令还原。所以这个技术必须了解,好在我们在之前一篇文章中已经详细介绍了如何在native层拦截系统函数实现应用方法指令篡改,不了解的同学可以看这篇文章:Android中Hook系统函数实现运行时态篡改方法执行逻辑;本文的技术是依赖于这篇文章,如果这篇文章没看明白,那么本文将很难看懂。一定要先看这篇文章。不多说了,我们在介绍加固方案主要从两方面入手,一方面是如何进行指令抽取,一方面是如何进行指令还原,所以下面先来介绍如何进行类方法的指令抽取功能。
我们还是先用之前的工程作为案例:
在这个类中,我们定义了一个获取密码的方法:
现在为了安全,我们将这个方法信息置空,可以先用010Editor工具查看这个方法的指令信息:
看到这个方法包含了3个指令,那么我们如何将其设置成0呢?这里就需要自己写个工具了ÿ