成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSLPinnin

這篇文章主要介紹“如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning”,在日常操作中,相信很多人在如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

這篇文章主要介紹“如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning”,在日常操作中,相信很多人在如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSL Pinning”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、普定網(wǎng)站維護(hù)、網(wǎng)站推廣。

大家好!本文我將詳細(xì)為大家解釋如何使用frida框架,繞過(guò)Android應(yīng)用程序的SSL pinning。

以下是本文將涵蓋的內(nèi)容:

Frida和SSL pinning簡(jiǎn)介

要求

設(shè)置和安裝

Frida設(shè)置

設(shè)置BurpSuite

推送代理的CA證書(shū):

腳本注入繞過(guò)SSL pinning

步驟概述

疑難解答

Frida 和 SSL pinning 簡(jiǎn)介

Frida是什么?

Frida官網(wǎng)上是這么說(shuō)的:

它是針對(duì)本地APP的類似油猴插件的東西,用更專業(yè)的術(shù)語(yǔ)來(lái)說(shuō),它是一個(gè)動(dòng)態(tài)代碼檢測(cè)toolkit。它可以讓你注入JavaScript代碼片段或者你自己的庫(kù)到Windows中的APP中,也可以注入到macOS,GNU/Linux,iOS,Android和QNX的APP中。Frida還提供了一些構(gòu)建在Frida之上的簡(jiǎn)單工具。這些工具你可以直接使用,也可以根據(jù)自己的需求來(lái)調(diào)整,或者是作為如何使用API的示例。

簡(jiǎn)而言之,F(xiàn)rida就是一個(gè)讓你可以注入腳本到本地APP(此案例我們將注入到安卓APP中)中的工具,從而修改APP的行為(在這里例子中,我們可以繞過(guò)ssl pinning并執(zhí)行中間人攻擊,即使APP使用的是HTTPS/SSL連接),并且實(shí)時(shí)的進(jìn)行動(dòng)態(tài)測(cè)試。

如今,大多數(shù)應(yīng)用程序已在其移動(dòng)應(yīng)用中實(shí)現(xiàn)了SSL pinning。這是為什么呢?讓我們思考一個(gè)問(wèn)題,假設(shè)我們要在設(shè)備和服務(wù)器之間安全地交換一些數(shù)據(jù)。SSL傳輸層加密將使數(shù)據(jù)傳輸安全可靠?在數(shù)據(jù)傳輸之前,如果服務(wù)器的與請(qǐng)求的主機(jī)名和受信任的根證書(shū)匹配,則客戶端會(huì)檢查該證書(shū)。

它不能確保提供的證書(shū)是服務(wù)器為請(qǐng)求的主機(jī)名提供的實(shí)際證書(shū)。因此,依賴設(shè)備的可信存儲(chǔ)證書(shū)不會(huì)使數(shù)據(jù)傳輸“安全”。

證書(shū)鎖定(Certificate pinning)是遠(yuǎn)程服務(wù)器在應(yīng)用程序本身中信任的硬編碼證書(shū),因此它將忽略設(shè)備證書(shū)存儲(chǔ),并將信任自己的硬編碼證書(shū),進(jìn)一步的應(yīng)用程序?qū)⑹褂迷撚簿幋a證書(shū)“安全地”與遠(yuǎn)程服務(wù)器通信。

當(dāng)我們對(duì)大多數(shù)移動(dòng)應(yīng)用程序的HTTP請(qǐng)求進(jìn)行動(dòng)態(tài)分析時(shí),SSL pinning繞過(guò)是需要完成的主要步驟,因?yàn)楝F(xiàn)如今組織對(duì)數(shù)據(jù)隱私和通過(guò)網(wǎng)絡(luò)的數(shù)據(jù)安全傳輸變得更加重視,像一些來(lái)自中間人攻擊的威脅也成為了他們重點(diǎn)關(guān)注的對(duì)象。

Frida是一個(gè)框架,它將腳本注入到原生應(yīng)用中,以在運(yùn)行時(shí)操作應(yīng)用程序的邏輯,這是一種更為動(dòng)態(tài)的方法,可用于移動(dòng)應(yīng)用的滲透測(cè)試任務(wù)。

