• 微信开发者工具分析


    最近想用微信开发者工具运行别人开发好的小游戏。    其实是可以运行的,但是登录验证失败, 别人开发的小游戏appid, 和自己测试appid不一样就导致登录失败了。

    如果强行设置别人的appid, 开发者工具会报错, 类似的错误提示为:你不是别人的appid的开发者,  无法设置。

    登录是用wx.login API登录, 把这个API破解不久好了, 不必一定要设置成别人的appid. 

    将wxapkg解压出的game.js 进行拆分成多个文件。

    #coding:utf8 
    import os
    import re
    
    def writeFile(o):
      print(o[0])
      path = os.path.dirname(o[0])
      if path!='' and not os.path.exists(path):
        os.makedirs(path)
    
      with open(o[0], 'wb') as f:
        f.write(bytes(o[1], 'utf8'))
    
    def splitGame(filecon):
      if filecon is None:
        print ('文件内容为空')
        return ;
      obj = re.findall(r'W+define("(.*?)",Wfunction(require,Wmodule,Wexports){ 			
    (.*?)W			});
    ', filecon, re.M|re.DOTALL)
      if obj:
        for o in obj:
          writeFile(o)
      else:
        print ('没有匹配到')
    
    def readCon(name):
      with open(name, 'r') as f:
        return f.read()
    
    splitGame(readCon('game2.js'))
    # splitGame(readCon('subContext.js'))

    通过一系列断点, 找到了两处appid的地方, 

    asdebug.js文件:

    __devtoolsConfig.appid.     

     __wxConfig.accountInfo.appid

    看到这里,我已经懒得跟踪asdebug.js在哪了,  因为是全局变量,登录时候hook一下这两个变量就OK了.

    ============

    通过实际测试,发现该方案不行, 原因是asdebug是在VM中运行的,此window非game.js中的window。

     执行之后, hook的实际是 Window.0.  实际全局: __global.parent

    ==========

    通过一通捣腾之后, 发现即使hook修改了appid, 还不能通过验证, 原因调用wx.login的时候压根就没有appid信息。 

    调用wx.login的时候发送了一个websocket请求。 截图时返回的结果。

    服务进程:/Applications/wechatwebdevtools.app/Contents/Frameworks/nwjs Framework.framework/Versions/86.0.4240.111/Helpers/wechatwebdevtools Helper (Renderer).app/Contents/MacOS/wechatwebdevtools Helper (Renderer)

    有时间再调试下这个进程。 

    core.wxvpkg 文件有RSA-SHA1签名验证。理论上不可以修改。 但是把签名验证的方法hook掉,  还是可以的。  通过此法我修改了core.wxvpkg文件,发现可以正常运行了。

    wx.login本质上是调用http post接口

    获取code码:

    curl -H 'host: servicewechat.com' --data-binary '{"scope":["snsapi_base"]}' 'https://servicewechat.com/wxa-dev-logic/jslogin?_r=0.700034971603429&newticket=tl1MUNfnG4w1C9n8DyWnxbJB1XrdZuhXDwuC3FrmZag&appid=wx418ad5760dd5bcba&platform=0&ext_appid=&os=darwin&clientversion=1052102020'

    hook 输出日志

      setTimeout((function(){
        const request = require("request");
        var exec = require('child_process').exec;
    
        function dzqLog(m, a) {
          request({
            url: "http://localhost:3000/echo",
            method: "POST",
            json: true,
            headers: {
              "content-type": "application/json",
            },
            body: { m, a },
          });
        }
    
        try {
          var cmd = 'netstat -anp tcp | grep 3000 | grep LISTEN';
          exec(cmd, function(error, stdout, stderr) {
            // alert('stdout:' + stdout)
            console.log(String(stdout));
            if(String(stdout) !== ''){
              console.log = function () {
                dzqLog("log", Array.from(arguments));
              };
              console.error = function () {
                dzqLog("error", Array.from(arguments));
              };
              console.info = function () {
                dzqLog("info", Array.from(arguments));
              };
            }
          });
        } catch (error) {
          console.error(error.message);
        }
        
        // var oldRe = require;
      
        // require = function(s){
        //   console.log(s);
        //   return oldRe(s);
        // };
        // window && (window.require = require);
        // global && (global.require = require);
      
        // const xxx = require("../../../core.wxvpkg/e9e6a17485b9188c4c1ecada87e6b99c.js");
        // ["checkBufferSignature", "checkSignature", "checkFileMd5Signature"].forEach(
        //   (k) => {
        //     xxx[k] = () => true;
        //   }
        // );
      }), 1000);

    文件地址: /Applications/wechatwebdevtools.app/Contents/Resources/package.nw/js/unpack/hackrequire/index.js

    日志效果图:

    结论:

    wx.login 不可能破解,原因是code码是从服务器拿的,传入的appid.   服务器会校验你的微信和appid有没有开发或者测试权限(这个是项目管理员维护的), 也就是只能拿到你有权限的code码。想获取其他的appid的code码一律失败,

    报错:

    DEV_APP_NOT_BAND: -80002

    腾讯的安全做的真牛逼

  • 相关阅读:
    StringUtils工具类的使用
    struts2 文件上传和下载,以及部分源代码解析
    ios开发之猜数字游戏
    从epoll构建muduo-12 多线程入场
    POJ3009 Curling 2.0(DFS)
    IOS-4-面试题1:黑马程序猿IOS面试题大全
    Android-Universal-Image-Loader载入图片
    《UNIX环境高级编程》读书笔记 —— 文件 I/O
    畅通project再续 HDU杭电1875 【Kruscal算法 || Prim】
    轻松学习之Linux教程四 神器vi程序编辑器攻略
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/14699710.html
Copyright © 2020-2023  润新知