咱們作APP開發的通常都會遇到如何保護應用APK代碼的問題。Java APK語言是基於jvm上面,反編譯APK源代碼很很容易。包括全部的class文件、src文件和jsp文件等等。 數組
到目前爲止,對於APK的保護,混淆技術是最爲基本的保護方法。JAVA混淆工具也很是多,包括商業的、免費的、開放源代碼的,大可能是對Class文件進行混淆處理,也有少許工具首先對源代碼進行處理,而後再對Class進行處理,這樣加大了混淆處理的力度。安全
目前主要的混淆技術按照混淆目標主要可分爲分別爲:符號混淆、數據混淆、控制混淆、控制流重組、預防性混淆。對此,小編集中對其進行簡單的分析。數據結構
1、符號混淆jvm
Class文件中有許多與程序執行自己無關的信息,例如變量名稱、方法名稱,並帶有必定的含義,例如某個方法名爲getKeyLength(),那麼這個方法極可能就是用來返回Key的長度。符號混淆就是打亂這些信息,將其變成無任何意義的表示,例如:對於全部的方法從method_001開始編號;將全部的變量從vairant_001開始編號。符號混淆可對APK反編譯帶來必定的困難,從而達到保護APP安全的做用。jsp
對於私有函數、局部變量,可改變它們的符號,也不影響程序的運行。可是一些接口名稱、公有函數、成員變量,如有其它外部模塊須要引用這些符號,每每須要保留這些名稱,不然外部模塊找不到這些名稱的方法和變量。函數
2、數據混淆工具
數據混淆是對程序使用的數據進行混淆,可分爲改變數據存儲及編碼和改變數據訪問。性能
改變數據存儲和編碼能夠打亂程序使用的數據存儲方式。例如將一個有10個成員的數組,拆開爲10個變量,而且打亂這些變量的名字;將一個兩維數組轉化爲一個一維數組等。另外,一些複雜的數據結構,咱們將打亂它的數據結構,例如用多個類代替一個複雜的類等。編碼
改變數據訪問,例如訪問數組的下標時,咱們能夠進行必定的計算。 加密
在實踐混淆處理中,這兩種方法一般是綜合使用的,在打亂數據存儲的同時,也打亂數據訪問的方式。通過對數據混淆,程序的語義變得複雜了,這樣增大了APK反編譯的難度。
3、控制混淆
控制混淆就是對程序的控制流進行混淆,使得應用APK更加難以反編譯,一般控制流的改變須要增長一些額外的計算和控制流,所以在性能上會給程序帶來必定的負面影響。有時,還須要在程序的性能和混淆程度之間進行權衡。
4、控制流重組
重組控制流也是重要的混淆方法。例如,程序調用一個方法,混淆後,可將該方法代碼嵌入到調用程序當中。反過來,程序中的一段代碼也能夠轉變爲一個函數調用。另外,對於一個循環的控制流,爲能夠拆分多個循環的控制流,或者將循環轉化成一個遞歸過程。這種方法最爲複雜,研究的人員也很是多。
5、預防性混淆
這種混淆一般是針對一些專用的反編譯器而設計的,通常來講,這些技術利用反編譯器的弱點或者Bug來設計混淆方案。例如,有些反編譯器對於Return後面的指令不進行反編譯,而有些混淆方案偏偏將代碼放在Return語句後面。這種混淆的有效性對於不一樣反編譯器的做用也不太相同的。
愛加密是北京智遊網安科技有限公司重磅推出的一個提供APP安全保護服務平臺。目前提出的三層加密保護:DEX加殼保護,DEX指令動態加載保護,高級混淆保護,能夠保證APP的動態安全和靜態安全,黑客將沒有機會進行任何破解。愛加密更在年前推出了SO庫保護,C/C++層面的代碼獲得了專業保護,讓APK包無懈可擊。
愛加密推出的APK加固保護服務有效解決了開發者的應用被破解的問題,不只保護開發者和廣大用戶的利益,並且能強力遏制打包黨的不良行爲,淨化整個APP市場,打造一個綠色的APP生態鏈。但願更多的APP開發者可以意識到保護APP的重要性,保證APP應用的安全度,能夠保護用戶的利益,也大大增長用戶粘度,提高產品的品牌力度。