要求

在開(kāi)始使用之前我們需要進(jìn)行一些設(shè)置,第一次設(shè)置可能需要花點(diǎn)時(shí)間,但在此之后就會(huì)變得很輕松。如果你在任何一個(gè)步驟都出現(xiàn)了問(wèn)題,都可以參考文章末尾的“疑難解答”部分。建議將所有下載的內(nèi)容保存在一個(gè)文件夾中。

I. 已 root 的設(shè)備/模擬器:

我們需要一個(gè)已root的設(shè)備或模擬器,因?yàn)槲覀冃枰獙⒛_本注入到設(shè)備的根目錄。我使用的是genymotion。Genymotion非常易于設(shè)置和使用,你可以在此處下載它。

一旦完成了genymotion的安裝,我們需要安裝一個(gè)Android設(shè)備(Android 7+)。我將使用具有以下配置的“Google pixel XL”設(shè)備。

II. Python frida 包安裝:

從這里安裝Python for Windows。

我們需要為frida服務(wù)器安裝一些python包。在終端中輸入以下命令:

python -m pip install Fridapython -m pip install objectionpython -m pip install frida-toolsorpip install Fridapip install objectionpip install frida-toolsIII.平臺(tái)工具(adb):

從此處下載用于Windows的平臺(tái)工具。

IV. 下載注入腳本:

從此處下載我們將推送到設(shè)備用于注入目標(biāo)應(yīng)用的注入腳本。

或者可以將此代碼另存為fridascript.js,保存在與adb相同的文件夾中。

/*Android SSL Re-pinning frida script v0.2 030417-pier$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pausehttps://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !*/setTimeout(function(){Java.perform(function (){console.log("");console.log("[.] Cert Pinning Bypass/Re-Pinning");var CertificateFactory = Java.use("java.security.cert.CertificateFactory");var FileInputStream = Java.use("java.io.FileInputStream");var BufferedInputStream = Java.use("java.io.BufferedInputStream");var X509Certificate = Java.use("java.security.cert.X509Certificate");var KeyStore = Java.use("java.security.KeyStore");var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");var SSLContext = Java.use("javax.net.ssl.SSLContext");// Load CAs from an InputStreamconsole.log("[+] Loading our CA...")var cf = CertificateFactory.getInstance("X.509");try {var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");}catch(err) {console.log("[o] " + err);}var bufferedInputStream = BufferedInputStream.$new(fileInputStream);var ca = cf.generateCertificate(bufferedInputStream);bufferedInputStream.close();var certInfo = Java.cast(ca, X509Certificate);console.log("[o] Our CA Info: " + certInfo.getSubjectDN());// Create a KeyStore containing our trusted CAsconsole.log("[+] Creating a KeyStore for our CA...");var keyStoreType = KeyStore.getDefaultType();var keyStore = KeyStore.getInstance(keyStoreType);keyStore.load(null, null);keyStore.setCertificateEntry("ca", ca);// Create a TrustManager that trusts the CAs in our KeyStoreconsole.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);tmf.init(keyStore);console.log("[+] Our TrustManager is ready...");console.log("[+] Hijacking SSLContext methods now...")console.log("[-] Waiting for the app to invoke SSLContext.init()...")SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {console.log("[o] App invoked javax.net.ssl.SSLContext.init...");SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);console.log("[+] SSLContext initialized with our custom TrustManager!");}});},0);設(shè)置和安裝:I. 將設(shè)備連接到 adb:

我們需要將設(shè)備連接到adb以在設(shè)備上運(yùn)行命令。但首先轉(zhuǎn)到settings >> Developer options,并在設(shè)備中啟用調(diào)試模式,以便adb可以與設(shè)備通信。

轉(zhuǎn)到已提取平臺(tái)工具的文件夾,然后運(yùn)行以下命令將設(shè)備連接到adb

//adb connect <ip of device:port>adb connect 192.168.1.190:5555

如果設(shè)備中出現(xiàn)彈出窗口,請(qǐng)單擊“允許Allow”。

檢查設(shè)備是否已連接到adb:

adb devices

你應(yīng)該能夠看到設(shè)備的IP以及名稱。

II.下載 frida 服務(wù)器以獲取支持 Android 設(shè)備的 arch 版本:

我們需要根據(jù)我們?cè)O(shè)備的arch版本,為我們的Android設(shè)備下載frida服務(wù)器包。

要查找設(shè)備的arch版本,請(qǐng)運(yùn)行以下命令。

adb shell getprop ro.product.cpu.abi

如果設(shè)備配置與上面提到的相同,請(qǐng)下載:

frida-server-12.4.7-android-x86.xzfrida-server-12.4.7-android-x86_64.xzIV. 在設(shè)備中安裝目標(biāo)應(yīng)用程序。

在我們的設(shè)備中安裝需要繞過(guò)SSL pinning的應(yīng)用程序。打開(kāi)應(yīng)用程序并使其在后臺(tái)運(yùn)行。

Frida 服務(wù)器設(shè)置:

在注入腳本之前,我們需要在設(shè)備中運(yùn)行frida服務(wù)器。請(qǐng)按照以下步驟操作:

I. 將 frida-server 推送到設(shè)備:

現(xiàn)在,我們需要將我們的frida-server文件推送到設(shè)備中。復(fù)制adb文件夾中的“frida-server-12.4.7-android-x86.xz”文件并運(yùn)行以下命令。

//adb push <path_of_frida_server_folder><space></data/local/tmp>adb push C:\ADB\frida-server /data/local/tmpII. 授予 frida-server 權(quán)限:adb shell chmod 777 /data/local/tmp/frida-server設(shè)置 BurpSuite:

請(qǐng)遵循本指南為android設(shè)備在burp中設(shè)置代理。

推送代理的 CA 證書(shū):

為了能夠攔截流量,frida需要訪問(wèn)我們的Burpsuite CA證書(shū)。我們將在BurpSuite Setup中推送在步驟5中下載的相同證書(shū)。

將證書(shū)推送到設(shè)備并放置在與frida-server相同的位置,將其命名為cert-der.crt(因?yàn)榇嗣Q和路徑已在fridascript.js中提到,這樣可以避免一些不必要的問(wèn)題)

