最近一直在破解某小游戲,且已經達到了一定目的。
關於wxapkg文件解壓和壓縮,我自己本人擴展了一下工具。
附上鏈接:https://github.com/dzqdzq/unwxapkg
安裝方式: npm i git@github.com:dzqdzq/unwxapkg.git -g
修改js代碼后, 然后壓縮,替換原來的wxapkg.
因為不能在開發者工具里運行看日志,也不能在logcat中看微信小程序的輸出日志。 於是開發了一個遠程輸出日志的功能:
服務器代碼:
const express = require('express') const app = express() const port = 3000 app.use(express.json()) app.post('/echo', (req, res) => { let {m, a} = req.body; let f = console[m]; if(f){ f.apply(console, a); } res.sendStatus(200); }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) })
客戶端hook console 代碼:
crayon.framework.dzqLog = (method,args)=>{ wx.request({ url:"http://192.168.31.158:3000/echo", data:{ "m":method, a:args}, method:'post', header:{ "Content-Type":"application/json" }, success:function(res){ // crayon.framework.Toast.Make('請求成功').Show() }, fail:function(err){ crayon.framework.Toast.Make(err).Show() } })}; console.log = function(){ crayon.framework.dzqLog('log', Array.from(arguments)) } console.info = function(){ crayon.framework.dzqLog('info', Array.from(arguments)) } console.error = function(){ crayon.framework.dzqLog('error', Array.from(arguments)) } console.warn = function(){ crayon.framework.dzqLog('warn', Array.from(arguments)) }
將改好的代碼重新壓縮成wxapkg文件。 不能直接替換原文件,因為直接替換無效,每次啟動小程序,微信會校驗md5文件信息。 我的方式是文件做了一個監聽,等md5檢驗完后,再讓微信讀取我修改的文件。
打印日志杠杠滴
==============2021-03-25----------
以上的日志,我是在真機上跑的, 可以用IP。 今天我發現在模擬器上居然不OK。 提示 fail url not in domain list
當然, 這個並不能難住我。既然提示url沒有配置, 那么就直接使用用domain list里的域名, 然后在中間做一個代理, 如果是echo, 那么就走本地, 其他接口就正常訪問服務就行。
至於有哪些域名是已經配置了的, 在代碼里肯定有交待, 直接全局搜索 https:// 就完事, 隨便整一個域名寫上,沒啥難度。
配置charles代理 android7以上:
1, 下載chls.pro/ssl 直接到默認目錄: /data/media/0/Download
2, 將證書再導出到Mac電腦
adb pull /data/media/0/Download/downloadfile-1.crt . openssl -subject_hash_old -in downloadfile-1.crt |head -1
3. 將得到hash值3be31b03
4. 將下載的證書移動到根證書目錄並重命名
/data/media/0/Download/downloadfile-1.crt /system/etc/security/cacerts/3be31b03.0
5. 至此就可以拿到任何app的https內容了