資源共享吧|易語(yǔ)言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡(luò)安全教程|anzei.cn|我的開發(fā)技術(shù)隨記

 找回密碼
 注冊(cè)成為正式會(huì)員
查看: 1117|回復(fù): 1
打印 上一主題 下一主題

[安卓逆向破解] 零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(二)

[復(fù)制鏈接]

8

主題

8

帖子

0

精華

新手上路

Rank: 1

資源幣
19
積分
16
貢獻(xiàn)
0
在線時(shí)間
2 小時(shí)
注冊(cè)時(shí)間
2020-2-20
最后登錄
2020-5-2
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-2-20 13:20:08 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(二)

0x00 前言

     上期小狼跟大伙兒分享了如何檢測(cè)安卓逆向環(huán)境,大伙兒是否有遇到問題呢?其實(shí),小狼在上期中沒有特別指出來哦,今天就跟大伙兒說說困擾小狼些時(shí)日的問題。

   今天跟大家分享的是安卓逆向之初步檢查APP安全,準(zhǔn)備好了嗎?要開始啦~~~

0x01 正文

    上期文章沒有特別指出不能更新SDK的問題哦,聰明的小伙伴們是否自己找到解決方法了呢?其實(shí)可以掛代理咧,操作步驟如下:

    Tools—>options

    mirrors.neusoft.edu.cn

    80




解決了上次的問題,接下就開始我們今天的正文啦~

1、檢查APP證書及其簽名

     APP證書是開發(fā)者用來確保用戶對(duì)他們?cè)贏PP市場(chǎng)上發(fā)布的應(yīng)用程序的信任,證書中通常包括開發(fā)者的認(rèn)證信息及對(duì)APP的相關(guān)加密算法。每個(gè)APP在被安裝之前都必須是通過證書簽名過的,通過簽名可以確保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]




啟動(dòng) [path-to-your-sdk-install]/emulator –avd [your avdname] –no-boot-anim





② 從設(shè)備中拷貝apk到本地

      shell設(shè)備,查看apk的相應(yīng)路徑






將apk拷貝到本地



③ 查看APP證書及簽名

    apk文件實(shí)際上是zip格式的壓縮包,只是被更改了文件名而已,先將apk轉(zhuǎn)變?yōu)閦ip格式壓縮包,再進(jìn)行解壓 。



解壓后會(huì)新增相應(yīng)文件及目錄。


查看META-INF下文件的內(nèi)容 ,CERT.RSA是包含有公鑰證書的文件,使用keytool進(jìn)行查看:keytool –printcert –file META-INF/CERT.RSA




關(guān)聯(lián)app內(nèi)容的簽名的文件是META-INF,可以通過cat/vim查看其內(nèi)容



其中SHA1-Digest-manifest是app每個(gè)資源文件所對(duì)應(yīng)的摘要信息,所顯示的是通過base64編碼過的。

④ 解剖包含有公鑰證書和簽名的目錄META-INF

    CERT.RSA:是app證書,需要通過keytool查看其信息,其中包含有公鑰持有者、發(fā)行人的基本信息,證書的有效期限,證書指紋等。

    CERT.SF:這是包含有app每個(gè)資源文件摘要信息的文件,這些摘要信息是通過私鑰進(jìn)行加密簽名的,需要使用公鑰才能解密;在app安裝過程中,每個(gè)資源文件都會(huì)生成摘要信息與這里解密后的摘要進(jìn)行對(duì)比,從而確保app的完整性。

    MANIFEST.MF:與CERT.SF保存著相似的資源摘要信息,但未用私鑰進(jìn)行加密簽名。

⑤ 可以使用OpenSSL查看完整的公鑰證書

    openssl pcks7 –inform DER –in META-INF/CERT.RSA–noout –print_certs –text



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:加密算法

      過程需要設(shè)定密碼及確認(rèn)基本信息 。




③ app簽名

    jarsigner –verbose –sigalg MD5withRSA –digestalgSHA1 –

    keystore [name of your keystore] [your .apk file][your keyalias]

    –sigalg:提供簽名過程的算法;

    –digestalg:提供在計(jì)算apk文件中每個(gè)資源簽名的算法;

      用于添加包含有證書及簽名的META-INF目錄。

④ 檢查app簽名

    jarsigner –verify –verbose [path-to-your-apk]

3、檢查AndroidManifest.xml文件

    AndroidManifest.xml文件包含了app中的所以許可信息及app中包含的各個(gè)組成成分。

