Android 代码的反编译与防反编译
一、反编译:
工作中apk的反编译用的较多,主要是通过Android反编译工具来实现:
· apktool
二、防反编译:
代码混淆
这种方式,其实我不大愿意将他归类于防止反编译,从Android、Java编译原理上来说,针对自身代码做混淆等操作,必然防止不了反编译这个事实。他能做到的就是将字符,函数等混淆成各种a,b,c,d,1,2,3等。这种方式一般称为,妨碍对反编译代码的阅读、观看和理解,Android中主要是针对 proguard.cfg 的配置来实现。
动态加载类
这种方式的启发是根据web端来的。Web端你要防止,那就不发布呗。所以我们可以将我们重要的源码,丢在服务器上,必要的时候通过DexClassLoader类去加载重要类。来防止核心代码被反编译。具体可看DexClassLoader示例。
用NDK开发核心代码
C/C++等编译型语言的反汇编难度非常大。所以我们可以放心的使用NDK去开发,生成SO库文件再来调用。
PS:部分资源文件若十分珍贵,可以通过 #include直接编译到库里(当然内存可能就大了),这种方式可以自己考虑。