安卓逆向8,解決app抓包抓不到的問題


####

有時候app抓不到包,這不是工具的問題,而是你沒有搞清楚網絡協議,

###

網絡協議

網絡協議,比如http協議,這是全球通用的,大家約定好的,你要開發軟件,就要遵守這個協議,

瀏覽器都是只能抓到應用層,

###

TCP/IP五層模型
五層協議:
應用層:用戶使用的應用程序都歸屬於應用層,作用為規定應用程序的數據格式。
抓包工具,比如fiddler,Charles,都是只能抓應用層的協議,wareshark可以抓傳輸層的協議,但是一般不用這個軟件太重了,
http協議,FTP,SMTP協議,都在應用層,
tcp,udp,在傳輸層,
ip協議,在網絡層,

傳輸層:網絡層幫我們找到主機,但是區分應用層的應用就是靠端口,所以傳輸層就是建立端口到端口的通信。(端口范圍0-65535,0-1023為系統占用端口)
網絡層:區分不同的廣播域或者子網(否則發送一條數據全世界都會收到,是災難)。
數據鏈路層:定義電信號的分組方式。
物理層:基於電器特性發送高低點電壓(電信號),高電壓對應數字1,低電壓對應數字0。


c)OSI七層模型
七層協議:(應用層、表示層、會話層)、傳輸層、網絡層、(數據鏈路層、物理層)

 

比如pc版本的qq客戶端,你就抓不到包,因為這個沒有用http協議,而是用的tcp協議,所以你抓不到

 

###

你發了一個微信消息給另外一個人,發生了什么?

這個就是遵守這個tcp/ip五層協議,

先從應用層往下封包,----然后到物理層開始傳輸,---到了對方那里之后開始從物理層開始解包,----一直到在微信里面開始展示出來,

###

抓包方式:

抓包方式

第一種抓包:代理抓包

1,代理抓包,比如fiddler,Charles,這都是使用的代理抓包,這是抓的應用層,這種是用的最多的,

優點:
配置簡單/抓取解析SSL方便
缺點:
APP對代理抓包的檢測屏蔽越發厲害

原理:

注意,這個fiddler這樣的工具,只能抓http,https,websocket三種協議,比如發一個郵件是抓不到的,因為這是smtp協議,

這種代理抓包,又叫做中間人攻擊,

所以這個工具的抓包原理是什么樣的,就是使用的代理,把請求攔截,然后轉發,

所以代理抓包這個抓包工具,既是充當了客戶端,也是充當了服務端,

 

 

http和https的區別,

這個還是要想想原理,

HTTPS:
HTTP是明文傳播,易被攔截,易被修改,網頁彈廣告。
HTTPS在HTTP的基礎上加了一安全層(SSL或TSL)
HTTPS的特點:
1.數據加密,不再明文傳播
2.使用數字證書(CA Certificate Authority)(賽門鐵克),做身份校驗,防止數據被截獲,只有合法證書持有者
才能讀取數據
3.數據完整性,防止數據被篡改。對數據做簽名

 

 

####

代理抓不到包的原因第一種:app設置了自己的代理

主要是app設置了自己的代理,安卓會優先走app自己設置的代理,所以就不會走抓包工具的代理,

###

如果判斷app沒有走我們的fiddler代理呢?

就是保持網絡連接,關閉抓包工具,如果app還能訪問正常,就說明沒有走我們的fiddler代理,因為正常是fiddler關閉了之后,整個的app就訪問不了了,

###

怎么解決這個問題?

使用一個app,proxydroid,這個app強制把代理往fiddler上面轉,

原理就是配置了全局代理,強制把ip指向指定的端口上,

案例:mm應用市場

 

具體怎么設置Charles手機抓包,網絡上都有很多的教程,不多說,

一個app不能被代理工具抓包,

安裝mm應用市場,這個app做了強制升級,否則就不讓你用了,這是一個問題,也就是有些app,你是沒有辦法進行低版本的逆向的,

我們抓包這個app,是抓不到的,沒有我們想要的東西,

 

第一步:

首先你要先能正常抓包到其他的app,證明代理設置是對的,可以抓到手機app的包,

這個時候,你把代理軟件關閉,這個app是不能訪問的,因為設置了代理,而代理關閉了,

 

