Android App的破解技術有哪些?如何防止反編譯?

 如今最流行的App破解技術大可能是基於必定相關技術的基礎:如必定閱讀Java代碼的能力、有一些Android基礎、會使用eclipse的一些Android調試的相關工具以及瞭解一些smali的語法規範和字段的自定範圍,再利用現有的各類工具:如APKtool、dex2jar、jd-gui以及簽名工具。有了這些前基礎和工具,就能夠破解不少沒有加反編譯保護措施的App。html

那麼如何就安卓App安全進行保護了,如下內容將會爲讀者做出詳解。
安卓App安全包含不少內容,其中包括混淆代碼、總體Dex加固、拆分Dex加固、虛擬機加固等方面。事實上,這些內容也是國內近幾年Android App安全保護的一種主要趨勢。

 

1、混淆代碼android

Java代碼是很是容易反編譯的,做爲一種跨平臺的、解釋型語言,Java 源代碼被編譯成中間「字節碼」存儲於class文件中。因爲跨平臺的須要,這些字節碼帶有許多的語義信息,很容易被反編譯成Java源代碼。爲了很好地保護Java源代碼,開發者每每會對編譯好的class文件進行混淆處理。ios

混淆就是對發佈出去的程序進行從新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能,而混淆後的代碼很難被反編譯,即便反編譯成功也很可貴出程序的真正語義。ProGuard就是一個混淆代碼的開源項目,可以對字節碼進行混淆、縮減體積、優化等處理。安全

Proguard處理流程圖以下所示,包含壓縮、優化、混淆、預檢四個主要環節:數據結構

  • 壓縮(Shrink):檢測並移除代碼中無用的類、字段、方法和特性(Attribute);
  • 優化(Optimize):對字節碼進行優化,移除無用的指令。優化代碼,非入口節點類會加上private/static/final,沒有用到的參數會被刪除,一些方法可能會變成內聯代碼;
  • 混淆(Obfuscate):使用a、b、c、d這樣簡短而無心義的名稱,對類、字段和方法進行重命名;
  • 預檢(Preveirfy):在Java平臺上對處理後的代碼進行預檢,確保加載的class文件是可執行的。

 

2、總體Dex加固app

爲了增強Android保護強度,隨着安全技術的發展,又出現了新型的「加固技術」。DEX加固是對DEX文件進行加殼防禦,防止被靜態反編譯工具破解而泄露源碼,最剛開始出現的是總體加固技術方案。eclipse

總體加固技術的原理如上所示,包括替換application/classes.dex、解密/動態加載原classes.dex、調用原application相關方法、將原application對象/名稱設置到系統內部相關變量四大環節。其中最爲關鍵的一步就是解密/動態加載原classes.dex,經過加密編譯好的最終dex源碼文件,而後在一個新項目中用新項目的application啓動來解密原項目代碼並加載到內存中,再把當前進程替換爲解密後的代碼,可以很好地隱藏源碼並防止直接性的反編譯。

 

3、拆分Dex加固工具

隨着業務規模發展到必定程度,不斷地加入新功能、添加新的類庫,代碼在急劇膨脹的同時,相應的apk包的大小也急劇增長,那麼簡單的總體加固方案就不能很好地知足安全需求,在總體加固方案以外又出現了拆分加固的技術方案。post

可是如上所示,dex文件在加固時,針對中間缺失的一部分數據會以解密後的數據來替換,有的時候這種拆分替換也會致使數據不許確。那麼到底應該拆分什麼樣的數據呢?就須要瞭解一下dex文件的數據結構。

Dex文件結構極爲複雜,如下圖示選取了其中較爲重要的內容。事實上,dex文件是一個以class爲核心組裝起來的文件,其中最重要的是classdata和classcode兩部分,有其特定的接口和指令數據,選取這兩部分來拆分的話,即便拆分出來也不會泄露class數據和字節碼數據,反編譯出來也不完整,安全性較高。優化

 

 

4、虛擬機加固

虛擬機加固也屬於dex拆分加固的一種,它是對字節作了一些變化處理。以下所示,這是一個正常安卓系統中的代碼,在其中進行了虛擬機加固操做:

以add-int v0, v1, v二、sub-int v0, v1, v二、mul-int v0, v1, v2這三條指令進行替換,而後進行加固編譯,這樣子操做後,即便把替換後的數據恢復了,也不會以add-int v0, v1, v二、sub-int v0, v1, v二、mul-int v0, v1, v2這三條指令進行替換,而後進行加固編譯,這樣子操做後,即便把替換後的數據恢復了,也不會變造成爲以前的字節碼,安全係數較高。

 

以上是3月17日在重慶舉辦的安卓巴士全球開發者論壇上,網易資深安全工程師鍾亞平《安卓App逆向與保護》演講的重點節選。

完整演講內容請見這裏:一文了解安卓App逆向分析與保護機制

相關閱讀:大公司怎麼作Android代碼混淆的?

一文讀懂加固apk的開發者是怎麼想的

關於網易易盾的加固保護

當前安卓App加固到底該如何作到防篡改?

安卓App逆向保護做爲開發工做中的重要內容,一直是網易雲易盾致力於提供的應用服務。

網易云爲您提供iOS應用加固 、 Android應用加固服務,點擊都可免費體驗。

相關文章
相關標籤/搜索