思路是這樣的,當微信收到撤回消息的請求后,將撤回的響應包改掉,這樣微信就不能撤回了,微信APP比較難搞,就直接用微信網頁版抓包修改吧。
關於微信網頁版的抓包其實也比較復雜,主要是常常抓包失敗,網頁無法打開(支付寶、淘寶也是,貌似它們的https協議更安全,不好代理,求解),為此專門做了個vmware虛擬機,配置是xpsp3+ 搜狗瀏覽器6.3.8.22061+fiddler v4.6.2.32002。
打開fiddler,設置https,如圖:
打開搜狗瀏覽器設置代理服務器:
在瀏覽器里訪問https://wx2.qq.com/?&lang=zh_CN,瀏覽器顯示如下截圖,表示代理成功:
此時fiddler顯示如下,表示抓包成功:
微信手機端掃描二維碼成功登陸:
Fiddler截獲數據包如下所示:
介紹一下收到消息跟撤回消息的區別:在收到消息時,微信響應包中MsgType=1,Content是介紹到的消息:
在收到撤回消息時MsgType=10002,Content是撤回的提示信息:
要想查看撤回的消息,只需要將”MsgType”: 10002替換成”MsgType”: 1,並將Content 替換成友好信息就行了。
下邊編輯fiddler腳本,自動替換指定響應數據:
要想編輯fiddler腳本,要下載一個fiddler腳本編輯插件,點擊fiddler->Rules->Customize Rules, 按照提示安裝插件,重啟fiddler,截圖如下:
編輯fiddler腳本,使其在響應包中自定替換指定內容,直接編輯函數,替換如下所示:
static functionOnBeforeResponse(oSession: Session) {
if (m_Hide304s && oSession.responseCode== 304) {
oSession["ui-hide"] ="true";
}
if(oSession.GetResponseBodyAsString().Contains('"MsgType": 10002')){
// Remove any compression orchunking
oSession.utilDecodeResponse();
var oBody =System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
// Replace all instances of the DIVtag with an empty string
//var oRegEx =/<div[^>]*>(.*?)<\/div>/gi;
//oBody = null;
varstrBody=oBody.replace('"MsgType": 10002','"MsgType": 1');
// Set the response body to thediv-less string
//oSession.utilSetResponseBody(strBody);
var resourse=/"Content":"(.*)"/gi;
var resourse1='"Content":"以上為撤回消息"'; //
varstrBody=strBody.replace(resourse,resourse1);
//FiddlerObject.alert(strBody);
oSession.utilSetResponseBody(strBody);
}
}
保存,大功告成!!
測試一下,先發送一段文字,然后撤回,效果如下所示:
查看fiddler中的數據包,已經直接將撤回消息數據包替換掉了:
這樣,微信網頁版一直開着,就可以查看所有被撤回的消息














