新手上路
- 資源幣
- 19
- 積分
- 16
- 貢獻
- 0
- 在線時間
- 2 小時
- 注冊時間
- 2020-2-20
- 最后登錄
- 2020-5-2
|
零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(二)
0x00 前言
上期小狼跟大伙兒分享了如何檢測安卓逆向環(huán)境,大伙兒是否有遇到問題呢?其實,小狼在上期中沒有特別指出來哦,今天就跟大伙兒說說困擾小狼些時日的問題。
今天跟大家分享的是安卓逆向之初步檢查APP安全,準備好了嗎?要開始啦~~~
0x01 正文
上期文章沒有特別指出不能更新SDK的問題哦,聰明的小伙伴們是否自己找到解決方法了呢?其實可以掛代理咧,操作步驟如下:
Tools—>options
mirrors.neusoft.edu.cn
80
1.jpg (41.01 KB, 下載次數(shù): 100)
下載附件
保存到相冊
2020-2-20 13:12 上傳
2.jpg (50.21 KB, 下載次數(shù): 112)
下載附件
保存到相冊
2020-2-20 13:12 上傳
解決了上次的問題,接下就開始我們今天的正文啦~
1、檢查APP證書及其簽名
APP證書是開發(fā)者用來確保用戶對他們在APP市場上發(fā)布的應(yīng)用程序的信任,證書中通常包括開發(fā)者的認證信息及對APP的相關(guān)加密算法。每個APP在被安裝之前都必須是通過證書簽名過的,通過簽名可以確保APP的完整性及有效防止“盜版”。
① 創(chuàng)建并啟動AVD
創(chuàng)建 [path-to-your-sdk-install]/androidcreate avd –n [your avdname] –t [system image target] -b [target/adis]
3.jpg (20.85 KB, 下載次數(shù): 101)
下載附件
保存到相冊
2020-2-20 13:12 上傳
啟動 [path-to-your-sdk-install]/emulator –avd [your avdname] –no-boot-anim
4.jpg (34.78 KB, 下載次數(shù): 99)
下載附件
保存到相冊
2020-2-20 13:13 上傳
② 從設(shè)備中拷貝apk到本地
shell設(shè)備,查看apk的相應(yīng)路徑
5.jpg (40.28 KB, 下載次數(shù): 99)
下載附件
保存到相冊
2020-2-20 13:13 上傳
將apk拷貝到本地
6.jpg (16.49 KB, 下載次數(shù): 98)
下載附件
保存到相冊
2020-2-20 13:13 上傳
③ 查看APP證書及簽名
apk文件實際上是zip格式的壓縮包,只是被更改了文件名而已,先將apk轉(zhuǎn)變?yōu)閦ip格式壓縮包,再進行解壓 。
7.jpg (48.13 KB, 下載次數(shù): 96)
下載附件
保存到相冊
2020-2-20 13:13 上傳
解壓后會新增相應(yīng)文件及目錄。
8.jpg (30.74 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:14 上傳
查看META-INF下文件的內(nèi)容 ,CERT.RSA是包含有公鑰證書的文件,使用keytool進行查看:keytool –printcert –file META-INF/CERT.RSA
9.jpg (46.72 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:14 上傳
關(guān)聯(lián)app內(nèi)容的簽名的文件是META-INF,可以通過cat/vim查看其內(nèi)容
10.jpg (38.27 KB, 下載次數(shù): 103)
下載附件
保存到相冊
2020-2-20 13:15 上傳
其中SHA1-Digest-manifest是app每個資源文件所對應(yīng)的摘要信息,所顯示的是通過base64編碼過的。
④ 解剖包含有公鑰證書和簽名的目錄META-INF
CERT.RSA:是app證書,需要通過keytool查看其信息,其中包含有公鑰持有者、發(fā)行人的基本信息,證書的有效期限,證書指紋等。
CERT.SF:這是包含有app每個資源文件摘要信息的文件,這些摘要信息是通過私鑰進行加密簽名的,需要使用公鑰才能解密;在app安裝過程中,每個資源文件都會生成摘要信息與這里解密后的摘要進行對比,從而確保app的完整性。
MANIFEST.MF:與CERT.SF保存著相似的資源摘要信息,但未用私鑰進行加密簽名。
⑤ 可以使用OpenSSL查看完整的公鑰證書
openssl pcks7 –inform DER –in META-INF/CERT.RSA–noout –print_certs –text
11.jpg (44.49 KB, 下載次數(shù): 104)
下載附件
保存到相冊
2020-2-20 13:15 上傳
2、Android app簽名
① 移除META-INF目錄
rm -r [path-to-unzipped-apk]/META-INF
②創(chuàng)建一個密鑰庫(keystore),從而持有私鑰用于簽名app
keytool –genkey –v -keystore [nameofkeystore]–alias
[your_keyalias] –keyalg RSA –keysize 2048 –validity
[numberofdays]
–genkey:用于告知keytool生成key
-v:信息輸出,可選擇
-keystore:密鑰庫名
-alias:別名
–keyalg:加密算法
過程需要設(shè)定密碼及確認基本信息 。
12.jpg (38.02 KB, 下載次數(shù): 97)
下載附件
保存到相冊
2020-2-20 13:15 上傳
③ app簽名
jarsigner –verbose –sigalg MD5withRSA –digestalgSHA1 –
keystore [name of your keystore] [your .apk file][your keyalias]
–sigalg:提供簽名過程的算法;
–digestalg:提供在計算apk文件中每個資源簽名的算法;
用于添加包含有證書及簽名的META-INF目錄。
④ 檢查app簽名
jarsigner –verify –verbose [path-to-your-apk]
3、檢查AndroidManifest.xml文件
AndroidManifest.xml文件包含了app中的所以許可信息及app中包含的各個組成成分。
① 安裝apktool
訪問http://ibotpeaches.github.io/Apktool/install/
13.jpg (24.41 KB, 下載次數(shù): 108)
下載附件
保存到相冊
2020-2-20 13:17 上傳
② 下載apktool.jar文件及其script,將兩個文件放置在/sdk/platform-tools/目錄下嘗試執(zhí)行./apktool -help,確定是否安裝成功
14.jpg (35.77 KB, 下載次數(shù): 92)
下載附件
保存到相冊
2020-2-20 13:17 上傳
③利用apktool生成AndroidManifest.xml文件
/[path-to-apktool]/apktool d -f –s [apk file] -odecode/
15.jpg (28.95 KB, 下載次數(shù): 105)
下載附件
保存到相冊
2020-2-20 13:17 上傳
④ 通過cat/vim查看AndroidManifest.xml文件內(nèi)容,包含app安裝信息
16.jpg (32.68 KB, 下載次數(shù): 95)
下載附件
保存到相冊
2020-2-20 13:18 上傳
Android app清單是以XML語言的格式保存在.xml文件中的,其中各個標(biāo)簽及標(biāo)簽中的屬性都代表著app的各個配置信息。
第一行則是表明該.xml文件的語言版本及編碼格式:
<manifest>:是XML文件的根標(biāo)簽,也是app清單的開始標(biāo)簽;
package:是該app包內(nèi)java主程序包的包名,它也是一個應(yīng)用進程的默認名稱;
<uses-permission>:為了保證Android應(yīng)用的安全性,應(yīng)用框架制定了比較嚴格的權(quán)限系統(tǒng),一個應(yīng)用必須聲明了正確的權(quán)限才可以使用相應(yīng)的功能,例如我們需要讓應(yīng)用能夠訪問網(wǎng)絡(luò)就需要配置“android.permission.INTERNET”,而如果要使用設(shè)備的相機功能,則需要設(shè)置 “android.permission.CAMERA”;
<permission>:權(quán)限聲明標(biāo)簽,定義了供給<uses-permission>使用的具體權(quán)限,當(dāng)需要給其他應(yīng)用程序提供可調(diào)用的代碼或者數(shù)據(jù),則需要使用<permission>標(biāo)簽;
android:description:權(quán)限描述;
android:icon:權(quán)限圖標(biāo);
android:name:權(quán)限名;
android:protectionLevel:代表著不同級別的權(quán)限;
dangerous:允許獲取敏感用戶數(shù)據(jù)及操作系統(tǒng)配置信息;
normal:獲取正常數(shù)據(jù)及服務(wù);
signature/signatureOrSystem:用于同一證書簽名的應(yīng)用間自動獲取信息
通?梢酝ㄟ^查看該標(biāo)簽確定其權(quán)限是否適當(dāng),同時涉及到dangerous/normal權(quán)限在安裝時會詢問用戶是否允許,而后兩個則不會顯示相關(guān)用戶確認的信息;
<application>:聲明一個應(yīng)用的開始;
debuggable:當(dāng)設(shè)置為true時,表明該APP在手機上可以被調(diào)試,默認為false;
enabled:是否能夠?qū)嵗搼?yīng)用程序的組件,如果為true,每個組件的enabled屬性決定那個組件是否可以被enabled。如果為false,它覆蓋組件指定的值;所有組件都是disabled;
allowClearUserData:是否能選擇自行清除數(shù)據(jù),默認為true;
android:exported:Activity是否可以被另一個Application的組件啟動,true允許被啟動;false不允許被啟動,如果被設(shè)置為了false,那么這個Activity將只會被當(dāng)前Application或者擁有同樣user ID的Application的組件調(diào)用。在沒確定exported 的默認值時,還需要根據(jù)Activity中是否有intent filter(過濾器) 來定。沒有任何的filter意味著這個Activity只有在詳細的描述了他的class name后才能被喚醒。這意味著這個Activity只能在應(yīng)用內(nèi)部使用,因為其它application并不知道這個class的存在。所以在這種情況下,它的默認值是 false。從另一方面講,如果Activity里面至少有一個filter的話,意味著這個Activity可以被其它應(yīng)用從外部喚起,這個時候它的默認值是true;
android:name:明確包含有java代碼的class file;
android:permission:是否允許請求與該組件交互;
android:enabled:是否允許系統(tǒng)啟動、實例化該組件;
<service>:服務(wù)組件,程序運行在后臺中;
android:isolateProcess:在沒有許可下,服務(wù)是否可以在分離的進程運行;
<receiver>:廣播接受器組件;
<provider>:內(nèi)容提供者組件;
android:writePermission:對相應(yīng)組件授予可寫權(quán)限;
android:readPermission:對相應(yīng)組件授予可讀權(quán)限。
4、通過ADB與app活動管理者交互
① 通過shell連接設(shè)備并運行pm list packages查看設(shè)備程序包列表
17.jpg (42.67 KB, 下載次數(shù): 101)
下載附件
保存到相冊
2020-2-20 13:18 上傳
ADB啟動app活動組件(am start <package name>/<activityname>)
啟動小米Email歡迎界面
18.jpg (20.85 KB, 下載次數(shù): 108)
下載附件
保存到相冊
2020-2-20 13:18 上傳
③ 啟動服務(wù)組件(am startservice <package name>/<servicename>)
更多:可通過am查看其功能的使用
5、利用ADB獲取app的資源
① 前提:實體設(shè)備應(yīng)將其rooted,取得root權(quán)限
② 在/data/data目錄,保存著各個程序包的資源
19.jpg (25.84 KB, 下載次數(shù): 101)
下載附件
保存到相冊
2020-2-20 13:18 上傳
③ ls –alR */databases/ 查看數(shù)據(jù)庫資源
ls –alR*/files/ 查看文件資源
20.jpg (43.1 KB, 下載次數(shù): 102)
下載附件
保存到相冊
2020-2-20 13:19 上傳
④ 利用sqlist3工具查看.db數(shù)據(jù)庫文件的信息
從設(shè)備中拷貝.db文件
21.jpg (29.4 KB, 下載次數(shù): 99)
下載附件
保存到相冊
2020-2-20 13:19 上傳
利用[path ofplatform-tools]目錄下的sqlite3工具查看數(shù)據(jù)庫信息
22.jpg (41.64 KB, 下載次數(shù): 103)
下載附件
保存到相冊
2020-2-20 13:19 上傳
結(jié)語:今天跟大伙分享的是如何檢查APP的證書與簽名、查看Mainfest及本地數(shù)據(jù)庫等文件
|
|