概述
Java2C針對DEX文件進行加密保護,將DEX文件中標記的Java代碼翻譯爲C代碼,編譯成加固後的SO文件。默認情況只加密activity中的onCreate函數,如果開發者想加密其它類和方法,只需對相關類或函數添加標記代碼,在APK加密時會自動對標記的代碼進行加密處理【或者找幾維的技術支持人員在後臺添加Java函數白名單策略來對重要的函數進行加密】。
使用步驟
1.定義Annotation
在Android工程項目中,定義一個名爲LDPProtect的Annotation,如以下截圖
2.對類進行加密
在需要加密的類前面添加@LDPProtect,即可對類中除構造函數之外的其它函數進行安全加固,如下圖:
3.對函數進行加密
在需要加密的函數前面添加@LDPProtect,即可對該函數進行安全加固,如下圖:
4.編譯項目,加密APK
A.編譯項目生成release版本的APK文件
B.用正式簽名文件對APK包進行簽名
C.提交APK包到幾維安全開發者平臺進行安全加固
D.下載加密包並再次簽名
E.安裝使用
加密效果
1.類加密效果
原始Java代碼截圖
利用apktool反編譯apk查看smali代碼,因不加密構造函數,所以構造函數的smali代碼和原始smali代碼一樣,而ktest1、ktest2方法已被加密轉換,其smali代碼已不包含原始業務邏輯。
通過IDA分析SO文件,可以找到對應的函數列表
通過IDA進一步分析Java_cc_jnidemo_com_jnidemo_KwTest_ktest1這個函數,可以發現Java層的代碼已經成功轉化C代碼。此處爲了更直觀的展示效果,並未做混淆保護,在實際加密中,可進一步結合Native層的代碼混淆和虛擬化技術,達到高強度的安全保護。轉化後的C代碼截圖如下:
2.函數加密效果
原始Java代碼截圖
利用apktool反編譯後的smali代碼截圖
通過IDA分析SO文件,可以找到對應的函數列表,轉化後的C代碼可參考類加密效果
友情告知地址,Java代碼加密,Java加密方式:https://www.kiwisec.com/product/java2c.html