• MAC App破解之路十二 微信开发者工具


    最近用微信开发者工具很不爽,想看下底层的代码结果显示: /// The code has been hided by Wechat Devtools

    破解目的:就是能够显示所有源码。

    接下来开始破解过程:

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

    分析: 从本质上讲微信开发者工具就是一个浏览器,访问一个web服务器地址,呈现相应的内容。 

    关于显示源码这块有两种可能: 

    1.  每次点击的时候,都会想web服务器请求对应资源,如果发现是运行系统相关文件名,那么直接返回字符串 /// The code has been hided by Wechat Devtools

    2. 运行的微信开发者工具前端时已经有了所有源码资源,只不过如果查询的是相应文件名,则不显示源码,用/// The code has been hided by Wechat Devtools 替换。

    开始验证, 因为本地服务器是http, 使用我wireshark流量分析,就可以知道使用的哪一种了。

    从wireshark流量分析来看,微信开发者工具使用的是第二种, 运行所有的代码已经在前端了,只不过要显示时,做了一下替换。

    如果要一劳永逸,当然是修改工具前端的代码,不然它做替换。 修改源码需要先hook调checkSIgn那块代码,之后修改才能生效。

    但是我突然不想这么干了, 一是开发者工具经常要升级, 每次修改一次很麻烦,况且我仅仅是想获取源码,并不想做其他的小动作。

    关于这个事情,直接写一个http工具获取源码,要简单的多。

    随便写一下http工具居然不OK,会校验token, 无语了。 那就加上token吧

     虽然工具是写出来了,但是这个工具相当于一次性的, 因为微信开发者工具前端不支持设置代理, 只能使用wireshark获取token,   拿到token还得改源码,然后运行。整个过程太他妈繁琐。 

    附上源码:

    const axios = require('axios');
    
    const wechatdevtools = "1.05.2102020";
    const port = 61151;
    const token = "9f6c3274a3b2349bc2ad77af8254ca2f";
    const ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.3 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1 wechatdevtools/${wechatdevtools} MicroMessenger/7.0.4 Language/zh_CN webview/20000 gameservice port/${port} token/${token}`;
    
    const BaseUrl = `http://127.0.0.1:${port}`;
    
    const kReq = {
      asdebug : '/game/__dev__/asdebug.js'
    }
    const headers = {
      'User-Agent': ua,
      Refere:'https://servicewechat.com/wx418ad5760dd5bcba/devtools/page-frame.html',
      'Accept-Encoding': 'gzip,deflate, br',
    }
    
    axios.get(BaseUrl + kReq.asdebug, {headers}).then((data) => {
      console.log(data);
    }).catch((err) => {
      console.error(err);
    });

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

    你既然检验这么严格,就不要怪我对你动刀了。  开始修改源码之旅。  

    对/Applications/wechatwebdevtools.app/Contents/Resources/package.nw/core.wxvpkg 进行解包。

    找到对应替换逻辑:

    猜测e,r 就是URL路径。  返回出去的是一个字符串。 从这个逻辑可以看出,还不能断然确实修改它能不能生效。

     有一段逻辑是 _ || h.push(hide.......).  而下划线这个变量是global.appConfig.isDev 赋值的

    那么大胆猜测global.appConfig.isDev 这个变量。。   我不能直接修改这个变量,因为这个isDev跟很多逻辑有关系, 我注意到asdebug文件字符串push了两次,

    那么直接修改hideSourceContentInDevtools这个函数应该可以生效吧。 

    1 setTimeout(function (){
    2   const xxx = require("../../../core.wxvpkg/5cd41701460b6113adbf1f8f645cdd15.js");
    3   ["hideSourceContentInDevtools"].forEach(
    4     (k) => xxx[k] = function (e, r, n = !0) {
    5       return n ? `<script></script>` : '';
    6     }
    7   );
    8 }, 1000);

    直接将这段逻辑放到/Applications/wechatwebdevtools.app/Contents/Resources/package.nw/js/unpack/hackrequire/index.js文件, 如图:

    显示文件效果图, 妈妈再也不担心看不到代码了。。。

    我,我得意的,,,完美收工。。。。。

  • 相关阅读:
    六 .Flask 案例
    五 .Flask 蓝图(文件目录结构)
    四 .Flask 模板 中间件 特殊装饰器 CBV 正则 基础知识(使用)
    七 .Django 模板(template)
    三 .Flask 登录案例认证装饰器 session
    二 .Flask 配置文件 路由 视图 请求 响应 cookie session 闪现 基础知识(使用)
    一 .Flask介绍和基本使用
    一 .微信消息推送
    二 .redis在django中使用
    一 python+redis使用(字典 列表)
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/14906380.html
Copyright © 2020-2023  润新知