// adb push <path to cacert.der> /data/local/tmp/cert-der.crtadb push cacert.der /data/local/tmp/cert-der.crt腳本注入繞過(guò)SSL pinning:

現(xiàn)在,讓我們將fridascript.js注入目標(biāo)應(yīng)用程序。

I. 將 fridascript.js 腳本推送到設(shè)備:

將fridascript.js復(fù)制到adb文件夾,并運(yùn)行以下命令將fridascript.js推送到設(shè)備中。

//adb push <path_to_fridascript.js_folder> /data/local/tmpadb push C:\ADB\fridascript.js /data/local/tmpII. 檢查并運(yùn)行設(shè)備中的 frida 服務(wù)器adb shell /data/local/tmp/frida-server &III. 列出設(shè)備上所有正在運(yùn)行的進(jìn)程

現(xiàn)在,我們需要找出目標(biāo)應(yīng)用程序的ID。我們將列出設(shè)備上所有正在運(yùn)行的服務(wù),包括你的應(yīng)用程序進(jìn)程。

打開(kāi)一個(gè)新的終端,并鍵入以下命令。

frida-ps -U

IV. 找到你應(yīng)用程序的包名稱。

V. 將 fridascript.js hook 到目標(biāo)應(yīng)用程序中:

最后,我們將使用以下命令將fridascript.js hook到原生應(yīng)用程序中:

//frida -U -f <your_application_package_name> -l <path_to_fridascript.js_on_your_computer> --no-pausfrida -U -f com.twitter.android -l D:\frida\fridascript.js --no-pausVI. 繞過(guò)!

如果一切順利,那么目標(biāo)應(yīng)用程序的所有流量都將被BurpSuite攔截。

簡(jiǎn)而言之:

1. 在genymotion上下載并安裝設(shè)備

2. 安裝frida和objection工具

