那么如何才能保護自己開發APP不被逆向破解呢?在道高一尺魔高一丈的網路安全攻防對抗中,防逆向保護技術也在不停更新演進,筆者在這里梳理了幾個關鍵時期的防逆向保護技術,讓大家對APP防護有一個更好理解。
【啟蒙階段】防逆向保護始于代碼混淆技術
這個時期最大特點是,從未能登上大雅之堂的代碼混淆技術,搖身一變成為了防逆向保護唯一有效的技術。這要從1995年JAVA語言橫空出世說起,它讓人們在享受跨平臺便利運行的同時,由于其天生易反編譯特性,也讓傳統針對機器碼的安全保護一夜之間變得毫無用處。
從此,那個曾經被唾棄的代碼混淆技術開始逐漸被人所重視。從Android 2.3開始,Google在SDK中加入了一款叫ProGuard代碼混淆工具,通過它可混淆JAVA代碼。

ProGuard混淆后DEX檔案截圖
從上圖就可以看到,代碼混淆之后左側的類名大多都變成了a、b等自定義字母,雖然機器執行起來的邏輯是一樣的,但增加了黑客人為分析的難度和時間成本。從某種程度上來說,代碼混淆技術很好的保護JAVA源代碼,但這種方式也只是簡單的改變類名或者變數名,黑客只要找到DEX檔案,反編譯也就是時間問題了,就看時間成本是否超過黑客收益。
【發展階段】DEX加密技術成為應用防護中流砥柱
隨著Android反編譯技術越來越純熟,即便代碼混淆技術做到native層,也是治標不治本。為了解決代碼混淆技術存在弊端,越來越多的人采用DEX整體隱藏和DEX函式抽取加密來保護自己代碼安全,例如愛加密等廠商早期加固產品用的就是這個技術。
(1)DEX檔案整體加密
對DEX檔案進行整體加密,與殼APK進行合并得到新的DEX檔案,然后替換殼程式中的DEX檔案即可得到新的APK。新APK運行時將加密后DEX 檔案在記憶體中解密,并讓 Dalvik虛擬機動態加載執行。

DEX檔案整體加密能夠對抗靜態分析,但也存在一定缺陷。該技術對DEX檔案進行整體加密、解密操作,運行時在記憶體中存在連續完整的代碼。通過修改Dalvik虛擬機就有可能通過記憶體Dump的方式獲得解密后的代碼。雖然開發者可以采取一些 patch 的方法來增加破解難度,例如類加載結束后,抹掉或者混淆記憶體中
DEX 檔案的頭部或尾部資訊,但這些方法也無法從根本上解決記憶體 Dump 的問題。
(2)DEX函式抽取加密
為解決DEX檔案整體加密可以被記憶體 Dump這個弱點,DEX函式抽取加密技術對代碼中每個方法抽取進行單獨加密。JAVA 虛擬機在第一次執行某個方法前,才開始加載這個方法的代碼。利用這個機制將解密操作延遲到某個方法在執行之前才對該方法進行解密,并且解密后代碼在記憶體中是不連續存放。例如通過抽取Dalvik虛擬機運行一個DEX必不可缺少DEXCode中的部分,然后對位元組碼指令添加nop,這種方式大大增加代碼安全性。

加密前后DEX 檔案中的代碼對比
這種加固技術的主要優點:(1)加密粒度變小,加密粒度從DEX 檔案級別變為方法級別;(2)按需解密,解密操作延遲到某個方法在確實要執行之前才觸發,如果方法不被執行,則不被解密;(3)記憶體不連續,避免了記憶體 Dump的問題,極大提高安全性。
【巔峰階段】VMP加固成為防逆向保護“終極大招”
EX函式抽取加密解決了記憶體被Dump問題,但是本質上這也是一種代碼隱藏技術,最終代碼還是通過Dalvik或者ART 虛擬機進行執行。因此,破解者可以構建一個自己修改過的虛擬機來脫殼。這就需要尋求更加強大、安全的防逆向技術來保證 APK 的安全。虛擬機軟體保護技術(VMP)成為了當下最前沿移動應用安全加固技術。
VMP首先會對被保護的目標程式核心代碼進行“編譯”,將由編譯器生成的本機代碼(Nativecode)轉換成效果等價的byte-code,然后將控制權交虛擬機,由虛擬機來執行控制。VMP最關鍵技術是需要自定義一套虛擬機指令和與之對應解釋器,然后將標準指令轉換成自己指令,由自定義解釋器解釋執行指令。
這樣即使破解者拿到自定義的位元組碼也毫無意義,除非能夠逆向破解自定義的虛擬機解釋引擎。除此之外,VMP 還可以構建多個不同虛擬化解釋引擎,不同的JAVA方法采用不同的虛擬化執行引擎,這就進一步提高了應用的安全性。
雖然現在市場上有相當一部分廠商都發布了針對移動應用VMP保護方案,但其實有很多廠商采用都是代碼混淆或者代碼隱藏技術。筆者認為擁有一套高質量的自定義指令集和解釋器是判斷VMP技術真偽唯一標準。而了解,目前在國內安全廠商中只有愛加密公司在VMP技術上發展相對成熟。
寫在最后:
任何安全技術變遷都是一部歷史,移動應用安全發展也是如此。從某種程度上來看,Android應用防逆向技術演化史基本等于移動應用安全進化史。例如國內愛加密,其加固技術也是從早期代碼混淆技術演化到當前最先進虛擬機保護技術。安全的攻與防是一個永恒話題,也是一個動態螺旋式發展程序,開發者需要不斷提高自己安全意識和安全技能,才能更好應對各種層出不窮安全問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/112786.html
標籤:Android
