利用Frida绕过Android App(途牛apk)的SSL Pinning
0x00 前言
做APP測(cè)試過程中,使用burp無(wú)法抓到數(shù)據(jù)包或提示網(wǎng)絡(luò)錯(cuò)誤可能是因?yàn)锳PP啟用了SSL Pinning,剛好最近接觸到途牛apk就是這種情況,于是便有了本文。
0x01 SSL Pinning原理
SSL Pinning即證書鎖定,將服務(wù)器提供的SSL/TLS證書內(nèi)置到移動(dòng)端開發(fā)的APP客戶端中,當(dāng)客戶端發(fā)起請(qǐng)求時(shí),通過比對(duì)內(nèi)置的證書和服務(wù)器端證書的內(nèi)容,以確定這個(gè)連接的合法性。
0x02 環(huán)境
Win10
安卓模擬器(夜神模擬器)
Burp
Frida(Python 3.7)
adb工具
apk(途牛apk)
0x03 利用Frida繞過SSL Pinning
繞過原理:
客戶端請(qǐng)求時(shí)會(huì)將內(nèi)置的證書與服務(wù)端的證書做一次性校驗(yàn),通過hook的方式將此次校驗(yàn)的結(jié)果返回true或者干脆不讓其做校驗(yàn)即可以繞過。當(dāng)安卓APP初始化SSLContext時(shí),我們使用frida劫持SSLContext.init方法,使用我們自己創(chuàng)建的TrustManager , 把它作為實(shí)參傳入SSLContext.init方法的第二個(gè)參數(shù)( SSLContext.init(KeyManager,TrustManager,SecuRandom) 。這樣就能使得APP信任我們的CA,以上操作都是通過一個(gè)js腳本注入實(shí)現(xiàn)的。
1. 利用adb連接安卓模擬器
這里我們使用的是夜神模擬器,它默認(rèn)使用Android 5版本的,就是因?yàn)檫@個(gè)點(diǎn),這里踩坑踩了很久,夜神的Android版本低會(huì)導(dǎo)致下面在啟用Frida-server時(shí)報(bào)錯(cuò),因此這里需要使用Android 7以上。
Android低版本報(bào)錯(cuò)如下
夜神模擬器創(chuàng)建高版本Android 7并啟動(dòng)
利用adb連接模擬器,夜神模擬器adb連接默認(rèn)是連接本機(jī)的62001端口,可是這里因?yàn)槭切陆ǖ目赡芏丝跁?huì)有所變化,不過也還是在62001附近,可以使用netstat -ano查看一下本機(jī)端口,我這里是62041端口,如下所示代表連接成功
2. 設(shè)置burp證書
先在burp里設(shè)置本機(jī)代理
訪問代理地址并下載burp證書
將下載的burp證書導(dǎo)入到模擬器中/data/local/tmp目錄下,并重命名為cert-der.crt(此名稱在接下來(lái)的fridascript.js腳本中使用,如果該名字命名為其他則腳本中相對(duì)應(yīng)的地方也需要進(jìn)行替換)
3. 模擬器設(shè)置代理
在安卓模擬器設(shè)置->wlan選擇對(duì)應(yīng)網(wǎng)絡(luò)設(shè)置代理
4. Frida設(shè)置
Python frida包安裝
Win10需安裝Python3.7環(huán)境,終端安裝Frida和frida-tools
pip3 install Frida pip3 install frida-toolsfrida-server設(shè)置
查看安卓設(shè)備的arch版本并下載對(duì)應(yīng)的frida-server包
adb shell getprop ro.product.cpu.abi
這里是x86的因此下載frida-server-12.9.7-android-x86.xz
下載完成以后解壓重命名文件為frida-server并將其上傳到安卓模擬器的/data/local/tmp/目錄下
設(shè)置frida-server權(quán)限
adb shell chmod 777 /data/local/tmp/frida-server運(yùn)行frida-server
# 進(jìn)入模擬器:/data/local/tmp/目錄運(yùn)行 cd /data/local/tmp/ ./frida-server # 直接運(yùn)行 adb shell /data/local/tmp/frida-server &如果運(yùn)行正常則不會(huì)有任何輸出
在模擬器里運(yùn)行途牛旅游app,并使用frida-ps -U命令列出設(shè)備上運(yùn)行的服務(wù),找到途牛應(yīng)用程序的包名
下載注入腳本,保存為fridascript.js
腳本里的30行其中對(duì)應(yīng)的就是burp證書的信息
將fridascript.js注入到目標(biāo)應(yīng)用程序中
-f選項(xiàng)表示強(qiáng)制啟動(dòng)一個(gè)應(yīng)用程序,-l選項(xiàng)表示加載指定腳本,–no-pause選項(xiàng)表示不中斷應(yīng)用程序的啟動(dòng),如下所示代表運(yùn)行成功
一旦frida服務(wù)運(yùn)行成功,目標(biāo)程序的流量都將被burp攔截
0x04 參考
https://xz.aliyun.com/t/6102
https://blog.csdn.net/w1590191166/article/details/106308028
總結(jié)
以上是生活随笔為你收集整理的利用Frida绕过Android App(途牛apk)的SSL Pinning的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 汉米尔顿回路_《模拟电子技术基
- 下一篇: maxlength不起作用android