① 安裝apktool

    訪問http://ibotpeaches.github.io/Apktool/install/



② 下載apktool.jar文件及其script,將兩個(gè)文件放置在/sdk/platform-tools/目錄下嘗試執(zhí)行./apktool -help,確定是否安裝成功



③利用apktool生成AndroidManifest.xml文件

    /[path-to-apktool]/apktool d -f –s [apk file] -odecode/



④ 通過cat/vim查看AndroidManifest.xml文件內(nèi)容,包含app安裝信息



Android app清單是以XML語(yǔ)言的格式保存在.xml文件中的,其中各個(gè)標(biāo)簽及標(biāo)簽中的屬性都代表著app的各個(gè)配置信息。

    第一行則是表明該.xml文件的語(yǔ)言版本及編碼格式:

    <manifest>:是XML文件的根標(biāo)簽,也是app清單的開始標(biāo)簽;

     package:是該app包內(nèi)java主程序包的包名,它也是一個(gè)應(yīng)用進(jìn)程的默認(rèn)名稱;

    <uses-permission>:為了保證Android應(yīng)用的安全性,應(yīng)用框架制定了比較嚴(yán)格的權(quán)限系統(tǒng),一個(gè)應(yīng)用必須聲明了正確的權(quán)限才可以使用相應(yīng)的功能,例如我們需要讓應(yīng)用能夠訪問網(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:用于同一證書簽名的應(yīng)用間自動(dòng)獲取信息

通?梢酝ㄟ^查看該標(biāo)簽確定其權(quán)限是否適當(dāng),同時(shí)涉及到dangerous/normal權(quán)限在安裝時(shí)會(huì)詢問用戶是否允許,而后兩個(gè)則不會(huì)顯示相關(guān)用戶確認(rèn)的信息;

    <application>:聲明一個(gè)應(yīng)用的開始;

       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)用。在沒確定exported 的默認(rèn)值時(shí),還需要根據(jù)Activity中是否有intent filter(過濾器) 來定。沒有任何的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:在沒有許可下,服務(wù)是否可以在分離的進(jìn)程運(yùn)行;

    <receiver>:廣播接受器組件;

    <provider>:內(nèi)容提供者組件;

       android:writePermission:對(duì)相應(yīng)組件授予可寫權(quán)限;

       android:readPermission:對(duì)相應(yīng)組件授予可讀權(quán)限。

4、通過ADB與app活動(dòng)管理者交互

① 通過shell連接設(shè)備并運(yùn)行pm list packages查看設(shè)備程序包列表




ADB啟動(dòng)app活動(dòng)組件(am start <package name>/<activityname>)

  啟動(dòng)小米Email歡迎界面





③ 啟動(dòng)服務(wù)組件(am startservice <package name>/<servicename>)

  更多:可通過am查看其功能的使用

5、利用ADB獲取app的資源

① 前提:實(shí)體設(shè)備應(yīng)將其rooted,取得root權(quán)限

② 在/data/data目錄,保存著各個(gè)程序包的資源



③ ls –alR */databases/ 查看數(shù)據(jù)庫(kù)資源

    ls –alR*/files/ 查看文件資源



④ 利用sqlist3工具查看.db數(shù)據(jù)庫(kù)文件的信息

    從設(shè)備中拷貝.db文件





利用[path ofplatform-tools]目錄下的sqlite3工具查看數(shù)據(jù)庫(kù)信息




結(jié)語(yǔ):今天跟大伙分享的是如何檢查APP的證書與簽名、查看Mainfest及本地?cái)?shù)據(jù)庫(kù)等文件

回復(fù)

使用道具 舉報(bào)

2

主題

302

帖子

0

精華

終身高級(jí)VIP會(huì)員

Rank: 7Rank: 7Rank: 7

資源幣
4
積分
309
貢獻(xiàn)
0
在線時(shí)間
37 小時(shí)
注冊(cè)時(shí)間
2020-8-14
最后登錄
2023-2-6

終身VIP會(huì)員

沙發(fā)
發(fā)表于 2020-9-19 09:07:29 | 只看該作者
祝資源共享吧越來越火!
 點(diǎn)擊右側(cè)快捷回復(fù)  

本版積分規(guī)則

小黑屋|資源共享吧 ( 瓊ICP備2023000410號(hào)-1 )

GMT+8, 2024-10-23 06:33 , Processed in 0.033610 second(s), 14 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回復(fù) 返回頂部 返回列表