js 逆向感想
最近在寫一個工具,遠程輸出功能,主要用在微信小游戲中, 這個玩意最大瓶頸時使用使用https, 且域名備案, 且在wp管理后臺添加這個域名。
因為輸出需要寫URL。我想當然想繞過這個域名檢查的限制。
自認為自己是破解高手,破解了很多游戲, 唯獨破解不了微信小游戲的基礎庫。
原因是微信小游戲對底層所有js對象設置了configurable, writeable 都為false,并且使用了set get等我經常用的hook。
微信小游戲基礎庫也是這個伎倆, 它那個也是算是做了一層保護層的hook。 導致你后期無論怎么hook,都繞開不了configurable的限制。
Reflex, Proxy均運用上了,類似 propDesc.set.call(propDesc.get(123), 123); 突破它的閉包屏障(環境)。 最終無論怎么突破hook, 最終的目的都是需要修改它的原始屬性值,指向自己的方法。
結論: 常規的溫柔破解方式對微信小程序基礎庫,無效。 各種shellcode也無效!使用無法逃脫configurable的限制! 這個是我破解了2天得出血淚結論。
當然我不是對它沒有招了, 只是比較粗魯:
1. Frida hook v8, 使其configurable保護無效
2. frida hook 微信小程序加載, 在這個之前一段自己hook的邏輯, 優先保護代碼的執行。 后者直接替換保護代碼
3. 修改小程序對包體的驗證簽名邏輯后,直接修改publicLib.wxapkg. 然后重新打包
它的保護層代碼如下, 任何hook都對它無效。只能硬編碼修改才能繞過這個限制。 當然它只保護了這個基礎庫本身, 并沒有對游戲進行防護!

====到了晚上=============
有點不死心, 功夫不負有心人, hook成功(PS: 截圖只是冰山一角) 看樣子項目越大,一定會有漏洞, 不可能百分百無漏洞


浙公網安備 33010602011771號