第二步:

關閉代理,看看這個抓不到包的app,是否還能正常運行,

我們可以發現,這個app,沒有受到代理的影響,也就是沒有走我們設置的代理,

 

第三步:

我們要解決這個問題,

使用一個app,proxydroid,這個app強制把代理往fiddler上面轉,

安裝這個app,注意手機要root,

 

實際上,用了這個代理轉發的app之后,可以不用設置手機wifi里面的代理轉發了,

###

解決方法:
ProxyDroid APP 全局代理 強制把IP轉發到指定端口上
原理: 使用 iptable 命令 實現端口轉發
mumu虛擬器 iptable 會報錯
案例:mm應用市場

 

###

代理抓不到包的第二種:ssl pining ssl證書校驗,這個是大部分的app抓不到包的原因

就是app對服務端的證書做校驗,我們也叫做單向認證,

 

而fiddler上面肯定是沒有這個證書的,所以app會校驗不過,

為什么瀏覽器不會出現這個問題,因為瀏覽器不會校驗這個證書,而app是公司自己開發的,可以加這個校驗的功能,

 

###

這個ssl pining ssl證書校驗的原理

這種和不走代理還不一樣,這種是走了代理,但是ssl證書驗證,

####

抓包安吉星:

我准備在真機上面測試,

先安裝兩個app,安吉星,justtrustme,

記住關鍵點!,justtrustme安裝了之后,要重啟這個手機設備,這個justtrustme才會生效,

第一步,抓包發現是一個connect,是看不到內容的,

 

第二步:怎么解決這個問題,

 

ssl pinning解決辦法:

1.使用Hook手段 Hook APP端網絡請求庫對 ssl證書的判斷方法

借助xposed 模塊 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe  ----通過安吉星演示

借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning  ----這個沒有演示,

解決的思路是直接強制校驗證書通過

示例:安吉星

 

 

 

 

2,使用上面的justtrustme,有時候還是會抓不到的,

因為這個apk是使用hook網絡請求庫的方法, 但是如果你沒有hook到這個網絡請求庫,就會失效,比如這個網絡請求庫是企業自己開發的,

怎么處理這種情況?

逆向APP 扣出里面的證書 放到charles里 讓charles使用真實證書做代理(在雙向驗證中講) ---這種沒有演示

部分 ssl pinning 失效的原因:---這種沒有演示

Hook 失敗,APP的網絡請求庫代碼被混淆,或者大廠自己實現了一套網絡請求庫

解決辦法:

逆向APP,找到證書驗證的地方,修改xposed 的 justtrustme 或者 frida的DroidSSLUnpinning 代碼,

重新Hook

這個是一個比較麻煩的事情,

 

###

現在抓包反而成了一個問題,

1,mumu模擬器不能安裝Xposed,也就不能使用justtrustme,也就不能使用fdex2脫殼,

2,夜神模擬器安裝不上mac版本,這個讓人惱火,虛擬機安裝夜神又非常的慢,

3,真機是安卓8的版本,Xposed能用,但是fdex2,不能用,這個也讓人惱火,

4,genymotion,最新的情況是可以Charles抓包了,

怎么辦?

我覺得,

Xposed+justtrustme+安吉星+真機安卓8,嘗試一下,

我發現這種方法,justtrustme,沒有生效,還是抓不到,

####

Xposed+justtrustme+安吉星+genymotion安卓6,嘗試一下,

還是不行,justtrustme,沒有生效,還是抓不到,

到底是為什么?

我終於知道了,是因為這個安吉星app,是使用的雙向認證!!!

 

####

手機有時候有的app能打開,有的app打不開,這是為什么?

很可能是有抓包代理,

因為有的app是通過代理的,只是有ssl驗證,所以失敗,

有的app是繞過代理的,所以是正常的

有的app是沒有對代理進行處理的,沒有繞過也沒有ssl驗證, 所以也是正常的,

細細分析一下,不要慌,

實在不行,重啟手機,然后再分析,

 

 

###

代理抓不到包的第三種,雙向認證

雙向認證 使用者很少,會影響服務器性能 很難找到有app使用這種app

客戶端對服務端發來的證書做校驗

