本文主要讲的是本人在工作中接到的一个加固任务后所经历的探索之路,有一些方案的说明,但是没有源码,伸手党敬免了。
1)接到的任务是对sdk项目进行防篡改,最初的要求只是需要保证第三方集成sdk的开发者不能通过反编译修改提供的sdk进行篡改逻辑后重新编译,窃取用户信息。第一个方案:java的class文件是可以做md5校验的,在android上仿照这个思想通过dex解析出我们sdk中的类,根据这些类的字节码做md5校验来保证sdk不被篡改。
这样的问题就是解析dex中对应类的字节码难度大,未实验成功。
2)在找解析dex资料的时候发现了平时都没用过的2个类,DexFile类和DexClassLoader,通过阅读源码及网上查找资料,了解到了可以用DexClassLoader加载外部的jar或dex文件(可自行查找资料,之前看过很多的博客,时间久远,已经找不到链接了),然后提出了新的方案:将sdk进行拆分,核心代码逻辑抽出来独立一个项目,打成jar包,然后将剩下的开放逻辑作为一个接口项目,在接口项目中实现加载核心jar,然后可以对这个jar文件进行md5校验,保证核心逻辑不被篡改。
这样其实已经实现了一开始的任务要求了,但是还是有问题,MD5校验的逻辑是暴露在接口项目中的,恶意开发者可以通过更改接口项目的jar,传一个正确的md5进行校验