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, 逆向工程, 隐私保护