真實的服務端也對客戶端證書做校驗

 

###

這種為什么使用Charles不能抓到包,

因為你請求服務器的時候,Charles是把自己的證書攜帶着去請求服務器的,這種肯定是校驗不過的啊,

 

#### 

雙向認證解決辦法:

客戶端校驗,仍然使用SSL unPinning方法,也就是客戶端強制不校驗這個ssl證書,強制通過,

服務端校驗,需把APP里的證書導入到代理抓包軟件中,讓代理抓包工具使用真實的APP證書。charles 比較方便配置

示例:soul

####

如何找到APP里的證書?

反編譯APP 在assert文件夾里有.p12 .pem之類文件cer ssl

反編譯后,在源代碼里大量搜索

Hook 監聽Assert文件夾 知道讀了哪些文件

可能有密碼 Hook java.security.KeyStore 查看密碼

###

然后把證書在Charles配置一下,

 

 

 

###

通常有上面三個手段,只要是走應用層的,就可以把大部分抓不到包的問題都解決了,

 

###

APP抓包相對繁瑣,越來越多的 APP 在 https 請求和響應時,為了防止中間人攻擊(或中間人抓包),會做證書認證,讓抓包工具抓不到請求。

證書認證分單向認證和雙向認證,雙向認證是相較於單向認證而言的,單向認證就是只在 APP 側做證書校驗,單向認證有現成的解決方法,比如用各種 bypass ssl 校驗的 hook 腳本既可讓單向認證失效,例如:JustTrustMe 。如果 APP 的網絡請求庫有混淆,上述 bypass ssl 腳本無效,也有開源作者開發了自適配的 bypass 程序,可以 hook 混淆后的網絡庫。比如:JustMePlush 。   簡單說了下單向認證如何解決,

 

開始說雙向認證如何解決。

雙向認證除了要在 APP 側做證書校驗外, 對方服務端還要做證書校驗。對方服務端是要檢測證書的,不提交真正的證書給服務端,肯定會請求失敗。

雙向認證抓包有兩種解決方法:

一是:按照搞定證書的思路去想的話,就是要想辦法拿到真正的證書。

二是:Hook SSL 對數據解密數據的地方。

方法一: 因為 APP 能正常跟服務端通信,所以真正的證書肯定是在 APP 里面。所以就是要想辦法從 APP 里摳出證書。摳證書有開源的 Frida Hook 腳本。如下地址是開源作者寫的 Frida Hook 腳本 https://gist.github.com/ceres- c/cb3b69e53713d5ad9cf6aac9b8e895d2gfgg 可以把證書從內存里讀出來保存到本地,並且證書密碼也能讀出來,非常的方便。 該腳本的原理是: 因為 APP 在向服務端發請求時, APP 肯定會操作證書,所以如果能找到 APP 操作證書的代碼地方, Hook 這部分代碼,對參數做些輸出打印,證書和證書密碼就都有了。 大部分情況下,我們不用非常熟悉安卓原理,比如安卓在代碼層面是如何操作證書的(當然熟悉更好)。因為資訊發達,一般靈活借助搜索引擎,靈活查閱資料,可以大體知道這些,就可以嘗試去寫 Hook 腳本去嘗試看看。 查閱資料可以知道,安卓操作證書通常是 java.security.KeyStore 這個類,然后再了解下這個類的用法,參數形式。就可以嘗試去 Hook 了。上述腳本就是 Hook  java.security.KeyStore 這個類的 load 方法,load 方法的形參就是我們需要的證書和密碼。 摳出的證書和密碼,配置進 fiddler 或 charles 里面,就可以抓到雙向認證的包。 PS: 還要注意證書的格式,摳出的證書可能是 jks 或 bks 格式的,fiddler 可能需要 p12 格式的, 所以要找工具先轉換一下格式。

方法二: 如果只是想抓包,還有另一種方法,不需要摳證書的方法。雖然 https 在傳輸過程中是加密的,但在終端顯示的時候,必然會解密,不然 APP 上都沒法顯示了。所以如果能知道安卓解密 SSL  加解密是哪個類, Hook 這個類, 類里相關方法的輸入輸出肯定就是傳輸的明文數據。 所以可以查閱資料,看看相關類的用法,就可以嘗試去 Hook 打印輸出看看情況。

