Java 位元組碼 (.class) 易被反編譯還原原始碼。常見對策:「混淆」增加反編譯難度,但反編譯技術持續進步。利用自訂 ClassLoader 在載入階段解密,提供更靈活保護。
searchFile():尋找 .class 檔案loadDataClass():讀取位元組碼defineClass():載入類別(複雜過程)第 2、3 步之間有介入空間:讀取加密位元組碼 → 解密 → defineClass 載入明文位元組碼。
生成密鑰儲存 key.txt(如鑰匙,持有者可解密)。
SecureRandom sr = new SecureRandom();
KeyGenerator kg = KeyGenerator.getInstance("DES");
kg.init(sr);
SecretKey key = kg.generateKey();
byte[] rawKeyData = key.getEncoded();
new FileOutputStream("key.txt").write(rawKeyData);
自訂 ClassLoader 讀取加密 .class 檔,用相同密鑰解密後交給 defineClass,即可在運行時動態解密載入,源碼不以明文形式存在磁碟,大幅提高逆向工程難度。