愛加密 可以給apk文件加殼,保護安卓應用源碼的安全,你可以看一看:

成都創(chuàng)新互聯公司專注于寧江網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供寧江營銷型網站建設,寧江網站制作、寧江網頁設計、寧江網站官網定制、成都小程序開發(fā)服務,打造寧江網絡公司原創(chuàng)品牌,更為您提供寧江網站排名全網營銷落地服務。
講講大概思路,技術細節(jié)就不能公開了。
破解加了dex殼的app,關鍵是要獲得解密后的源dex,現在Android加殼技術還很不成熟,大多都是通過DexClassLoader或者隱藏的函數openDexFile來將源dex加載進來,然后動態(tài)替換Application來啟動源程序,跟Windows上傳統(tǒng)的PE文件加殼有一定區(qū)別。
要破解傳統(tǒng)的殼,需要跟蹤控制流找到OEP,然后把源程序從內存中dump下來,重建輸入表,最困難的就是要跟著外殼的控制流走,安全工程師為了加大破解難度,使用了很多技術來讓破解者走得更艱難。安全工程師與破解者對抗的關鍵點就在尋找OEP的困難性上。
在Android平臺上,正因為新興的dex加殼技術不成熟,導致有些另類的脫殼方法可以繞過分析算法,直接將源程序dump下來。舉個例子,安卓在4.0版本以后提供openDexFile這個函數來從內存中加載dex,所需要提供的參數是源dex在內存中的地址,所以只要對這個函數下斷,然后從寄存器里找到內存地址,就能將解密后的源dex從內存中dump下來,直接對其反編譯就能獲得源代碼了。更進一步,關于openDexFile這個函數,其實它與libdvm.so這個庫有密不可分的關系,這個庫里提供大量操作dex文件的函數,如果對這個庫里的相關函數下斷,然后從內存中暴力dump一大塊內存區(qū)域,經常能直接將內存中的源dex給抓下來。
版權聲明:本文為博主原創(chuàng)文章,若轉載請注明出處:
首先加殼的方法和代碼都是從Jack_Jia的博客學習的。
詳見:
由于本人從c++開發(fā)直接跳到Android開發(fā),沒有對android進行系統(tǒng)的學習,看上面博客時還是有很多不理解的地方。本文把不理解的地方梳理一下,最后提供個測試源碼(加了比較詳細的注釋)。希望對于跟我一樣安卓基礎不是太好的人有一定幫助。
正文:
apk加殼的目的(我的用途):增加apk靜態(tài)分析的難度。(如果反編譯的人知道是加殼的,可以在data/包名目錄下 找到真正的apk。所以在殼上增加正常的代碼的話可以增加迷惑性)
基礎知識:ClassLoader: 這個寫的不錯想了解的可以去看看。
整個加殼的過程涉及到三個程序:要加殼的apk,加殼程序(demo中的apkjm),解殼程序(demo中的myunshell)。
其中加殼程序就是把要加殼的apk放入解殼程序的dex文件中。
解殼程序是最后替代我們apk安裝到手機中運行的程序。它在執(zhí)行中從自己的dex中釋放出我們apk程序。
步驟:
1.實現加殼程序。
2.實現解殼程序:按博客創(chuàng)建個解殼的Application。如果我們的apk中用到了 Application,需要在解殼程序的xml文件中添加:
meta-data android:name="APPLICATION_CLASS_NAME" android:value="com.***.Application"/
com.***.Application 是我們apk的Application類名 加上我們apk的包名
注:1.我們apk用到的權限和組件都需要添加到解殼程序的xml中,組件都需要加上完整的包名路徑。
2.我們apk內用到的資源也就是res文件內的東西,需要拷貝到解殼程序的res中。
3.如果我們apk靜態(tài)注冊了廣播接收器,那廣播接收器類需要在解殼程序中實現。
3.解殼程序完成后,把bin文件夾內的dex文件拷出來,用加密程序把我們的apk添加到該dex文件中。
4.把新生成的dex文件覆蓋bin文件夾中原來的dex文件,并把apk文件也刪掉,重新運行解殼程序生成新的解殼apk。 這個apk就是我們需要的最后的apk文件了。加殼就完成了。
另外:1.在解殼程序中對我們apk文件進行解密函數調用的地方不對。 在demo中做了修改和說明。
2.我在釋放apk的時候加了個判斷,如果文件存在就不再釋放了,如果是在測試的時候,可以先屏蔽掉,免的每次運行調試前要先刪掉原來的程序。
[java] view plain copy
if (!dexFile.exists())
{
dexFile.createNewFile(); //在payload_odex文件夾內,創(chuàng)建payload.apk
// 讀取程序classes.dex文件
byte[] dexdata = this.readDexFileFromApk();
// 分離出解殼后的apk文件已用于動態(tài)加載
this.splitPayLoadFromDex(dexdata);
}
demo地址:
Android應用的發(fā)布形式apk中包含的簽名加密方法除了RSA還有DSA,所以不能只從apk中提取常見的META-INF/CERT.RSA,應該是檢查apk中具體的簽名文件。
FILE="yourapp.apk"
cert_XSA=`jar tf $FILE | grep SA`
此時得到的cert_XSA可能是META-INF/*.RSA或者META-INF/*.DSA。
2.apk中提取具體的簽名文件。
jar xf $FILE $cert_XSA
此時會在當前目錄得到cert_XSA文件。
3.對于得到的簽名文件,提取其中簽名的MD5值
keytool -printcert -file $cert_XSA | grep MD5 "$FILE.certMD5"
這時候yourapp.certMD5這個文件中就保存了yourapp.apkk中的簽名MD5值。
4.最后比較兩個app的簽名可以用diff
FILE1="yourapp1.apk"
FILE2="yourapp2.apk"
//經過上述步驟得到$FILE1.certMD5和$FILE2.certMD5
certMD5_diff=`diff $FILE1.certMD5 $FILE2.certMD5`
if [ "$certMD5_diff" = "" ]; then
echo "$FILE1.certMD5 == $FILE2.certMD5"
fi
若輸出yourapp1.apk.certMD5 == yourapp2.apk.certMD5那么這兩個應用的簽名就一致。
安卓APP加密的方法主要分成三類:源碼加密、數據安全和應用保護,而每一類又分成好幾個小項。
源碼加密包括:Dex文件保護、防二次打包、so文件保護、資源文件保護。以Dex文件保護為例,Dex文件保護又包括:高級混淆、DEX文件加殼、DEX文件加花、動態(tài)類加載、內存防dump。
高級混淆:代碼混淆,可以降低代碼可讀性、縮小包大小。
DEX文件加殼:相當于把源碼打包至其他文件夾下,逆向工具對加密后的dex文件解析,只能看到殼文件,可以防止解包后看到真正的源碼。愛加密利用挖空技術實現函數級加密,安全強度高,啟動效率快。
dex加花:由于大部分逆向工具都是線性讀取字節(jié)碼并解析,當遇到無效字節(jié)碼時就會引起反編譯工具字節(jié)碼解析失敗。愛加密插入無效字節(jié)碼到dex文件之中,同時保證該字節(jié)碼永遠不會被執(zhí)行,否則程序運行也會崩潰。這樣,就能起到反編譯的作用了。
dex動態(tài)類加載:愛加密加固后的dex文件源碼可以動態(tài)分離,在運行時,將源碼分段加載到內存當中。
內存防dump:程序運行時會釋放代碼,內存防dump可以防止程序運行時被劫持。
應用安全包括:log日志輸入屏蔽、應用清場。清場技術依賴于云端黑名單、白名單DB,應用每次啟動后便自動進行本地的黑名單、白名單DB數據更新,若檢測到有異常情況,則可對用戶進行提示。
數據安全包括:頁面防劫持、本地數據保護、截屏保護、內存數據防查詢、協議加密、虛擬鍵盤。
新聞標題:android加殼,android加殼工具
當前地址:http://chinadenli.net/article25/dsigoji.html
成都網站建設公司_創(chuàng)新互聯,為您提供網站排名、關鍵詞優(yōu)化、外貿網站建設、網站收錄、定制網站、品牌網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