1. 程式人生 > >安卓脫殼&&協議分析&&burp輔助分析插件編寫

安卓脫殼&&協議分析&&burp輔助分析插件編寫

自動 ges 程序 ima 到手 插件 無線 gin adb

前言


本文由 本人 首發於 先知安全技術社區: https://xianzhi.aliyun.com/forum/user/5274


本文以一個 app 為例,演示對 app脫殼,然後分析其 協議加密和簽名方法,然後編寫 burp 腳本以方便後面的測試。

文中涉及的文件,脫殼後的 dex 都在:

鏈接: https://pan.baidu.com/s/1nvmUdq5 密碼: isrr

對於 burp 擴展和後面加解密登錄數據包工具的的源碼,直接用 jd-gui 反編譯 jar 包即可。

正文

首先下載目標 apk ,然後拖到 GDA 裏面看看有沒有殼。

技術分享圖片

發現是騰訊加固,可以通過修改 dex2oat 的源碼進行脫殼。

技術分享圖片

具體可以看: https://bbs.pediy.com/thread-210275.htm

脫完殼 dex文件,扔到 jeb 裏面進行分析(GDA分析能力還是不太強,不過速度快)

技術分享圖片

類和方法都出來了,脫殼成功。

首先看看協議抓取,建議自己電腦起一個 ap (熱點), 然後用手機連接熱點,對於 http 的數據包,可以使用 burp 進行抓取(對於 https 還要記得先安裝 burp 的證書),對於 tcp 的數據包,由於我們是連接的 電腦的 wifi 所以我們可以直接用 wireshark 抓取我們網卡的數據包就能抓到手機的數據包。對於筆記本,可以買個無線網卡。

首先看看註冊數據包的抓取,設置好代理,選擇註冊功能,然後去 burp

裏面,可以看到抓取的數據包。

技術分享圖片

對於登錄數據包,點擊登錄功能,去發現 burp 無法抓到數據包, 懷疑使用了 tcp 發送請求數據,於是開啟 wireshark 抓取 手機連接的熱點到的網卡的數據包。抓取時間要短一些,不然找信息就很麻煩了。

技術分享圖片

然後我們一個一個 tcp 數據包查看,看看有沒有什麽特殊的。

技術分享圖片
發現一個數據包裏面有 base64 加密的數據,猜測這個應該就是登陸的數據包。查了一下 ip ,應該就是了。

技術分享圖片

下面針對不同類型的協議加密措施進行分析。

HTTP協議

協議分析關鍵是找到加密解密的函數,可以使用關鍵字搜索定位。為了方便搜索,先把 dex 轉成 smali 然後用文本搜索工具搜索就行了,我使用 android killer

。在這裏可以使用 snverify 等關鍵詞進行搜索,定位關鍵代碼。我選擇了 verify ,因為它搜出的結果較少。

技術分享圖片
函數沒經過混淆,看函數名就可以大概猜出了作用,找到關鍵方法,拿起 jeb 分析之。
先來看看 LoginReg2_ActivityonCreate 方法。

技術分享圖片

獲取手機號進入了 XHttpApi.getVerify 方法,跟進

技術分享圖片
先調用了 XHttpApi.addSnToParams(params) (看名稱估計他就是增加簽名的函數了),然後發送 post 請求。

繼續跟進 XHttpApi.addSnToParams

技術分享圖片
至此簽名方案非常清晰了。

  • 獲取時間戳,新增一個 t 的參數,值為 時間戳
  • md5("AndroidWear65cbcdeef24de25e5ed45338f06a1b37" + time_stamp)sn

由於有時間戳和簽名的存在,而且服務器會檢測時間戳,後續如果我們想測試一些東西,就需要過一段時間就要計算一下 簽名和時間戳,這樣非常麻煩,我們可以使用 burp 編寫插件,自動的修改 時間戳和 簽名,這樣可以大大的減少我們的工作量。

看看關鍵的源代碼

首先註冊一個 HttpListener, 這樣 burp 的流量就會經過我們的擴展。

技術分享圖片
然後看看 processHttpMessage對流經擴展的流量進行處理的邏輯。只處理 http 請求的數據,然後根據域名過濾處理的數據包,只對 wear.readboy.com 進行處理。接著對於數據包中的 t 參數和 sn 參數進行重新計算,並且修改 數據包中的對應值。
技術分享圖片
加載擴展,以後重放數據包,就不用管簽名的問題了。

TCP

對於 tcp 的協議可以通過搜索 端口號,ip 地址等進行定位,這裏搜索 端口號(這裏是8866, 可以在 wireshark 中查看),有一點要註意,程序中可能會用 16 進制或者 10 進制表示端口號為了,保險起見建議兩種表示方式都搜一下。
技術分享圖片

通過搜索 0x22a2886616 進制表示)找到兩個可能的位置。分別檢查發現 第二個沒啥用,在 jeb 中查找交叉引用都沒有,於是忽略之。然後看看第一個。
技術分享圖片
可以看到 jeb 把端口號都轉成了 10 進制數,這裏與服務器進行了連接,沒有什麽有用的信息。於是上下翻翻了這個類裏面的函數發現一個有意思的函數。

技術分享圖片
用於發送數據,裏面還用了另外一個類的方法,一個一個看,找到了加密方法。
技術分享圖片

就是簡單的 rc4 加密,然後在 base64 編碼。
為了測試的方便寫了個圖形化的解密軟件。

技術分享圖片

nc 測試之

技術分享圖片
正確。

總結

不要怕麻煩,一些東西盡早腳本化,自動化,減輕工作量。逆向分析,搜索關鍵字,定位關鍵代碼。

參考

http://www.vuln.cn/6100

http://www.freebuf.com/articles/terminal/106673.html

安卓脫殼&&協議分析&&burp輔助分析插件編寫