文章目录
微信开发工具 WeChatOpenDevTools-Python 版:开启小程序与内置浏览器 F12 调试功能
一、引言
在微信小程序抓包过程中,调试是不可或缺的环节。为了更方便地进行调试,JaveleyQAQ
开源了WeChatOpenDevTools - Python
项目,它将原本志远大佬用Node
实现的功能改用Python 3
重写,还简单实现了一些自动化问题,为开发者提供了极大的便利。本文将详细介绍该项目的使用方法,帮助你轻松开启小程序和微信内置浏览器的F12
调试功能。
二、项目概述
这个项目主要功能是开启微信小程序和微信内置浏览器的F12
调试功能,支持多个微信版本,包括Windows
和Mac x64
版本。项目的核心代码主要包含在main.py、utils
目录下的文件以及scripts
目录下的hook.js
文件中。
支持版本列表
以下是该项目支持的部分版本列表:
- 注意,如果你的版本如果不符合下列条件,需要使用控制面板卸载之前的微信版本,不要直接覆盖安装。
Windows 微信版本 | 小程序版本 | 是否为最新版 |
---|---|---|
11275_x64 | ✅ | |
11253_x64 | ✅ | |
11205_x64 | ✅ | |
11159_x64 | ✅ | |
3.9.10.19_x64 | 9129_x64 | ✅ |
3.9.10.19_x64 | 9115_x64 | ✅ |
3.9.10.19_x64 | 8555_x64 | ❌ |
3.9.10.19_x64 | 9105_x64 | ❌ |
3.9.9.43_x64 | 8555_x64 | ❌ |
3.9.9.43_x64 | 9079_x64 | ❌ |
对于Mac x64
微信版本:
Mac x64 微信版本 | 是否为最新版 | 运行方式 |
---|---|---|
MacWechat/3.8.8(0x13080811) | ✅ | 源码运行 |
MacWechat/3.8.8(0x13080812) | ✅ | 源码运行 |
三、使用方法
(一)开启小程序 F12
1. 准备工作
- 安装 Python 3:确保你的系统已经安装了
Python 3
版本。 - 下载项目:可以从WeChatOpenDevTools - Python下载项目源码,或者直接下载编译好的
exe
文件WeChatOpenDevTools_64.exe。 - 个人推荐直接下载编译好的exe即可,下面就都不用看了。
2. 安装依赖
打开命令行工具,进入项目目录,执行以下命令安装依赖:
pip3 install -r requirements.txt
3. 运行程序
运行前先启动微信(建议使用小号,避免被封),然后在命令行中执行以下命令:
python main.py -x
四、代码解析
(一)main.py
main.py是项目的入口文件,主要负责解析命令行参数,并根据不同的参数调用相应的功能函数。以下是部分代码示例:
from argparse import RawTextHelpFormatter
from utils.commons import Commons
from utils.banner import generate_banner
from utils.colors import Color
import argparse
def print_colored_message(message, color):
print(color + message + Color.END)
def main():
HELPALL = """
请选择要执行的方法:
[+] python main.py -h 查看帮助
[+] python main.py -x 开启小程序F12
[+] python main.py -c 开启内置浏览器F12
[+] python main.py -all 开启内置浏览器F12与小程序F12
"""
parser = argparse.ArgumentParser(description=HELPALL, formatter_class=RawTextHelpFormatter)
parser.add_argument('-x', action='store_true', help='开启小程序F12')
parser.add_argument('-c', action='store_true', help='开启内置浏览器F12')
parser.add_argument('-all', action='store_true', help='开启内置浏览器F12与小程序F12')
args = parser.parse_args()
if args.x:
commons.load_wechatEx_configs()
elif args.c:
commons.load_wechatEXE_configs()
elif args.all:
commons.load_wechatEXE_and_wechatEx()
else:
print_colored_message(HELPALL, Color.RED)
if __name__ == "__main__":
generate_banner()
commons = Commons()
main()
(二)utils/wechatutils.py
该文件主要包含了一些与微信进程相关的工具函数,如获取微信进程的PID
和版本号、查找微信安装路径等。以下是部分代码示例:
import os,re,sys
import psutil,subprocess
from utils.colors import Color
class WechatUtils:
def __init__(self):
self.configs_path = self.get_configs_path()
self.version_list = self.get_version_list()
def get_configs_path(self):
current_path = os.path.abspath(__file__)
relative_path = '../configs/'
return os.path.join(os.path.dirname(current_path), relative_path)
def get_version_list(self):
configs_path = self.configs_path
version_list = os.listdir(configs_path)
versions_list = [int(file.split('_')[1]) for file in version_list if file.startswith('address_')]
return versions_list
def is_wechatEx_process(self, cmdline):
process_name = "WeChatAppEx"
return cmdline and process_name in cmdline[0] and "--type=" not in ' '.join(cmdline)
def get_wechat_pids_and_versions(self):
processes = (proc.info for proc in psutil.process_iter(['pid', 'cmdline']))
wechatEx_processes = (p for p in processes if self.is_wechatEx_process(p['cmdline']))
wechat_instances = []
for process in wechatEx_processes:
pid = process['pid']
version = self.extract_version_number(process['cmdline'])
if version in self.version_list:
wechat_instances.append((pid, version))
return wechat_instances
(三)scripts/hook.js
该文件是Frida
的脚本文件,主要用于注入微信进程,实现对小程序和内置浏览器的F12
调试功能的开启。以下是部分代码示例:
//获取WeChatAppEx.exe的基址
var module = Process.findModuleByName("WeChatAppEx.exe") || Process.findModuleByName('WeChatAppEx Framework')
var base = module.base;
Object.keys(address).forEach(key => {
key != "Version" ? address[key] = base.add(address[key]) : false
});
send("[+] WeChatAppEx 注入成功!");
send("[+] 当前小程序版本: " + address.Version);
send("[+] 等待小程序加载...");
function readStdString(s) {
var flag = s.add(23).readU8()
if (flag == 0x80) {
// 从堆中读取
var size = s.add(8).readUInt()
return s.readPointer().readUtf8String(size)
} else {
// 从栈中读取
return s.readUtf8String(flag)
}
}
五、总结
WeChatOpenDevTools - Python
项目为微信开发者提供了一种简单、便捷的方式来开启小程序和微信内置浏览器的F12
调试功能。通过本文的介绍,你可以轻松掌握该项目的使用方法,并深入了解其代码实现原理。希望这个项目能帮助你在微信开发过程中更加高效地进行调试。