KuriGohan-Kamehameha/Strip-Boy
GitHub: KuriGohan-Kamehameha/Strip-Boy
通过精准 IL 补丁将辐射4 Pip-Boy 安卓伴侣应用改造为支持同设备环回连接、零遥测的一键启动工具。
Stars: 1 | Forks: 0
# Strip-Boy
一款 IL 补丁工具,通过剥离 Bethesda 的《辐射 4》Pip-Boy Android 伴侣应用的菜单、遥测和局域网发现假设,使其成为适用于同设备场景的一键环回伴侣——例如,在 **AYN Thor** 上通过 **GameNative** (Box64+Wine) 运行《辐射 4》。
补丁应用后:
- 该应用**通过环回地址发现游戏** (`127.0.0.1:28000`),而不仅仅是局域网广播
- 它会**自动选择 PC**、**自动选择全屏模式**、**自动选择环回条目** —— 从点击图标到进入实时 Pip-Boy 界面零点击操作
- 除了 `127.0.0.1` 以及原版已经执行的局域网广播外,它**不会发起任何出站网络调用** —— 即使在关闭 WiFi 的情况下也能安全使用飞行模式
- 它可以通过一个微小的 smali 启动器 Activity,**在双屏掌机(Thor 的底部屏幕)的副屏上启动**
应用的 UI、音频、存档数据、游戏协议和资源加载均未改动。只有 `Assembly-CSharp.dll` 中的九个方法发生了改变,外加一个新的启动器类和 manifest 中 `` 的移动。
本仓库包含**补丁程序和构建脚本**。你需要提供自己拥有的原版 v1.2 APK 副本;本仓库中的任何内容均未重新分发 Bethesda 的代码或资产。
## 补丁内容
| # | 方法 | 变更 |
|---|---------------------------------------------------------------|--------|
| 1 | `SocketDiscoveryChannel.CoreInitialize` | 在广播发送后,立即向 `127.0.0.1:28000` 发送一次现有的自动发现负载的 UDP 数据。游戏的监听器(在 Wine 内绑定到 `0.0.0.0:28000`)在环回地址上回复,现有的接收回调会解析它,从而在设备列表中与任何局域网响应者一起出现一个 `127.0.0.1` 条目。(+11 IL) |
| 2 | `SwrveSettings.IsValid` | 方法体 → `return false`。`SwrveManager.SendEvent` 提前退出,因此发往 `swrve-content.s3.amazonaws.com` 的分析 POST 请求永远不会触发。 |
| 3 | `HockeyAppSettings.IsValid` | 方法体 → `return false`。`HockeyAppManager.Init` 禁用了 iOS+Android 的崩溃报告组件,因此发往 `rink.hockeyapp.net` 的 HockeyApp POST 请求(Microsoft 在 2019 年已停用该服务)永远不会触发。 |
| 4 | `PlatformSelectionMenu.OnFlashReady` | 追加 `OnItemSelected(0)` —— 与点击 PC 按钮时的调用相同。平台选择屏幕自动跳过;你会直接进入设备列表。(+3 IL) |
| 5 | `FlowState.OnEntering` (编译器命名) | 方法体 → `FlowTrigger.WIFIEnabled.Fire();`。原版在 `Application.internetReachability == 2`(局域网可达)时进行门控,这在没有 WiFi 的飞行模式下会失败。环回地址不需要 WiFi,因此我们去除了该检查。 |
总 IL 差异:跨越五个方法约 20 条指令。除了这五个方法外,反编译后的补丁 DLL 与原版在字节级别完全一致。有关具体修改,请参阅 [`patcher/Program.cs`](patcher/Program.cs)。
## 构建
```
# 1. 将你的个人 v1.2 APK 放置于 apk/original.apk(或传递一个路径)。
ln -s ~/Downloads/fallout-pip-boy-1-2.apk apk/original.apk
# 2. 运行 pipeline。
./scripts/build.sh # macOS / Linux
.\scripts\build.ps1 # Windows / PowerShell 7+
```
输出:**`apk/out/pipboy-loopback.apk`** —— 可安装,已进行 v1/v2/v3 签名。
构建流程:提取 `Assembly-CSharp.dll`,运行补丁程序 (Mono.Cecil),原位 zip 更新 APK 副本中的 DLL,zipalign,使用新生成的调试密钥库 (`apk/debug.keystore`) 签名,验证。首次构建后端到端耗时约 3 秒。
有关如何获取 `original.apk`,请参阅 [`apk/README.md`](apk/README.md),或者从仍安装有原版应用的设备上运行 `adb pull`。
[`docs/CHECKSUMS.md`](docs/CHECKSUMS.md) 记录了已知良好基线构建的 SHA-256 值。
## 安装
```
# 如果你已经安装了 Bethesda 的原版,请先卸载
# (签名将会不匹配):
adb uninstall com.bethsoft.falloutcompanionapp
adb install -r apk/out/pipboy-loopback.apk
```
或者通过 Android 文件应用从 APK 文件进行侧载。
## 游戏内设置
在运行《辐射 4》的 Wine prefix 中,编辑 `My Documents\My Games\Fallout4\Fallout4Custom.ini` 并添加:
```
[Companion]
bCompanionEnabled=1
bCompanionAutoStart=1
iCompanionPort=27000
iCompanionDiscoveryPort=28000
```
加载任意存档(伴侣服务器在存档加载时启动),然后启动打完补丁的伴侣应用。在大约 3 秒的发现时间后,会出现一个 `127.0.0.1` 的 "PC" 条目 —— 连接到它即可。
完整的 GameNative 路径及故障排除请参阅 [`docs/GAMENATIVE.md`](docs/GAMENATIVE.md)。
## 飞行模式安全性
在应用补丁 2、3 和 5 之后,应用打开的唯一套接字是:
- `UDP 0.0.0.0:` —— 自动发现广播(如果没有局域网接口则静默空操作)
- `UDP unicast → 127.0.0.1:28000` —— 环回自动发现 (补丁 #1)
- `TCP → :27000` —— 游戏通道(环回或局域网)
如果选择的设备是 `127.0.0.1`,**应用将完全停留在环回地址上**,即使关闭 WiFi 也能在飞行模式下工作。二进制文件中的 `fallout4.com` 和 `xbox.com` URL 字符串仅用于用户在应用内“设置”菜单中点击时的 `Application.OpenURL`,绝不会自动触发。
## 仅限 32 位(无 arm64 构建)
原版 APK 仅附带 **armeabi-v7a** 的原生库(`libunity.so`、`libmono.so`、`libgfxunity3d.so`、`libSmartGlassCore.so` 等)。构建 arm64-v8a 变体需要 Unity 5 的 IL2CPP arm64 工具链(Unity 在 5.x 周期中并未提供该工具链)**以及** Bethesda 专有原生插件的源代码(无公开源码)。没有这些是无法实现的。
实际上这没什么问题——AYN Thor (Snapdragon 8 Gen 2, "kalama") 在其支持的 ABI 中报告了 `arm64-v8a, armeabi-v7a, armeabi`,因此 32 位运行时完好无损,应用可以正常运行。在任何尚未放弃 32 位支持的 Android 掌机上情况也是如此。需要注意的是:2024 年之后仅提供 64 位的 Pixel 级别旗舰设备。
## 仓库布局
```
Strip-Boy/
├── patcher/
│ ├── Patcher.csproj net10.0 console app
│ └── Program.cs Mono.Cecil patches (~250 lines)
├── scripts/
│ ├── build.sh macOS / Linux pipeline
│ └── build.ps1 Windows PowerShell 7+ pipeline
├── docs/
│ ├── PROTOCOL.md F4 gameplay companion wire format
│ ├── GAMENATIVE.md install + Wine networking notes + troubleshooting
│ ├── COPYRIGHT.md interop scope (Sega v. Accolade, DMCA §1201(f))
│ └── CHECKSUMS.md known-good APK hash
├── apk/ (gitignored — see apk/README.md)
│ ├── original.apk ← you supply
│ ├── managed/ ← extracted + patched DLLs
│ ├── work/ ← scratch
│ ├── debug.keystore ← generated first run
│ └── out/
│ └── pipboy-loopback.apk ← the deliverable
├── README.md (this file)
└── LICENSE MIT (patcher source only — see notes inside)
```
## 为什么选择打补丁而不是重写?
原版应用处理了 UI、二进制节点树编解码器、音频、动画、资源加载——所有这些都做得很好。在同设备设置中唯一有问题的是发现探测的目标地址。为了修复 11 条 IL 指令而替换 30 KB 的源代码是不明智的。
## 验证
```
# 确认最终 APK 的 DLL 包含全部三个补丁:
unzip -p apk/out/pipboy-loopback.apk assets/bin/Data/Managed/Assembly-CSharp.dll \
> /tmp/check.dll
ilspycmd /tmp/check.dll -o /tmp/check -p
grep -A 1 'IPAddress.Broadcast' /tmp/check/SocketDiscoveryChannel.cs
grep 'return false' /tmp/check/SwrveSettings.cs /tmp/check/HockeyAppSettings.cs
```
## 依赖项
- macOS、Linux 或 Windows
- `dotnet` SDK 8.0+(基于 10.0.203 开发)
- `keytool`(任意 JDK)
- Android `build-tools` 30.0.0+,用于 `apksigner` + `zipalign`(通过 Android Studio 的 SDK Manager 安装这些工具)
- `unzip` + `zip`(在 Windows 上,脚本使用 `System.IO.Compression`,无需外部 `zip`)
## 法律声明
本项目是一个净室互操作性工具,在 MIT 许可证下分发。它**不会**:
- 重新分发 Bethesda 的 APK 或其任何内容
- 绕过任何技术保护措施(该 APK 没有任何保护)
- 修改或分发任何游戏文件
它**确实**会在用户*自己*的伴侣 APK 副本中插入三个微小的修改,以便它能够与在同一设备上的 Wine 兼容层中运行的《辐射 4》进行互操作。出于互操作性目的的逆向工程在 DMCA §1201(f) 和美国判例法(*Sega v. Accolade*、*Sony v. Connectix*)中受到明确保护。
ZeniMax / Bethesda 的商标仅作描述性引用。本项目不附属于 ZeniMax 或 Bethesda,也未获得其认可。
请参阅 [LICENSE](LICENSE) 和 [docs/COPYRIGHT.md](docs/COPYRIGHT.md)。
标签:Android应用, Assembly-CSharp.dll, AYN Thor, Box64, IL补丁, MOD, Pip-Boy, Smali, Wine, XDA, 二进制发布, 云资产清单, 单机优化, 去广告, 去遥测, 双屏, 多人体追踪, 开源工具, 掌机, 本地环回, 游戏修改, 网络安全, 网络抓包, 辐射4, 逆向工程, 隐私保护