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号