做APP開發(fā)的一般都會遇到如何保護應用APK代碼的問題。Java APK語言是基于jvm上面,反編譯APK源代碼很很容易。包括所有的class文件、src文件和jsp文件等等。
到目前為止,對于APK的保護,混淆技術是最為基本的保護方法。JAVA混淆工具也非常多,包括商業(yè)的、免費的、開放源代碼的,大多是對Class文件進行混淆處理,也有少量工具首先對源代碼進行處理,然后再對Class進行處理,這樣加大了混淆處理的力度。
目前主要的混淆技術按照混淆目標主要可分為分別為:符號混淆、數據混淆、控制混淆、控制流重組、預防性混淆。對此,集中對其進行簡單的分析。
一、符號混淆
Class文件中有許多與程序執(zhí)行本身無關的信息,例如變量名稱、方法名稱,并帶有一定的含義,例如某個方法名為getKeyLength(),那么這個方法很可能就是用來返回Key的長度。符號混淆就是打亂這些信息,將其變成無任何意義的表示,例如:對于所有的方法從method_001開始編號;將所有的變量從vairant_001開始編號。符號混淆可對APK反編譯帶來一定的困難,從而達到保護APP安全的作用。
對于私有函數、局部變量,可改變它們的符號,也不影響程序的運行。但是一些接口名稱、公有函數、成員變量,若有其它外部模塊需要引用這些符號,往往需要保留這些名稱,否則外部模塊找不到這些名稱的方法和變量。
二、數據混淆
數據混淆是對程序使用的數據進行混淆,可分為改變數據存儲及編碼和改變數據訪問。
改變數據存儲和編碼可以打亂程序使用的數據存儲方式。例如將一個有10個成員的數組,拆開為10個變量,并且打亂這些變量的名字;將一個兩維數組轉化為一個一維數組等。另外,一些復雜的數據結構,我們將打亂它的數據結構,例如用多個類代替一個復雜的類等。
改變數據訪問,例如訪問數組的下標時,我們可以進行一定的計算。
在實踐混淆處理中,這兩種方法通常是綜合使用的,在打亂數據存儲的同時,也打亂數據訪問的方式。經過對數據混淆,程序的語義變得復雜了,這樣增大了APK反編譯的難度。
三、控制混淆
控制混淆就是對程序的控制流進行混淆,使得應用APK更加難以反編譯,通?刂屏鞯母淖冃枰黾右恍╊~外的計算和控制流,因此在性能上會給程序帶來一定的負面影響。有時,還需要在程序的性能和混淆程度之間進行權衡。
四、控制流重組
重組控制流也是重要的混淆方法。例如,程序調用一個方法,混淆后,可將該方法代碼嵌入到調用程序當中。反過來,程序中的一段代碼也可以轉變?yōu)橐粋函數調用。另外,對于一個循環(huán)的控制流,為可以拆分多個循環(huán)的控制流,或者將循環(huán)轉化成一個遞歸過程。這種方法最為復雜,研究的人員也非常多。
五、預防性混淆
這種混淆通常是針對一些專用的反編譯器而設計的,一般來說,這些技術利用反編譯器的弱點或者Bug來設計混淆方案。例如,有些反編譯器對于Return后面的指令不進行反編譯,而有些混淆方案恰恰將代碼放在Return語句后面。這種混淆的有效性對于不同反編譯器的作用也不太相同的。
文章編輯:微網網絡 最好的微商城系統(tǒng)盡在Micronet微網
如需了解更多APP商城資訊,可撥打全國免費電話400-830-8248
關注微網動態(tài),可掃描二維碼或查找微信號micronetshop
聲明:本網部份文章為轉載文章,在每篇文章底部有說明,文章的觀點和立場僅代表作者個人立場,不代表微網立場,若是文章轉載中有侵范您的權益,請發(fā)郵件到 493149@qq.com或致電13922854199通知刪除,謝謝!