绕过微信 web 调试工具遇到的 url 安全限制

通过之前很火的微信小程序的消息,我才知道微信出了个 web 开发者工具。为了能让自己在做微信外包中少掉些头发,果断下载了这个神器。咦,只有 Windows 版和 Mac 版,看来腾讯还是不疼 Linux 呢。安装过程就发现程序的结构有些眼熟。这不就是 nw.js 么!这腾讯不支持 Linux,是在嘲笑 nw.js 的 Linux 支持不完整还是真的认为 Linux 用户没人权呢。不过,我猜测是因为打包安装的程序没有提供 Linux 版,Linux 用户哪里需要 GUI 呀(笑)。

安装完成马上就迫不及待地打开测试。界面布局和我测试专用的 Chrome Canary 一模一样,这不就是套个壳么(摔)。算了,我还是姑且相信腾讯一次,万一内核是 X5 就能让我觉得心满意足了(?求证)。然后习惯性的在地址栏输入 http://www.baidu.com/ (非广告),回车。哇,显示和我测试专用的 Chrome Canary 一模一样,这不就是套个壳么(摔)。好了,进入正题。输入好平时测试用的 url,回车。。。。。。诶,怎么没反应。回车,回车,回车。。。。。诶,试了其他常用的网站都能用,怎么我的网站就加载不了,甚至让我开始怀疑自己的网站宕机了。随手编造测试了一些域名,瞬间就理解了。腾讯绝对限制了域名!这个的可能性比我的网站宕机大 10000 倍。明明是开发者工具,结果开发者自己的域名被限制加载不了,神 tmd 调试工具。等等,我记得安装的时候解压出来一堆 js 文件。想到这里,马上就打开了安装目录。所有的文件都一览无遗,没有打包,js 没有被混淆。哈哈哈,这么低的 hack 门槛,这不是诱惑我去破解脚本么(笑)。说干就干。

首先定位可疑文件。从 components/addressbar.jscomponents/Urlbar.js,从 actions/webviewActions.jsstroes/webviewStores.js(stroes 是啥意思没百度出来,一定是我英语太弱了),最后确定了罪魁祸首就在 stroes/webviewStores.js 里面。 webviewStores.js 微信 webview 在加载之前会向微信服务器请求 A8key,如果返回的结果表示请求出错,则会有不加载的情况出现。微信开发者工具的 log 正好验证了我的想法(有个 error 报错呀,联想到文件中奇怪的大小写命名和拼写 typo,有些无法想象这个工具的代码质量)。 微信web开发者工具.log 微信服务器针对我的域名返回了 “errcode”: -2005,在相应的 js 文件中可以查到该错误代码的含义。 errcodeConfig.js

所以,只要修改那段代码,排除针对 “errcode”: -2005 的限制,就可以绕过安全限制。实际修改的部分也很简单。下面只是我的修改方法。 改后webviewStores.js

好了,可以愉快地去调试外包网页了。不过,既然 js 可以很容易地修改,那么可以 hack 的东西当然不止这一点,就交给大家自己去发掘了。

文中所使用的微信 web 开发者工具版本为:(2016.05.19) 0.7.0,虽然没到 1.0 正式版,不过还是希望腾讯老爷能多上上心,至少把 typo 消除了啊,不然我看着浑身难受。

2017.03.15 更新

评论里有人反映说照着文章改完了之后会不断刷新,试了下把下面的“ || s === errcodeConfig.ILLEGAL_URL”删掉就好了。

(咦,难道我当时没注意到,不记得了)

*****
Written by 空鱼 on 29 September 2016
        ト 、.  /|
         \\|::|/|,. -‐‐- 、.,_
        ,>''"´:::::::::::::::::::::::`ヽ.
        /:::/::::::::::/|::::::::::::::::::::::`ヽ.
       ./:::/::::::::::/‐ヘ:::::::ト 、ー-::\`フ
      ,'<:;_/:::::::/ __, \| 、_\::::::::>
     ,.|::::∠;:::::::xーt--,   -tー‐ァ7´| 
     !:::::::rレ∨.  `‐'    `ー' ::八 
  -ト 、__人::::ゝ'ヘ              |:::_;:>
  人::::::::::::;>:::;ハ、     ,   .人:|  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