最近用微信開發者工具很不爽,想看下底層的代碼結果顯示: /// The code has been hided by Wechat Devtools
破解目的:就是能夠顯示所有源碼。
接下來開始破解過程:
===============================
分析: 從本質上講微信開發者工具就是一個瀏覽器,訪問一個web服務器地址,呈現相應的內容。
關於顯示源碼這塊有兩種可能:
1. 每次點擊的時候,都會想web服務器請求對應資源,如果發現是運行系統相關文件名,那么直接返回字符串 /// The code has been hided by Wechat Devtools
2. 運行的微信開發者工具前端時已經有了所有源碼資源,只不過如果查詢的是相應文件名,則不顯示源碼,用/// The code has been hided by Wechat Devtools 替換。
開始驗證, 因為本地服務器是http, 使用我wireshark流量分析,就可以知道使用的哪一種了。
從wireshark流量分析來看,微信開發者工具使用的是第二種, 運行所有的代碼已經在前端了,只不過要顯示時,做了一下替換。
如果要一勞永逸,當然是修改工具前端的代碼,不然它做替換。 修改源碼需要先hook調checkSIgn那塊代碼,之后修改才能生效。
但是我突然不想這么干了, 一是開發者工具經常要升級, 每次修改一次很麻煩,況且我僅僅是想獲取源碼,並不想做其他的小動作。
關於這個事情,直接寫一個http工具獲取源碼,要簡單的多。
隨便寫一下http工具居然不OK,會校驗token, 無語了。 那就加上token吧
雖然工具是寫出來了,但是這個工具相當於一次性的, 因為微信開發者工具前端不支持設置代理, 只能使用wireshark獲取token, 拿到token還得改源碼,然后運行。整個過程太他媽繁瑣。
附上源碼:
const axios = require('axios'); const wechatdevtools = "1.05.2102020"; const port = 61151; const token = "9f6c3274a3b2349bc2ad77af8254ca2f"; const ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.3 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 wechatdevtools/${wechatdevtools} MicroMessenger/7.0.4 Language/zh_CN webview/20000 gameservice port/${port} token/${token}`; const BaseUrl = `http://127.0.0.1:${port}`; const kReq = { asdebug : '/game/__dev__/asdebug.js' } const headers = { 'User-Agent': ua, Refere:'https://servicewechat.com/wx418ad5760dd5bcba/devtools/page-frame.html', 'Accept-Encoding': 'gzip,deflate, br', } axios.get(BaseUrl + kReq.asdebug, {headers}).then((data) => { console.log(data); }).catch((err) => { console.error(err); });
==============================================================================
你既然檢驗這么嚴格,就不要怪我對你動刀了。 開始修改源碼之旅。
對/Applications/wechatwebdevtools.app/Contents/Resources/package.nw/core.wxvpkg 進行解包。
找到對應替換邏輯:
猜測e,r 就是URL路徑。 返回出去的是一個字符串。 從這個邏輯可以看出,還不能斷然確實修改它能不能生效。
有一段邏輯是 _ || h.push(hide.......). 而下划線這個變量是global.appConfig.isDev 賦值的
那么大膽猜測global.appConfig.isDev 這個變量。。 我不能直接修改這個變量,因為這個isDev跟很多邏輯有關系, 我注意到asdebug文件字符串push了兩次,
那么直接修改hideSourceContentInDevtools這個函數應該可以生效吧。
1 setTimeout(function (){ 2 const xxx = require("../../../core.wxvpkg/5cd41701460b6113adbf1f8f645cdd15.js"); 3 ["hideSourceContentInDevtools"].forEach( 4 (k) => xxx[k] = function (e, r, n = !0) { 5 return n ? `<script><\/script>` : ''; 6 } 7 ); 8 }, 1000);
直接將這段邏輯放到/Applications/wechatwebdevtools.app/Contents/Resources/package.nw/js/unpack/hackrequire/index.js文件, 如圖:
顯示文件效果圖, 媽媽再也不擔心看不到代碼了。。。
我,我得意的,,,完美收工。。。。。