新手上路

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