也有開源作者開源了該 Hook 腳本, 比如 5alt 老板在google開源的腳本基礎上做了修改了的 ssl_logger 。 https://github.com/5alt/ssl_logger 能夠 Hook SSL 加解密的地方,它會把傳輸的數據保存為 pcap 格式。再使用 wireshark 打開該 pcap文件, 在 wireshark 上就可以看到明文的數據了。 如果要模擬向服務器發送請求的話,還是只能使用第一種方法,因為客服端必須要提交正確的證書,服務端才會正確響應。必須得摳出證書,模擬請求時必須帶上證書,才能請求到數據。安卓上的證書好多是 jks/bks格式的, 如果使用 Python requests 庫的話, 不支持這個格式, 所以要想辦法把證書轉成 cert 格式的。 上面兩種方法都是使用 Frida 進行 Hook ,所以要有 Root 過的手機和明白Frida 怎么使用就能搞定。

對於爬蟲來說,搞定抓包和請求參數加密的問題,大部分 Hook ,都可以通過 Hook 安卓系統 API 來找到 APP 代碼位置,或直接搞定。其實很少人能很熟悉安卓系統的各種原理,大部分時候能靈活通過各種關鍵字能查到相關原理的講解文獻,文獻里講的 API 靈活點拿去 Hook 康康線索,就能搞定很多拉。 其實使用雙向認證的 APP 還是少數, 對服務器性能多少有影響。

 

 

####

代理抓不到包的第四種,沒有走應用層-----了解

socket通信是IP層,fiddler/charles抓不到,用wireshark抓包 在網卡混雜模式里講wireshark

比如PC QQ

解析socket通信數據麻煩,要分析APP協議解析部分

 

代理抓不到包的第五種,私有協議----了解

這種不是通用的協議,

wireshark能抓到,不知道協議細節,解不了包。

需要分析APP協議解析部分

 

##

第二種抓包:網卡混雜抓包--了解

2,網卡混雜抓包,webshark,這個能抓傳輸層,和應用層,但是一般不用這個軟件太重了,

 

第三種抓包:路由器抓包--了解

3,路由器抓包,網絡組網方式,因為所有的流量都要從路由器過,使用特殊的路由器,可以進行路由器抓包,

公司有的老板,監控每一個員工的訪問記錄,就是路由器可以監控每一個機器的訪問記錄

這個也沒有什么可將的,你去買一個有這個功能的路由器就可以了,

 

第四種抓包:hook域名--了解

4,hook域名,把https改成http,

5,hook網絡請求庫,比如request,

 

這種hook的抓包就比較麻煩了,了解一下有這種方式,但是不做為掌握,

####

注意:

 1.安卓7.0(包括7.0)以后,安卓系統不再信任用戶安裝的證書。(例如 fiddler/charles的代理抓包證書) mumu模擬器


解決7.0以后用戶證書不信任問題兩種方法:
(1)root手機,把代理證書放到系統證書根目錄下
用戶CA證書目錄
/data/misc/user/0/cacerts-added
系統CA證書目錄
/system/etc/security/cacerts
問題:
有的手機root /system 分區是只能讀 仍然不能把證書放到系統根目錄, 比如魅族pro5
df 命令
mount -o rw,remount /system
(2) hook 系統方法,強行讓系統信任用戶證書:
比如:使用xposed框架的justtrustme模塊 和 frida的DroidSSLUnpinning

 

####
tricks:
1.優先使用安卓系統低版本抓包
優先使用安卓4.0 5.0 6.0抓包
2.優先使用APP低版本抓包
比如微信7.0以下 在安卓4.0-6.0上 容易抓包微信小程序
優先使用能用的APP最低版本

所以工具充分准備,

各種抓包工具都准備好,fiddler,Charles,wirsshark,

各種模擬器都安裝一下,夜神,mumu,雷電,4.0 5.0 6.0

各種手機都准備一下,安卓4.0 5.0 6.0 7.0 root過的,還有蘋果手機,

沒有必要因為一個抓包非要搞定一個高版本的app,我們只是要數據,不是要對抗新版本,

###

 

 

####


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM