1. 程式人生 > 其它 >MAC App破解之路十二 微信開發者工具

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檔案, 如圖:

顯示檔案效果圖, 媽媽再也不擔心看不到程式碼了。。。

我,我得意的,,,完美收工。。。。。