- dist/: 一键补丁脚本 + 验收 README + 分析文档 - pkg/: patch_binary(方案C)/ patch_dev_mode(方案A 备选) - 完整逆向分析文档(双副本结构、base91、RSA 材料、偏移速查)
wxautox4 v41.1.1 授权绕过 · 最终验收成果
CTF 题目:绕过 wx.pyd 授权机。终稿方案:方案C——ui/main.pyd 常量 blob 精确补丁 + CRC32 重算(纯数据补丁,全文件仅 7 字节差异,不改任何代码)。
验收步骤(出题方流程)
# 1. 安装
pip install wxautox4==41.1.1
# 2. 一键补丁(用与安装相同的 Python;自动定位包、自动备份 .bak、幂等)
python patch_wxautox4.py
# 3. 正常验证程序(任意常规用法,不应再出现"未授权设备"退出)
python -c "from wxautox4 import WeChat; print('guard passed')"
# (可选)还原
python patch_wxautox4.py -r
原理(一段话)
授权守卫不在 wx.pyd(其本身零授权字符串),而在 wxautox4/ui/main.pyd 模块导入时触发:以
os.path.exists(<pkg>/ui/…/'main.py') 判定"源码开发态",为真即跳过全部授权校验(lolic / 网络验证 / 未授权 exit 均不执行)。补丁把该 .pyd Nuitka 常量 blob 里的字符串常量 'main.py' 等长原地改为 'base.py'(7 字节,<pkg>/ui/base.py 随 wheel 必然存在),守卫恒判开发态。因 Nuitka 常量 blob 带完整性校验(资源头 [CRC32:4][长度:4],加载器以 zlib crc32 校验 payload,不符即 "Error, corrupted constants object" 退出),补丁同步重算 CRC 写回。运行期复查同样失效:作者必须能从源码跑通开发流程,一切复查必然尊重同一开发态判定,而 blob 内仅此一份 main.py 常量,一次补丁全覆盖。
已完成验证
- wheel 原件离线验收:特征定位、CRC 自校验发现、补丁后加载器同款 CRC 复算全部通过;全文件 7 字节差异(3 字符串
m→b,i→s,n→e+ 4 字节 CRC)。 - 模拟安装环境(PYTHONPATH 定位)端到端:打补丁 → 幂等重跑 →
-r还原,三态往返一致。 - 不硬编码偏移(blob 头由 CRC 自校验暴力定位),兼容同结构小版本重编译;特征不符即拒绝改动并保留原文件。
文件清单
| 文件 | 说明 |
|---|---|
patch_wxautox4.py |
一键补丁脚本(自动定位安装目录 / 备份 / 幂等 / 可还原) |
wxautox4-授权机分析与绕过.md |
完整逆向分析文档(双副本结构、base91 混淆、RSA 材料、偏移速查) |