以羊了個羊為例,淺談小程序抓包與響應報文修改
在前面的文章中,我們一起製作了一個天眼查小程序,其中涉及到了微信小程序的抓取過程,應眾多讀者的要求,今天我們一起來看看微信小程序的抓包流程
本來是想以天眼查小程序作為抓包主體的,但是這兩天羊了個羊實在是太火了,沒辦法,咱們也來追一追熱點,今天我們的目標程序就是羊了個羊了!
而且從9月20號的某個時刻開始,羊了個羊的接口正式進入到V2時代,也就是相關的通關接口進行了加密處理,請求時需要攜帶參數 MatchPlayInfo
,而該參數又是通過 JavaScript
的混淆代碼來處理的,所以導致一鍵通過程序都失效了,那麼咱們只能另尋出路了,修改 response 響應消息的方法也就應運而生!
MitmProxy 的使用
我們這裏使用的抓包程序是 MitmProxy,這是一個用 Python 編寫的工具,其安裝使用簡單,而且通過與自定義的 Python 腳本相結合,可以非常方便的篡改 request 和 response 內容
安裝配置 MitmProxy
安裝非常簡單,直接 pip 即可
pip install mitmproxy
完成安裝之後,我們就可以通過命令 mitmdump 來啟動了
可以看到,以上面的命令啟動之後,會在本地啟動一個監聽了8080端口的程序,這個就是我們的抓包代理進程了
設置手機代理
這裏我們需要保證手機與電腦處於同一個 WiFi 網絡之中,我們通過命令 ipconfig 獲取電腦的 IP 地址
然後我們進入手機的無線局域網設置當中,選擇當前連接的 WiFi,進行 HTTP 代碼設置
在代理設置中,服務器填寫電腦的 IP 地址,端口填寫 8080
這樣代理就設置好了
安裝證書
為了讓手機信任我們的代理,還需要安裝證書,通過手機瀏覽器訪問地址:http://mitm.it/
我們選擇對應的設備證書下載,比如 Apple 證書
下載完成後,通過設置,“已下載描述文件”進入安裝即可
至此,MitmProxy 以及手機側的配置都已經完成,我們可以進行抓包操作了
抓包操作
我們通過手機打開《羊了個羊》小程序,如果我們運行 mitmdump 命令的界面有數據包打印,那麼就説明我們的配置是成功的
下面我們來編寫 Python 腳本,來修改 response 內容
修改 response
通過抓包信息分析,我們知道返回地圖的接口是 map_info_ex 接口,其響應消息體的內容為
{"err_code":0,"err_msg":"","data": {"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"], "map_seed":[3622853803,3053757364,32667028,3621470055]}}
我們只需要把 map_md5 中的第二個值改為與第一個值一致就可以達到第二關的難度與第一關一樣的效果,下面就開始幹吧~
對於 MitmProxy 工具而言,我們有如下事件可以截取
針對 HTTP 生命週期的事件:
- 請求:def request(self, flow: mitmproxy.http.HTTPFlow):
- 響應:def response(self, flow: mitmproxy.http.HTTPFlow):
-
其它:
- def http_connect(self, flow: mitmproxy.http.HTTPFlow):
- def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
- def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
- def error(self, flow: mitmproxy.http.HTTPFlow):
這裏我們主要用到了響應事件,代碼如下
def response(flow): tmp_txt = {"err_code":0,"err_msg":"","data": {"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"], "map_seed":[3622853803,3053757364,32667028,3621470055]}} if "map_info_ex" in flow.request.url: info(str(response.text)) print(type(tmp_txt)) print(type(json.dumps(tmp_txt))) response.set_text(json.dumps(tmp_txt)) info(str(response.text))
我們判斷請求 url 中是否包含 map_info_ex
,如果包含,則篡改 response 信息
下面我們以如下命令重新啟動代理程序
這樣,當我通過第一關之後,進入第二關時,其難度還是與第一關一樣的,怎麼樣,開心吧!
當然我們還可以篡改其他接口,比如 rank 接口,話題接口等等,都可以輕鬆達到我們想要的目的,就不再一一贅述了
好了,這就是今天分享的全部內容,喜歡就點個贊吧~
本文由mdnice多平台發佈
- 天翼雲全場景業務無縫替換至國產原生操作系統CTyunOS!
- 以羊了個羊為例,淺談小程序抓包與響應報文修改
- 這幾種常見的 JVM 調優場景,你知道嗎?
- 如此狂妄,自稱高性能隊列的Disruptor有啥來頭?
- 為什麼要學習GoF設計模式?
- 827. 最大人工島 : 簡單「並查集 枚舉」運用題
- 手把手教你如何使用 Timestream 實現物聯網時序數據存儲和分析
- 850. 矩形面積 II : 掃描線模板題
- Java 併發編程解析 | 基於JDK源碼解析Java領域中的併發鎖,我們可以從中學習到什麼內容?
- 【手把手】光説不練假把式,這篇全鏈路壓測實踐探索
- 大廠鍾愛的全鏈路壓測有什麼意義?四種壓測方案詳細對比分析
- 寫個續集,填坑來了!關於“Thread.sleep(0)這一行‘看似無用’的代碼”裏面留下的坑。
- 857. 僱傭 K 名工人的最低成本 : 枚舉 優先隊列(堆)運用題
- Vue3 實現一個自定義toast(小彈窗)
- 669. 修剪二叉搜索樹 : 常規樹的遍歷與二叉樹性質
- 讀完 RocketMQ 源碼,我學會了如何優雅的創建線程
- 性能調優——小小的log大大的坑
- 1582. 二進制矩陣中的特殊位置 : 簡單模擬題
- elementui源碼學習之仿寫一個el-switch
- 646. 最長數對鏈 : 常規貪心 DP 運用題