python -m pip install Frida python -m pip install frida-tools python -m pip install objection or pip install Frida pip install frida-tools pip install objection

3. 下載adb平臺(tái)工具

4. 下載frida注入腳本

5. 將設(shè)備連接到adb

//adb connect <ip of device:port>

6. 下載frida服務(wù)器以獲取支持Android設(shè)備的arch版本

7. 找出設(shè)備的arch版本

adb shell getprop ro.product.cpu.abi

8. 在設(shè)備中安裝目標(biāo)應(yīng)用程序。

9. 將frida-server推送到設(shè)備:

//adb push <path of frida-server folder><space></data/local/tmp>

10. 授予frida-server權(quán)限:

adb shell chmod 777 /data/local/tmp/frida-server

11. 設(shè)置burpsuite

12. 推送代理的CA證書(shū)

// adb push <path to cacert.der> /data/local/tmp/cert-der.crt

13. 將fridascript.js推送到設(shè)備:

//adb push <path to fridascript.js folder> /data/local/tmp

14. 檢查并運(yùn)行設(shè)備中的frida服務(wù)器

adb shell /data/local/tmp/frida-server &

15. 列出設(shè)備上所有正在運(yùn)行的進(jìn)程:

frida-ps -U

16. 找到你應(yīng)用程序的包名稱

17. 將fridascript.js hook到目標(biāo)應(yīng)用程序中

//frida -U -f <your_application_package_name> -l <path_to_fridascript.js_on_your_computer> --no-paus

18. 在BurpSuite中攔截流量。

疑難解答

1. ADB 守護(hù)程序無(wú)法連接

如果發(fā)生如下錯(cuò)誤:

adb devicesadb server is out of date. killing...cannot bind 'tcp:5037'ADB server didn't ACK*failed to start daemon*error:

i. 打開(kāi) environment System properties>>Advanced>>Environment Variables

ii. 單擊路徑并刪除C:/Android條目或指向adb工具的路徑

iii. 將所有平臺(tái)工具復(fù)制到genymotion>>tools文件夾中

iv. 創(chuàng)建新路徑并添加genymotion>>tools文件夾的路徑。

2. frida/ pip 不被識(shí)別為內(nèi)部或外部命令

i. 打開(kāi) environment System properties>>Advanced>>Environment Variables

ii. 創(chuàng)建新路徑并添加Python>>script文件夾的路徑

3. 將應(yīng)用程序安裝到設(shè)備時(shí)出現(xiàn) Arm translation error。

i. 從此處下載arm translation文件

ii. 將文件拖放到設(shè)備模擬器中,或是在使用物理設(shè)備時(shí)從恢復(fù)中刷新此文件

iii. 重啟設(shè)備后,你將能夠拖放安裝目標(biāo)應(yīng)用程序

4.Failed to spawn:spawn Android apps 時(shí)不支持 argv 選項(xiàng)

檢查計(jì)算機(jī)上的fridascript.js路徑。路徑可能不正確。你必須給出fridascript.js文件的絕對(duì)路徑。

5. frida 服務(wù)器已啟動(dòng)但無(wú)法列出服務(wù)

斷開(kāi)并重新連接設(shè)備中的wifi。

當(dāng)前名稱:如何使用Frida框架繞過(guò)Android應(yīng)用程序的SSLPinnin
當(dāng)前網(wǎng)址:http://jinyejixie.com/article14/ejjede.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、品牌網(wǎng)站制作、靜態(tài)網(wǎng)站App開(kāi)發(fā)、網(wǎng)站營(yíng)銷、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
栖霞市| 德格县| 东辽县| 周至县| 星子县| 衡阳市| 南开区| 班玛县| 东明县| 漳浦县| 鄂托克旗| 临海市| 德惠市| 宜良县| 比如县| 滨州市| 崇文区| 砀山县| 若羌县| 徐州市| 大悟县| 酒泉市| 万荣县| 镇平县| 惠州市| 什邡市| 洮南市| 孙吴县| 宝清县| 桓台县| 宜黄县| 句容市| 凤城市| 邯郸市| 阜康市| 普格县| 英山县| 河曲县| 民和| 达日县| 佛冈县|