MAC App破解之路十二 微信開發者工具
最近用微信開發者工具很不爽,想看下底層的程式碼結果顯示:/// 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檔案, 如圖:
顯示檔案效果圖, 媽媽再也不擔心看不到程式碼了。。。
我,我得意的,,,完美收工。。。。。