Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BD2-PyFlow (Browndust2hat)

Project Status: ⛔ Abandoned (已搁置) Note: This project is a proof-of-concept for protocol-level automation.

这是一个旨在通过协议流(非模拟点击)自动清理《棕色尘埃2》(Brown Dust 2) 日常任务的工具。由于逆向工程的黑盒性质及维护成本,目前已停止开发。

⚠️ 重要说明 (Important Notes)

1. 敏感信息与密钥 (Sensitive Data)

为了安全起见,本项目中的敏感密钥已被替换:

  • Game Fixed Key: 代码中已替换为 gamefixedkey
  • Access Token: 示例代码中已替换为占位符。

开发者留言: 如果您有兴趣继续开发此项目,或者需要原始的加密密钥和技术支持,请留言联系我。 Contact: If you wish to continue development, please leave a message for the original encryption key and assistance.

2. 版本更新维护 (Maintenance)

游戏客户端更新频繁,每次更新后通常需要修改 backend/config.py 中的以下字段:

  • APP_VERSION (应用版本)
  • BUNDLE_VERSION (资源包版本)
  • UNITY_VERSION (Unity 引擎版本)

请务必保持这些配置与当前游戏客户端一致,否则请求可能会被服务器拒绝。

🛠️ 技术栈与工具

  • 核心语言: Python
  • 抓包工具: Fiddler
  • 逆向工具: dnSpy (用于分析 C# 客户端逻辑)
  • 通信方式: Python 网络库直接发包

🔐 加密与认证机制

游戏通信采用了多层封装,具体的加解密流程如下:

加密流程 (Request)

graph LR
    A[Protobuf Object] -->|Serialize| B[Bytes]
    B -->|Base64 Encode| C[Base64 String]
    C -->|AES Encrypt| D[AES Bytes]
    D -->|Base64 Encode| E[Final Payload]
Loading

逻辑公式:Protobuf -> Base64 -> AES -> Base64

解密流程 (Response)

graph LR
    A[JSON 'data' field] -->|Base64 Decode| B[AES Bytes]
    B -->|AES Decrypt| C[Base64 String]
    C -->|Base64 Decode| D[Protobuf Bytes]
    D -->|Parse| E[Protobuf Object]
Loading

逻辑公式:(JSON中的data) -> Base64 -> AES -> Base64 -> Protobuf Bytes

密钥管理 (Key Exchange)

  1. 初始登录:使用客户端写死的 固定密钥 (Static Key) 进行加密发送登录请求。
  2. 获取动态密钥:登录成功后,服务器返回加密数据。使用固定密钥解密后,从中提取本次会话的 动态密钥 (Dynamic UserKey)
  3. 后续通信:所有后续的业务请求(收菜、抽卡等)均使用该 动态密钥 进行加解密。

✅ 已实现功能

  • 登录流程 (Login Module)
  • 每日免费一抽 (Free Gacha)
  • 一键收菜 (Daily Collection):
    • 派遣 (Dispatch)
    • 20人本/狩猎 (Total War / Hunting)
    • 食堂 (Cafeteria)
    • 邮件领取 (Mail Module)
    • 通行证/任务领取 (Mission Module)
    • 狩猎扫荡 (Hunt Module)

❌ 未实现/待开发

  • 黄金竞技场 (Golden Arena)
  • 鱼篓/钓鱼 (Fishing)

⚙️ 配置与敏感信息 (Configuration)

本项目包含敏感的个人账号信息,请务必小心处理。

1. 配置文件设置

backend/ 目录下,提供了两个示例文件:

  • config.example.py
  • login_module.example.py

使用步骤

  1. config.example.py 重命名为 config.py
  2. login_module.example.py 重命名为 login_module.py
  3. 填入敏感信息

backend/login_module.py

你需要填入抓包获取的 CACHED_ACCESS_TOKEN

# ⚠️ 敏感信息:请替换为你抓包获取的 Access Token
CACHED_ACCESS_TOKEN = "YOUR_ACCESS_TOKEN_HERE"

backend/config.py

你需要填入你的角色库存 ID (char_inven_index),用于派遣重置功能。

# ⚠️ 敏感信息:请替换为你自己的角色库存ID
DISPATCH_GROUPS_TO_RESET = [
    {"char_inven_index": 123456789, "dispatch_ids": [...]},
    ...
]

⚠️ 安全警告config.pylogin_module.py 包含你的账号凭证,绝对不要将其提交到公开的代码仓库中!建议将这两个文件加入 .gitignore

📂 目录结构与环境说明

项目主要分为两个部分,请注意依赖冲突

1. backend/

整个工具的后端核心逻辑,包含所有业务模块。

核心架构

  • main.py: 程序的入口点。负责初始化日志、登录、以及按顺序调用各个业务模块(收菜、抽卡等)。
  • api_client.py: 封装了底层的 HTTP 请求逻辑。处理请求头、加密/解密、Loki 日志上报以及错误处理。
  • config.py: 集中配置文件。包含 API URL、版本号、文件路径以及游戏内的配置 ID(如派遣 ID、通行证 ID)。
  • login_module.py: 处理登录流程。包含 FIXED_KEYCACHED_ACCESS_TOKEN,负责获取动态 UserKey

业务模块

  • cafeteria_module.py: 食堂模块。负责领取食堂的累计奖励。
  • dispatch_module.py: 派遣模块。负责领取派遣奖励,并重新派遣失败或完成的任务。
  • gacha_module.py: 抽卡模块。负责每日免费单抽,并维护卡池 ID 的映射关系 (gacha_mapping.json)。
  • hunt_module.py: 狩猎模块。负责执行狩猎场的扫荡任务(如铁矿、木材、金币本等)。
  • mail_module.py: 邮件模块。负责读取邮箱列表并一键领取所有附件。
  • map_module.py: 地图模块。负责进入地图包 (Pack) 并加载相关数据(如怪物信息、路径点等),为其他模块提供前置状态。
  • mission_module.py: 任务模块。负责领取通行证 (Battle Pass) 奖励、活动任务奖励以及周常任务。
  • total_war_module.py: 20人本模块。负责领取总力战 (Total War) 的累计奖励。

工具与辅助

  • protos.proto: Protobuf 定义文件,描述了游戏通信的数据结构。
  • protos_pb2.py / protos_pb2_grpc.py: 由 protoc 编译生成的 Python 代码。
  • decrypt_*.py: 一系列独立的解密脚本,用于调试特定类型的请求或响应数据。
  • debug_*.py: 调试脚本,用于测试二进制数据或特定功能。

2. de/

统一的万能解密工具集,用于调试和解密抓包数据。

⚠️ 注意backendde 目录下的 Python 依赖可能会产生冲突。建议为这两个目录分别创建独立的虚拟环境,或分开安装依赖。

About

这是一个旨在通过协议流(非模拟点击)自动清理《棕色尘埃2》(Brown Dust 2) 日常任务的工具。

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages