简单对QQ音乐吸附做渗透
最近玩三角洲被网传的OBS吸附打的仓库空空,实在是受不了了😫,于是奔溃的我开始刷哔哩哔哩,刚好刷到了一个人,刚发了20分钟热乎的视频,讲的是OBS吸附被ACE给大面积拉闸了,现在是QQMUSIC吸附时代,好奇的宝宝点进去一看,确实牛逼,F1 F2 F3按下去,直接可以锁头胸脚丫子~~~直呼牛逼,遂加了联系方式,把我拉到了一个qq群里,在群里我默默潜伏下来了......



当我打开这个软件以后获取到了一些好看的信息

当我通过反编译外挂软件以后,获取到卡密地址和IP地址


好啊好,找到你了。使用端口扫描发现了一些服务




点击第一个购买卡密后跳转到https://manfaka.com/shop/VIP001

使用dirsearch工具找到了它的网站后台地址为http://47.98.38.158:8080/#/login

访问http://47.98.38.158:9999,发现是一个分发卡密的地址

外挂软件反编译分析
# new-main(1).exe 反编译分析报告
**分析日期**:2026-05-26
**分析对象**:`new-main(1).exe`(251.27 MB)
**分析方法**:Nuitka 解包 + 字符串提取 + 静态分析
---
## 一、文件结构分析
### 1.1 基本信息
| 属性 | 值 |
|------|-----|
| 文件名 | new-main(1).exe |
| 文件大小 | 251.27 MB |
| 修改时间 | 2026-05-23 12:18:17 |
| 存放路径 | `C:\Users\YANGYING\Downloads\QQ音乐吸附软件\QQ音乐吸附软件\QQ音乐\SZJ511\` |
| 打包工具 | Nuitka(Python → EXE 编译器) |
| Python 版本 | 3.12(基于 python312.dll) |
### 1.2 解包后目录结构
Nuitka 解包后共提取出 **53 个文件**,核心组成如下:
```
files_v2/
├── new-main.dll # 主程序逻辑(20.71 MB),包含所有 Python 字节码
├── python312.dll # Python 3.12 运行时
├── bin_Config.ini # 配置文件(自瞄、压枪、卡密等参数)
│
├── [GUI 框架]
│ ├── tkinter 相关组件 (2gui.pyd, ttk 组件等)
│ └── ttkbootstrap (UI 美化库)
│
├── [AI / 机器学习]
│ ├── onnxruntime 相关 (odedata.pyd 等)
│ ├── PIL / Pillow (imaging.pyd, PIL__*.pyd)
│ └── CUDA/GPU 推理支持
│
├── [截图 / 屏幕捕获]
│ └── mss 相关 (FS.dll)
│
├── [网络通信]
│ ├── in_HPSocket4C.dll (高性能 Socket)
│ ├── bssl-3.dll (BoringSSL / 加密)
│ └── requests / urllib
│
├── [进程操作]
│ ├── n_HookProxy.dll (钩子代理)
│ ├── in_AsyncTask.dll (异步任务)
│ └── pymem / kernel32 (内存读写)
│
├── [加密模块]
│ ├── IPPWrapper.dll (Intel IPP 加密加速)
│ ├── PPWrapperx64.dll (加密包装器)
│ └── hashlib / binascii
│
├── [辅助组件]
│ ├── DataTransformex.exe
│ ├── DesktopDynamicLyric.exe
│ └── oPowerOff.exe
│
└── [其他 DLL 依赖]
├── bin_ExceptCatch.dll (异常捕获)
├── bin_GF.dll (图形滤镜)
├── bin_LAVAudio.dll (音频滤镜)
├── monFunction.dll (监控函数)
├── n_Common.dll (公共函数)
├── cl86t.dll (OpenCL 运行时)
├── vcruntime140.dll
└── 大量 .pyd 扩展模块
```
### 1.3 技术栈总结
| 层级 | 技术 / 库 | 用途 |
|------|----------|------|
| 打包 | Nuitka | Python 编译为独立 EXE |
| GUI | tkinter + ttkbootstrap | 程序界面 |
| AI 推理 | ONNX Runtime + YOLO | 屏幕目标检测 |
| 图像处理 | Pillow (PIL) | 截图预处理 |
| 屏幕捕获 | mss | 游戏画面截取 |
| 网络通信 | requests + HPSocket4C | 服务端 API 调用 |
| 进程操作 | pymem + kernel32 | 游戏进程内存读写 |
| 加密 | RC4 + MD5 + Base64 + XOR | 通信加密与签名 |
| 硬件加速 | CUDA + OpenCL | GPU 推理加速 |
---
## 二、应用程序识别
### 2.1 应用类型
该程序是一个 **FPS 游戏辅助工具(外挂)**,具备以下核心功能:
| 功能模块 | 说明 |
|----------|------|
| **自瞄(Aimbot)** | 基于 YOLO 目标检测模型自动锁定敌人 |
| **压枪(Recoil Control)** | 自动控制武器后坐力,稳定弹道 |
| **移动预测** | 根据敌人移动轨迹预判瞄准位置 |
| **截图触发** | 自动/手动截图功能 |
### 2.2 配置文件分析(bin_Config.ini)
```ini
[卡密]
key=e94083b72674b8b09c6e7c6734272e3e
[移动方式]
移动=0
[模型设置]
置信度=0.4
[自瞄设置]
范围=110
自瞄按键=2
自瞄按键2=1
X轴速度=2.0
Y轴速度=2.0
头部位置=0.2
胸部位置=0.4
脚部位置=1.0
[移动预测]
幅度=3
[压枪设置]
单次间隔=3
幅度=5
[截图模式]
模式=1
```
**配置参数解读**:
- **置信度 0.4**:YOLO 模型检测阈值,低于此置信度的目标将被忽略
- **范围 110**:自瞄锁定范围(像素)
- **自瞄按键 2 / 自瞄按键2 1**:触发自瞄的按键绑定(2 = 鼠标右键,1 = 鼠标左键)
- **头部位置 0.2 / 胸部位置 0.4**:瞄准优先级权重(头部 20%,胸部 40%,脚部 100%,值越小优先级越高)
- **压枪单次间隔 3**:每次压枪调整间隔(毫秒)
- **压枪幅度 5**:每次下压的像素幅度
- **截图模式 1**:截图模式选择
### 2.3 目标检测模型
程序内嵌 ONNX 格式的 YOLO 目标检测模型,通过 `onnxruntime` 进行推理,支持 CUDA GPU 加速。模型专门训练用于识别 FPS 游戏中的敌人角色。
---
## 三、激活机制详解
### 3.1 架构概述
程序采用 **服务端验证架构**,核心验证逻辑封装在 `ARSClient` 类中:
```
ARSClient
├── app_id # 应用标识
├── app_key # 应用密钥
├── ars_url # 验证服务器地址
├── access_token # 访问令牌
├── cloud_key # 云端密钥(从 /api/kvStore 获取)
├── timestamp_timeout # 时间戳超时阈值
├── max_heartbeat_errors # 最大心跳失败次数
└── heartbeat_error_count # 心跳失败计数器
```
### 3.2 核心成员
| 成员 | 类型 | 说明 |
|------|------|------|
| `app_id` | str | 应用唯一标识 |
| `app_key` | str | 应用通信密钥 |
| `ars_url` | str | 验证服务器 URL |
| `access_token` | str | 会话令牌 |
| `cloud_key` | str | 云端下发密钥(RC4 加解密用) |
| `timestamp_timeout` | int | 请求时间戳有效期 |
| `max_heartbeat_errors` | int | 最大心跳容错次数 |
### 3.3 服务器 API 端点
| 端点 | 方法 | 说明 |
|------|------|------|
| `/api/kvStore?appid=&key=` | GET | 获取云端变量(如 cloud_key) |
| `/api/getAppNotice?app_id=` | GET | 获取服务端公告 |
| `/api/heartbeat` | POST | 心跳保活(维持在线状态) |
| `/api/verifyCard` | POST | 验证卡密(核心鉴权) |
| `/api/unCard` | POST | 解绑卡密 |
### 3.4 卡密验证流程
```
1. 程序启动
│
2. 读取本地配置(bin_Config.ini 中的卡密 key)
│
3. ARSClient 初始化
├── 设置 app_id, app_key, ars_url
└── 从 /api/kvStore 获取 cloud_key(RC4 密钥)
│
4. 设备指纹生成
├── UUID4 生成随机 UUID
├── MD5 哈希
├── Hex 编码
└── 去除短横线(-)
→ 得到设备唯一标识 (imei)
│
5. 构造验证请求
├── 请求体:{"timestamp":"<当前时间戳>","card":"<卡密>","imei":"<设备ID>"}
├── 签名计算:compute_md5(参数) → rc4_encrypt(cloud_key, md5_result) → sign
└── POST /api/verifyCard
│
6. 服务端响应
├── code = "ok" → 验证成功,获取 access_token
└── code != "ok" → 验证失败,显示错误信息
│
7. 心跳维持
├── 定时 POST /api/heartbeat {data: <加密数据>, verify: <签名>}
└── 超过 max_heartbeat_errors 次失败 → 强制退出
```
### 3.5 请求参数详解
**verifyCard 请求体**:
```json
{
"timestamp": "<Unix 时间戳>",
"card": "<32位十六进制卡密>",
"imei": "<32位MD5设备指纹>"
}
```
**签名(sign)计算**:
```
sign = RC4_Encrypt(cloud_key, MD5(timestamp + card + imei))
```
### 3.6 设备 ID 生成算法
```python
def get_uid():
# 1. 生成 UUID4
raw_uuid = uuid.uuid4()
# 2. 转为字符串并去除短横线
uuid_str = str(raw_uuid).replace('-', '')
# 3. MD5 哈希
md5_hash = hashlib.md5(uuid_str.encode('utf-8')).hexdigest()
# 4. 去除空白字符
imei = md5_hash.strip()
return imei # 32位十六进制字符串
```
**特点**:每次启动生成新的随机设备 ID,不绑定硬件,依赖卡密绑定服务端管理。
### 3.7 加密体系
程序使用了多层加密确保通信安全:
| 层级 | 算法 | 用途 |
|------|------|------|
| L1 | Base64 | 编码传输 |
| L2 | Hex | 十六进制编解码 |
| L3 | XOR | 数据混淆 |
| L4 | MD5 | 消息摘要 / 签名 |
| L5 | RC4 | 对称加密(密钥由服务端下发) |
**数据流加密路径**:
```
原始数据 → XOR混淆 → Hex编码 → Base64编码 → 网络传输
↓
RC4(MD5(参数), cloud_key) = sign
```
### 3.8 状态管理
程序通过心跳机制维持在线状态:
| 状态 | 触发条件 | 行为 |
|------|----------|------|
| 初始化 | 程序启动 | 获取 cloud_key,验证卡密 |
| 在线 | 验证成功 | 定时发送心跳,正常使用 |
| 心跳异常 | 心跳失败 | 自动重试 |
| 超时退出 | 心跳失败 > max_heartbeat_errors | 提示"验证超时,请重试"并退出 |
| 解绑 | 用户主动操作 | POST /api/unCard,释放卡密 |
---
## 四、卡密规律分析
### 4.1 待分析卡密
| 序号 | 卡密值 | 长度 | 特征 |
|------|--------|------|------|
| 1 | `2AB6B559A4C457C9116922404AA0F2BB` | 32 字符 | 全大写十六进制 |
| 2 | `df7670929d37090a35be5b7ad3613a99` | 32 字符 | 全小写十六进制 |
| 3(配置中) | `e94083b72674b8b09c6e7c6734272e3e` | 32 字符 | 全小写十六进制 |
### 4.2 格式特征
三组卡密均为 **32 字符十六进制字符串**,符合 MD5 哈希输出格式(128-bit → 32 hex chars)。
### 4.3 规律分析
**共同特征**:
1. **长度固定**:全部为 32 字符,符合 MD5 摘要标准输出
2. **字符集**:全部为十六进制字符(0-9, A-F / a-f)
3. **大小写**:第一组大写,后两组小写(服务端可能不区分大小写)
**可能的生成方式**(推测):
```
卡密 = MD5(种子字符串)
种子可能 = 购买订单号 + 时间戳 + 随机盐
或
卡密 = 服务端随机生成 UUID → MD5 → Hex
```
**验证流程中的卡密处理**:
根据 `verifyCard` 请求体结构:
```json
{"timestamp":"...","card":"<卡密>","imei":"<设备ID>"}
```
卡密在客户端不做本地校验,直接发送至服务端 `/api/verifyCard` 进行验证。服务端维护卡密数据库,验证通过后返回 `access_token`。
### 4.4 安全分析
| 方面 | 评估 |
|------|------|
| 卡密复杂度 | 32 字符十六进制,穷举空间 2^128,理论上不可暴力破解 |
| 传输安全 | RC4 加密 + MD5 签名,但密钥 cloud_key 由服务端下发,首轮请求安全性依赖 HTTPS |
| 重放攻击 | timestamp 参数提供时间窗口防护 |
| 设备绑定 | 使用随机 UUID 而非硬件指纹,同一卡密可在多设备使用(受服务端策略限制) |
| 本地存储 | 卡密明文存储在 bin_Config.ini,存在泄露风险 |
---
## 五、结论与建议
### 5.1 总体结论
`new-main(1).exe` 是一个基于 Python 开发、经 Nuitka 打包的 **FPS 游戏辅助程序(外挂)**,主要功能包括:
- 基于 ONNX/YOLO 的 AI 自瞄
- 武器后坐力自动压枪
- 敌人移动轨迹预测
- 屏幕截图功能
程序采用**服务端卡密验证**机制,通过 `ARSClient` 类管理整个激活生命周期,包括:云端密钥获取 → 设备指纹生成 → 卡密验证 → 心跳保活 → 超时退出。通信加密采用 RC4 + MD5 + Base64 + XOR 多层加密体系。
三组卡密(`2AB6B559A4C457C9116922404AA0F2BB`、`df7670929d37090a35be5b7ad3613a99`、`e94083b72674b8b09c6e7c6734272e3e`)均为 32 字符十六进制格式,推测为 MD5 哈希值,由服务端生成并管理,客户端不进行本地校验。
### 5.2 风险评估
| 风险项 | 等级 | 说明 |
|--------|------|------|
| 游戏封号风险 | 高 | 使用外挂违反游戏服务条款 |
| 卡密泄露风险 | 中 | 卡密明文存储在本地配置文件 |
| 隐私风险 | 中 | 程序与远程服务器通信,可能收集设备信息 |
| 安全风险 | 高 | 程序涉及进程注入和内存读写,可能被恶意利用 |
### 5.3 外挂ip
47.98.38.158