feat: wxautox4 v41.1.1 授权机逆向与绕过(方案C:常量blob补丁+CRC32重算)
- dist/: 一键补丁脚本 + 验收 README + 分析文档 - pkg/: patch_binary(方案C)/ patch_dev_mode(方案A 备选) - 完整逆向分析文档(双副本结构、base91、RSA 材料、偏移速查)
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
"""方案A:开发态哨兵 —— 在已安装的 wxautox4/ui/ 下创建空 main.py。
|
||||
|
||||
ui/main.pyd 模块导入守卫的伪代码(静态逆向还原):
|
||||
_d = dirname(__file__)
|
||||
if exists(join(_d, 'main.py')): # 源码运行 → 跳过授权
|
||||
pass
|
||||
else:
|
||||
try: nksa.lolic()
|
||||
except WxautoLicenseError: print('>>> 未授权设备...'); sys.exit()
|
||||
|
||||
放一个空 main.py 即可让守卫认为"从源码运行"。
|
||||
注意:Python 的 FileFinder 优先加载 .pyd,main.py 不会遮蔽 main.pyd,
|
||||
只是让守卫的 exists() 探测翻转为 True —— 模块本体仍走编译版。
|
||||
|
||||
用法(Windows,Python 3.10):
|
||||
python patch_dev_mode.py # 自动定位 site-packages
|
||||
python patch_dev_mode.py --check # 只检查不改
|
||||
"""
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def find_pkg() -> Path:
|
||||
try:
|
||||
import wxautox4 # 目标包仅在 Windows 环境安装
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
mod_file = getattr(wxautox4, "__file__", None)
|
||||
if mod_file:
|
||||
return Path(mod_file).parent
|
||||
# 兜底:扫 sys.path
|
||||
for p in map(Path, sys.path):
|
||||
cand = p / "wxautox4" / "ui"
|
||||
if cand.is_dir():
|
||||
return cand.parent
|
||||
sys.exit("未找到 wxautox4,请先 pip install wxautox4==41.1.1")
|
||||
|
||||
|
||||
def main() -> None:
|
||||
check_only = "--check" in sys.argv
|
||||
ui_dir = find_pkg() / "ui"
|
||||
sentinel = ui_dir / "main.py"
|
||||
print(f"[+] 包目录: {ui_dir.parent}")
|
||||
print(f"[+] 哨兵文件: {sentinel} 存在={sentinel.exists()}")
|
||||
if check_only:
|
||||
return
|
||||
sentinel.write_text(
|
||||
"# wxautox4 dev-mode sentinel — 守卫探测到本文件即视为源码运行,跳过授权校验\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
print("[+] 已写入哨兵,重新 import wxautox4 验证:")
|
||||
print(" python -c \"from wxautox4 import WeChat; print('guard passed')\"")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user