lincyppq/KuroTokenExtractor
GitHub: lincyppq/KuroTokenExtractor
一个用于提取库街区 iOS App 用户 Token 和设备 ID 的 dylib 注入插件,通过 Hook 网络请求头自动捕获认证参数。
Stars: 0 | Forks: 0
# 库街区 Token & DID 提取器 - iOS 插件
这是一个用于库街区 iOS App 的 dylib 插件,可以提取并复制用户的 Token 和 Device ID。
## 功能特性
- ✅ 自动拦截 HTTP 请求头中的 `token` 和 `devCode`
- ✅ 悬浮按钮一键复制(格式:`token,did`)
- ✅ 支持多种存储方式(NSUserDefaults、Keychain、App Group)
- ✅ 详细的提取结果弹窗
## 技术实现
- **核心技术**: Hook NSURLRequest 的 `allHTTPHeaderFields` 方法
- **编译**: 纯 Objective-C,无需 Theos 或 CydiaSubstrate
- **目标**: iOS 11.0+ (arm64)
- **应用**: 库街区 (com.kurogame.kjq)
## 编译方式
### 方法 1: 使用 GitHub Actions(推荐 - 无需 Mac)
1. **在 GitHub 上创建新仓库**
- 访问 https://github.com/new
- 仓库名:`KuroTokenExtractor`(或任意名称)
- 设为 Public
2. **上传项目文件**
方式 A - 使用 Git 命令行:
cd KuroTokenExtractor
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/你的用户名/KuroTokenExtractor.git
git push -u origin main
方式 B - 使用 GitHub Desktop:
- 下载安装 GitHub Desktop: https://desktop.github.com/
- 打开 GitHub Desktop → File → Add Local Repository
- 选择项目目录
- 点击 "Publish repository" 按钮
方式 C - 手动上传(最简单):
- 在 GitHub 仓库页面点击 "uploading an existing file"
- 将项目目录下的所有文件拖入浏览器
- 点击 "Commit changes"
3. **等待自动编译**
- 上传后,GitHub Actions 会自动开始编译
- 进入仓库的 "Actions" 标签页查看进度
- 编译时间:约 1-2 分钟
4. **下载编译产物**
- 编译完成后,点击最新的 workflow run
- 在 "Artifacts" 区域下载 `KuroTokenExtractor-dylib`
- 解压 ZIP,得到 `KuroTokenExtractor.dylib` 文件
### 方法 2: 本地编译(需要 Mac)
# 直接使用 clang 编译
clang -arch arm64 \
-isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-mios-version-min=11.0 \
-dynamiclib \
-framework Foundation \
-framework UIKit \
-framework Security \
-framework CoreGraphics \
-framework QuartzCore \
-fobjc-arc \
-o KuroTokenExtractor.dylib \
Tweak.m
# 签名
codesign -f -s - KuroTokenExtractor.dylib
## 安装方式
### 使用 TrollFools 注入 dylib(推荐 - 无需越狱)
1. **准备工作**
- 确保设备已安装 TrollStore 和 TrollFools
- 确保库街区 App 已通过 TrollStore 安装
- 将编译好的 `KuroTokenExtractor.dylib` 传输到 iOS 设备
2. **使用 TrollFools 注入**
- 打开 TrollFools
- 找到已安装的"库街区"应用
- 点击 "导入 Tweak" 或类似选项
- 选择 `KuroTokenExtractor.dylib`
- 重启库街区 App(TrollFools 会自动处理)
**注意**:TrollFools 不需要重新安装 IPA,它直接向已安装的 App 注入 dylib
方式 B - 手动注入到 IPA(不推荐,TrollFools 更简单):
# 1. 解压 IPA
unzip 库街区.ipa
# 2. 复制 dylib
mkdir -p Payload/KuroGameBox.app/Frameworks
cp KuroTokenExtractor.dylib Payload/KuroGameBox.app/Frameworks/
# 3. 重新打包
zip -r 库街区_patched.ipa Payload/
# 4. 用 TrollStore 安装修改后的 IPA
### 使用 Filza(需要越狱)
1. 将 `KuroTokenExtractor.dylib` 复制到:
`/Library/MobileSubstrate/DynamicLibraries/`
2. 创建 plist 文件:
`/Library/MobileSubstrate/DynamicLibraries/KuroTokenExtractor.plist`
Filter
Bundles
com.kurogame.kjq
3. 运行 `killall -9 SpringBoard` 注销设备
4. 重新打开库街区 App
## 使用方法
1. **启动应用**
- 安装插件后,打开库街区 App
- 等待 3 秒,右侧会出现青色毛玻璃悬浮按钮
2. **触发网络请求**
- 确保已登录账号
- 刷新页面或进入不同模块,触发几次网络请求
- 插件会自动拦截 Token 和 DevCode
3. **提取数据**
- 点击悬浮按钮
- 弹窗显示提取结果
- 数据已自动复制到剪贴板,格式:`token,did`
## 输出格式
token,devCode
例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...,1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t
## 技术细节
### Hook 实现
// Hook NSURLRequest 的 allHTTPHeaderFields
static NSDictionary* hooked_allHTTPHeaderFields(id self, SEL _cmd) {
NSDictionary *headers = original_allHTTPHeaderFields(self, _cmd);
if (headers && headers.count > 0) {
if (headers[@"token"]) {
[g_capturedHeaders setObject:headers[@"token"] forKey:@"token"];
}
if (headers[@"devCode"]) {
[g_capturedHeaders setObject:headers[@"devCode"] forKey:@"devCode"];
}
}
return headers;
}
### 数据来源优先级
1. **HTTP 请求头拦截**(主要方式)
- 拦截所有 NSURLRequest 的 HTTP 头
- 实时捕获 `token` 和 `devCode` 字段
2. **NSUserDefaults 读取**(备用方式)
- 搜索键:`token`, `user_token`, `userToken`, `TOKEN`
- 搜索键:`deviceId`, `deviceID`, `identifyId`, `devCode`
3. **Keychain 读取**(备用方式)
- Service: `com.kurogame.kjq`
- Account: `token`, `deviceId`
## 调试方法
使用 macOS Console.app 查看日志:
1. 打开 Console.app
2. 连接 iOS 设备
3. 搜索 `[KuroTokenExtractor]`
4. 查看插件运行状态
**日志示例**:
[KuroTokenExtractor] Plugin loaded!
[KuroTokenExtractor] ✓ Hook installed successfully!
[KuroTokenExtractor] ✓ Floating button added!
[KuroTokenExtractor] ✓ Token captured
[KuroTokenExtractor] ✓ devCode captured
[KuroTokenExtractor] Result copied (length: 245)
## 常见问题
### 1. 悬浮按钮不显示
**原因**:Hook 安装失败或 Window 未准备好
**解决**:
- 检查 TrollFools 是否正确注入插件
- 尝试重启 App
### 2. 点击按钮后显示"未获取"
**原因**:尚未拦截到 Token/DevCode
**解决**:
- 多刷新几次页面
- 进入不同模块(个人中心、帖子列表等)
- 确保网络请求正常发送
### 3. 提取的 Token 为空
**原因**:未登录账号,或 Token 存储位置变化
**解决**:
- 确保已登录库街区账号
- 检查是否是新版本 App(字段名可能变化)
### 4. App 闪退
**原因**:dylib 加载失败或代码错误
**解决**:
- 使用 TrollFools:检查是否正确注入到库街区 App
- 使用 Filza(越狱):确认 CydiaSubstrate 已安装并正确加载
- 确认 iOS 版本 ≥ 11.0
## 版本兼容性
- **支持的 iOS 版本**: 11.0+(理论上支持所有 iOS 11+ 版本)
- **支持的注入方式**:
- TrollFools(推荐,无需越狱)
- Filza + CydiaSubstrate(需要越狱)
- **支持的库街区版本**: 3.1.0(理论上支持所有版本,只要 API 字段不变)
- **架构**: arm64(iPhone 5s 及以后设备)
## 安全说明
- ✅ 本插件仅在本地运行,不上传任何数据
- ✅ 提取的 Token 仅保存在剪贴板,不写入文件
- ✅ 所有日志仅用于调试,不包含敏感信息完整内容
- ⚠️ Token 是敏感信息,请勿分享给他人
- ⚠️ 复制后的 Token 请及时使用,避免长时间保留在剪贴板
## 免责声明
本插件仅供学习和研究使用,使用者需自行承担使用风险。开发者不对因使用本插件造成的任何损失负责。
请遵守以下原则:
- 仅用于个人账号的 Token 提取
- 不得用于恶意攻击或非法用途
- 尊重库街区的服务条款
## 开源协议
MIT License
## 贡献
欢迎提交 Issue 和 Pull Request!
## 更新日志
### v1.0.0 (2026-06-23)
- ✨ 初始版本发布
- ✨ 支持 Token 和 DevCode 提取
- ✨ 悬浮按钮 UI
- ✨ 多种存储方式支持
- ✨ GitHub Actions 自动编译
标签:CVE监控, iOS 插件, Objective-C, 云资产清单, 动态注入, 数据提取, 网络请求拦截, 逆向工程