我们参考Proguard Obfuscator的方式,对APK中资源文件名使用简短无意义名称进行替换,给破解者制造困难,以做到资源的相对安全。我们可以通过修改AAPT在生成resources.arsc和*.ap_时把资源文件的名称替换掉,从而保护资源。
AAPT编译资源的代码,我们发现修改AAPT在处理资源文件相关的源码是能够做到资源文件名的替换。
在ResourcesTable和Assets中添加资源文件时,对资源文件名称进行修改,这就能够做到资源文件名称的替换,这样通过修改过的AAPT编译资源并进行打包,我们再用apktool这个工具进行反编译。我们来看一下反编译后的截图:
在res目录下的layout、drawable、anim、menu等文件夹不见了,因为apktool工具把它们放在了unknown文件夹下。
你会发现资源文件名已经被简短无意义名称代替了,这样会给反编译者理解上制造困难,反编译者需要消耗一定的时间来搞清楚这些文件的作用,资源混淆带来的另一个好处是能明显减小APK的大小,资源混淆既能保护资源文件的安全又能减小安装包的大小。
这样通过修改AAPT,我们可以在代码零修改的基础上就能做到相对的资源安全,但是我们要时刻铭记,安全是相对的,没有绝对的安全。