天天看點

Android apk如何加強防止被破解(防止逆向編譯)

現在主要工具是接觸SDK,為了防止遊戲包被破解編譯,以及發現加密串,我來分享下以下幾點:

防破解技術主要有四種實作方式:

1.代碼混淆(ProGuard)技術

2.簽名比對技術

3.NDK .so 動态庫技術

4.動态加載技術

5.第三方平台加密以及檢測漏洞

第一種: 代碼混淆技術(ProGuard) 該技術主要是進行代碼混淆,降低代碼逆向編譯後的可讀性,但該技術無法防止加殼技術進行加殼(加入吸費、廣告、病毒等代碼),而且隻要是細心的人,依然可以對代碼依然可以對代碼進行逆向分析,是以該技術并沒有從根本解決破解問題,隻是增加了破解難度。

第二種: 簽名比對技術 該技術主要防止加殼技術進行加殼,但代碼逆向分析風險依然存在。而且該技術并不能根本解決被加殼問題,如果破解者将簽名比對代碼注釋掉,再編譯回來,該技術就被破解了。

第三種: NDK .so動态庫技術,該技術實作是将重要核心代碼全部放在C檔案中,利用NDK技術,将核心代碼編譯成.so動态庫,再用JNI進行調用。該技術雖然能将核心代碼保護起來,但被加殼風險依然存在。

第四種: 動态加載技術,該技術在Java中是一個比較成熟的技術,而Android中該技術還沒有被大家充分利用起來。

第五種: 第三方平台使用

主要講解第四種方法,該技術可以有效的防止逆向分析、被破解、被加殼等問題,動态加載技術分為以下幾步:

将核心代碼編譯成dex檔案的Jar包

對jar包進行加密處理

在程式主入口利用NDK進行解密

再利用ClassLoader将jar包進行動态加載

利用反射技術将ClassLoader 設定成系統的ClassLoader。

主要優點有:

       1.核心代碼在被加密的jar中,是以破解者無法解壓出class檔案,如果加密秘鑰被破解者拿到,那将是另外一層面的安全問題了。

      2.該技術也可以有效防止加殼技術,代碼是動态加載上來的,破解者的殼程式無法加入到已加密的jar包中,及時破解者注入殼程式入口,殼程式因為不在ClassLoader 的jar包中,是以也無法被執行起來,除非破解者替換ClassLoader的jar包,關掉NDK解密代碼.但這種安裝到手機上,已經不在是我們的應用,使用者一定會将其解除安裝掉。

是以綜合起來比較,第四種動态加載技術是最安全的,但效率問題,本人并沒做嚴格測試,粗略實驗了一下,效率并沒有明顯降低。

jar用SDK\platform-tools\下的dx指令進行dex格式轉化

然後再用加密工具将生成jar檔案進行加密處理

最後通過代碼動态加載:

處理完成,如果在Application中做特别處理也是可行的。之前就有人分析了愛加密的加密方式,不過這裡不做闡述,有興趣可以一起讨論。

下篇文章中我們來講講如何 逆向apk的動态庫

繼續閱讀