之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点。而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等。
其实笔者对类加密比较感兴趣,就稍稍调研了一下。类加密的其实是为了防止APP被反编译,防止反编译的方法有很多种,比如混淆,加固等。自己对类文件进行加密,并自定义类加载器也是一种办法:
首先我们的代码打包编译之后会变成难以读懂的二进制字节码,并且变成.class文件。但是简单的APP编译出来之后可以被反编译,甚至你写的代码完完全全被暴露。你的代码被抄袭,被复制都是小事,重要的其实是你们APP的商业信息有可能被泄露!
下面是一个简单的例子被反编译的场景:

所以为了不让用户轻易的反编译出源代码文件,就要对.class文件进行加密,再通过特殊的加载类的方式解密,并将这个类加载到内存中。
首先说加密,加密无非就是把.class字节码文件进行一些变换,这里面就涉及密码学的知识了!加密的方式有很多种,要想提高保密性,可以考虑DES,AES,RSA。一旦加密算法的源码被公开,其实破解也就是很简单的事情了,所以建议大家还是用高安全性的密码系统,到时候及时的更换密钥。就能一定程度上增加破解难度。
有了加密算法,接下来就是加密一个字节码文件了:
private static File file = null;
private static String path = null;
// 读取已经编译好的正常的class字节码文件
public static void readClass(String filePath) throws Exception {
file = new File(filePath);
path = filePath;
}
// 加密生成已加密的class字节码文件

本文介绍了Android应用中如何通过自定义类加载器加载加密的类文件,以防止APP被反编译。文章探讨了类加载器的重要性,特别是对于高级Android开发者在热更新和类加密等方面的应用。内容包括加密.class文件、类加载器的委托机制以及自定义类加载器的实现,旨在提升应用的安全性和防破解能力。
最低0.47元/天 解锁文章
327

被折叠的 条评论
为什么被折叠?



