ItsBlurf/BFpilot

GitHub: ItsBlurf/BFpilot

Stars: 7 | Forks: 2

# BFpilot BFpilot is a small PS5 userland payload that starts a browser-based file manager on port `5905`. It is intentionally narrow: no exploit code, no PKG installer, no FTP daemon, no mounting tools, no payload bundle, and no DRM or backup features. Current prepared release: `v0.2.1` ## Recommended Payload Use `bfpilot.elf` as the main release payload. `bfpilot.elf` is the maximum-compatibility file manager: - Starts the HTTP file manager at `http://:5905/`. - Does not install or refresh a PS5 home-screen tile. - Does not compile or link `src/app_installer.c`. - Does not link `libSceAppInstUtil`. - Does not depend on AppInstUtil, SystemService, UserService, or optional launcher-only Sony libraries. - Writes boot and runtime diagnostics under `/data/BFpilot`. Use `bfpilot-debug.elf` when you need extra proof that the payload reached `main()` and progressed through startup. It is still file-manager-only and does not link AppInstUtil. Use `bfpilot-full.elf` when you want the 0.2.0-style integrated launcher install path. This is the best first installer-capable build for your 11.6 case: it starts BFpilot and attempts the home-screen tile install inside the same process, after optional PS5 service initialization. It does not direct-link AppInstUtil; it dynamically resolves the same AppInst functions used by the previous full build. Use `bfpilot-launcher-installer.elf` only after `bfpilot.elf` works. It is a separate optional payload whose only job is installing or refreshing the home-screen tile. It intentionally direct-links AppInstUtil, matching the websrv/Payload Manager/ftpsrv launcher-install pattern. If the loader rejects that import, the installer can fail before `main()`. The file manager is still unaffected. Use `bfpilot-launcher-installer-safe.elf` only for diagnostics. It does not direct-link AppInstUtil and reports whether AppInstUtil is already reachable through the safe runtime path. ## What It Does - Runs a file-manager web UI at `http://:5905/`. - Supports browse, upload, download, copy, move, rename, mkdir, and delete. - Shows progress for copy, move, delete, and browser uploads. - Creates missing copy/move target folders automatically. - Keeps default shortcuts at `/data/homebrew` and `/mnt/usb0`. - Writes boot markers to `/data/BFpilot/boot.log`. - Writes runtime logs to `/data/BFpilot/log.txt`. - Writes fatal-signal diagnostics to `/data/BFpilot/crash.log`. The optional launcher tile, if installed by the separate installer payload, opens: http://127.0.0.1:5905/ ## Runtime Notes Inject the ELF to your payload loader on port `9021`. First test: send bfpilot.elf to :9021 open http://:5905/ open http://:5905/api/status open http://:5905/api/diag Debug test: send bfpilot-debug.elf to :9021 open http://:5905/api/diag check /data/BFpilot/boot.log check /data/BFpilot/log.txt Full install test: send bfpilot-full.elf to :9021 open http://:5905/ check /data/BFpilot/log.txt Alternate port test while an old instance is still running: send bfpilot-debug.elf --port 5906 to :9021 open http://:5906/api/status Launcher installer test: send bfpilot-launcher-installer.elf to :9021 check /data/BFpilot/launcher-installer.log If `bfpilot-launcher-installer.elf` gives no notification and no log, send `bfpilot-launcher-installer-safe.elf` next. If the safe installer reaches `main()` but says AppInstUtil is unavailable, the direct installer is being rejected before it can run. If the launcher installer appears to do nothing, run the probes in this order: tests/installer_enter_probe.elf tests/installer_linkonly_appinst.elf tests/installer_runtime_resolve_appinst.elf If `installer_linkonly_appinst.elf` does not create `/data/BFpilot/linkonly_appinst_entered.txt`, direct AppInstUtil imports are failing before `main()` on that loader/firmware. If `installer_runtime_resolve_appinst.elf` logs `kernel_dynlib_handle libSceAppInstUtil.sprx rc=0xffffffff`, AppInstUtil is not reachable through BFpilot's safe runtime path on that firmware/loader. That does not invalidate the `bfpilot-full.elf` path on firmware where the same runtime resolution is available, such as the 11.6 case you reported. ## Diagnostics Save these files when reporting failures: /data/BFpilot/boot.log /data/BFpilot/log.txt /data/BFpilot/crash.log /data/BFpilot/launcher-installer.log If there is no notification and no `/data/BFpilot/boot.log` entry, the payload probably failed before `main()` or the loader rejected it. If the boot marker appears but the server does not start, the failure happened after `main()`. ## Build export PS5_PAYLOAD_SDK=/path/to/ps5-payload-sdk make clean all Individual targets: make bfpilot make debug make full make launcher-installer make hello-boot make hello-http make hello-notify make installer-enter-probe make installer-linkonly-appinst make installer-runtime-resolve-appinst make inspect-imports Outputs: bfpilot.elf bfpilot-debug.elf bfpilot-full.elf bfpilot-launcher-installer.elf bfpilot-launcher-installer-safe.elf tests/hello_boot.elf tests/hello_http.elf tests/hello_notify.elf tests/installer_enter_probe.elf tests/installer_linkonly_appinst.elf tests/installer_runtime_resolve_appinst.elf The compatibility check must pass for release builds: make inspect-imports It fails if `bfpilot.elf` or `bfpilot-debug.elf` contain AppInstUtil, `sceAppInst`, `app_installer`, or `BFPL00001` installer fingerprints. Direct `libSceAppInstUtil.sprx` import is allowed only for `bfpilot-launcher-installer.elf` and `tests/installer_linkonly_appinst.elf`. ## Project Layout - `src/lite_main.c` starts the file-manager payload, handles clean reload, and starts the web server. - `src/boot_marker.c` writes the earliest cross-payload boot marker. - `src/websrv_lite.c` serves `/`, `/api/status`, `/api/diag`, `/fs`, and `/api/fs/*`. - `src/transfer.c` contains upload, copy, move, delete, and long-running job handling. - `src/launcher_installer_main.c` is the isolated optional launcher installer. - `tests/` contains small probe payloads for loader, HTTP, notification, and AppInstUtil testing. See [docs/COMPATIBILITY_STRATEGY.md](docs/COMPATIBILITY_STRATEGY.md) for the firmware compatibility strategy and [docs/FIRMWARE_TESTING.md](docs/FIRMWARE_TESTING.md) for the test protocol.
标签:客户端加密