自定義腳本修改響應(yīng),從觀看數(shù)據(jù)到修改數(shù)據(jù)的調(diào)試

在網(wǎng)絡(luò)調(diào)試中,能抓到包只是第一步。
當(dāng)問題指向客戶端行為異常、狀態(tài)分支不符合預(yù)期,或者需要驗(yàn)證條件時(shí),只看請求和響應(yīng)已經(jīng)不夠了。

這類場景需要在數(shù)據(jù)返回給 App 之前,主動(dòng)改掉它。


不是所有抓包方式都能改響應(yīng)

在動(dòng)手之前,需要先知道一個(gè)條件,只有代理模式,才具備修改請求和響應(yīng)的能力。

原因是代理工具位于客戶端與服務(wù)器之間,請求和響應(yīng)在這里以明文形式經(jīng)過,才有機(jī)會被攔截和替換

設(shè)備直接抓包、數(shù)據(jù)流抓包,只負(fù)責(zé)采集和展示數(shù)據(jù),不參與轉(zhuǎn)發(fā),自然也無法修改。


從代理抓包開始修改

如果目標(biāo)是改響應(yīng),第一步必須讓流量經(jīng)過代理。

基本準(zhǔn)備流程

  • 在電腦上啟動(dòng)代理抓包工具
  • 確認(rèn)代理端口正在監(jiān)聽
  • 設(shè)備與電腦處于同一網(wǎng)絡(luò)
  • 在設(shè)備側(cè)配置代理地址與端口
  • 在設(shè)備上安裝并信任代理證書

完成后,可以先用瀏覽器訪問 HTTPS 頁面,確認(rèn)代理生效。


確認(rèn)目標(biāo) App 的流量進(jìn)入代理

接下來是一個(gè)關(guān)鍵驗(yàn)證步驟:

  • 在代理工具中觀察 Safari 請求
  • 再觸發(fā) App 中的業(yè)務(wù)操作

如果 App 的請求能出現(xiàn)在代理列表中,說明這條路徑成立,可以繼續(xù)。

如果沒有任何請求出現(xiàn),需要先解決流量是否經(jīng)過代理的問題,而不是直接寫腳本。


為什么要用腳本,而不是手工改包

在調(diào)試中,手工改包存在幾個(gè)限制:

  • 只能修改一次
  • 不適合重復(fù)請求
  • 容易引入操作誤差

自定義腳本的價(jià)值在于:

  • 對特定 URL 自動(dòng)生效
  • 每次請求行為一致
  • 便于反復(fù)驗(yàn)證客戶端邏輯

這也是代理工具支持腳本能力的原因。


在抓包大師中啟用攔截器

在抓包大師(Sniff Master)的 HTTPS 代理抓包模式 下,可以使用內(nèi)置攔截器來修改請求或響應(yīng)。

操作方式是:

  • 進(jìn)入 HTTPS 代理抓包界面
  • 在右側(cè)找到攔截器入口(插件圖標(biāo))
  • 打開攔截器日志窗口
  • 確認(rèn)攔截功能處于開啟狀態(tài)

只有在代理模式中,這個(gè)入口才會存在。


編輯攔截器腳本

在攔截器界面中,可以進(jìn)入腳本編輯區(qū)域。

腳本由固定結(jié)構(gòu)組成:

  • handleRequest(request)
  • handleResponse(response)
  • filterUrl()

函數(shù)名和參數(shù)不能修改,只能調(diào)整內(nèi)部邏輯。


攔截器

通過 URL 規(guī)則控制攔截范圍

在開始修改響應(yīng)之前,先限制作用范圍。

例如,只攔截某個(gè)接口:

function filterUrl() {
    return ["https://api.example.com/v1/*"]
}

這樣可以避免誤修改其他請求,便于觀察效果。


修改響應(yīng)內(nèi)容的具體方式

handleResponse 中,可以直接操作返回?cái)?shù)據(jù)。

例如,將接口返回的狀態(tài)字段強(qiáng)制改為成功:

function handleResponse(response) {
    if (!response.IsBase64Body) {
        let body = JSON.parse(response.Body)
        body.code = 0
        body.message = "ok"
        response.Body = JSON.stringify(body)
    }
    return response
}

保存后,腳本立即生效。


驗(yàn)證修改是否真正生效

驗(yàn)證方式不依賴主觀判斷,而是觀察結(jié)果:

  • App 是否進(jìn)入原本不會進(jìn)入的邏輯分支
  • UI 是否出現(xiàn)不同的展示狀態(tài)
  • 是否觸發(fā)了新的接口請求

如果行為發(fā)生變化,說明響應(yīng)已經(jīng)在代理層被替換。


與其他工具的配合方式

在實(shí)際調(diào)試中,自定義腳本往往不是單獨(dú)使用的。

常見組合包括:

  • 代理工具 + 攔截器:修改響應(yīng)驗(yàn)證邏輯
  • 抓包工具:確認(rèn)請求參數(shù)是否符合預(yù)期
  • 日志工具:對比客戶端內(nèi)部狀態(tài)變化

腳本負(fù)責(zé)修改數(shù)據(jù),其他工具負(fù)責(zé)觀察結(jié)果。


腳本失效時(shí)的排查方向

當(dāng)修改沒有生效時(shí),可以按順序檢查:

  • 當(dāng)前是否處于代理模式
  • 目標(biāo)請求是否命中 filterUrl
  • 響應(yīng)體是否為 Base64 編碼
  • App 是否存在本地緩存邏輯

每一步都可以通過抓包結(jié)果直接驗(yàn)證。


自定義腳本修改響應(yīng)是為了:

  1. 驗(yàn)證客戶端對異常數(shù)據(jù)的處理
  2. 模擬后端未就緒的接口
  3. 快速復(fù)現(xiàn)邊界條件

參考鏈接:https://www.sniffmaster.net/tutorial/zh/6/6.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容