天天看點

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

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

那麼如何就安卓App安全進行保護了,以下内容将會為讀者作出詳解。

安卓App安全包含很多内容,其中包括混淆代碼、整體Dex加強、拆分Dex加強、虛拟機加強等方面。事實上,這些内容也是國内近幾年Android App安全保護的一種主要趨勢。

一、混淆代碼

Java代碼是非常容易反編譯的,作為一種跨平台的、解釋型語言,Java 源代碼被編譯成中間“位元組碼”存儲于class檔案中。由于跨平台的需要,這些位元組碼帶有許多的語義資訊,很容易被反編譯成Java源代碼。為了很好地保護Java源代碼,開發者往往會對編譯好的class檔案進行混淆處理。

混淆就是對釋出出去的程式進行重新組織和處理,使得處理後的代碼與處理前代碼完成相同的功能,而混淆後的代碼很難被反編譯,即使反編譯成功也很難得出程式的真正語義。ProGuard就是一個混淆代碼的開源項目,能夠對位元組碼進行混淆、縮減體積、優化等處理。

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

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

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

二、整體Dex加強

為了加強Android保護強度,随着安全技術的發展,又出現了新型的“加強技術”。DEX加強是對DEX檔案進行加殼防護,防止被靜态反編譯工具破解而洩露源碼,最剛開始出現的是整體加強技術方案。

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

整體加強技術的原理如上所示,包括替換application/classes.dex、解密/動态加載原classes.dex、調用原application相關方法、将原application對象/名稱設定到系統内部相關變量四大環節。其中最為關鍵的一步就是解密/動态加載原classes.dex,通過加密編譯好的最終dex源碼檔案,然後在一個新項目中用新項目的application啟動來解密原項目代碼并加載到記憶體中,再把目前程序替換為解密後的代碼,能夠很好地隐藏源碼并防止直接性的反編譯。

三、拆分Dex加強

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

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

但是如上所示,dex檔案在加強時,針對中間缺失的一部分資料會以解密後的資料來替換,有的時候這種拆分替換也會導緻資料不準确。那麼到底應該拆分什麼樣的資料呢?就需要了解一下dex檔案的資料結構。

Dex檔案結構極為複雜,以下圖示選取了其中較為重要的内容。事實上,dex檔案是一個以class為核心組裝起來的檔案,其中最重要的是classdata和classcode兩部分,有其特定的接口和指令資料,選取這兩部分來拆分的話,即使拆分出來也不會洩露class資料和位元組碼資料,反編譯出來也不完整,安全性較高。

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

四、虛拟機加強

虛拟機加強也屬于dex拆分加強的一種,它是對位元組做了一些變化處理。如下所示,這是一個正常安卓系統中的代碼,在其中進行了虛拟機加強操作:

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

以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進行替換,然後進行加強編譯,這樣子操作後,即使把替換後的資料恢複了,也不會以add-int v0, v1, v2、sub-int v0, v1, v2、mul-int v0, v1, v2這三條指令進行替換,然後進行加強編譯,這樣子操作後,即使把替換後的資料恢複了,也不會變形成為之前的位元組碼,安全系數較高。

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

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

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

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

關于網易易盾的加強保護

目前安卓App加強到底該如何做到防篡改?

安卓App逆向保護作為開發工作中的重要内容,一直是網易雲易盾緻力于提供的應用服務。

網易雲為您提供iOS應用加強 、 Android應用加強服務,點選均可免費體驗。

繼續閱讀