# fifa-blaze EA Blaze protocol server emulator for FIFA 23 offline FUT. ## Status **Milestone 1 — capture stub.** Two TLS listeners start and log every Blaze packet. No FIFA 23 component/command IDs are known yet — the capture log is how we discover them. ## Architecture ``` FIFA 23 (via openfut-hook DLL / /etc/hosts) │ ▼ gosredirector.ea.com → 127.0.0.1:42127 blaze-server redirector listener (TLS, Fire2 framing) │ replies: "connect to 127.0.0.1:10041" ▼ blaze-server Blaze listener (TLS, Fire2 framing) │ every packet → JSONL capture + pretty-print └─ captures/.jsonl ``` ## Framing note Two Blaze wire framings exist: **Fire** and **Fire2**. FIFA 23's exact variant is unknown — Fire2 is attempted first because it is used by all post-2012 EA titles (ME3, BF3, etc.). If captures show malformed frame sizes, switch the `FramingVariant` in `main.rs` to `Raw` to bypass framing and capture raw bytes for manual analysis. ## Quick start ### 1. Generate a self-signed TLS cert (RSA-2048) DirtySDK (FIFA's network library) rejects ECDSA — RSA-2048 is required. ```bash mkdir certs openssl req -x509 -newkey rsa:2048 \ -keyout certs/key.pem -out certs/cert.pem \ -days 3650 -nodes \ -subj "/CN=gosredirector.ea.com" ``` ### 2. Configure ```bash cp config.example.toml config.toml # edit if needed ``` ### 3. /etc/hosts redirect ``` 127.0.0.1 gosredirector.ea.com ``` Or deploy `openfut-hook` DLL which redirects at the DNS level inside Proton. ### 4. Run ```bash cd fifa-blaze cargo run --release --bin blaze-server -- config.toml ``` ### 5. Start FIFA 23 and go to FUT The capture log at `captures/.jsonl` will contain every packet. Inspect with jq: ```bash jq '.' captures/capture-*.jsonl | less # Find all unique component/command pairs: jq -r '[.component, .command] | @tsv' captures/*.jsonl | sort -u ``` ## Capture log format Each line is a JSON object: ```json { "n": 1, "ts": "2026-06-26T12:00:00.000Z", "peer": "127.0.0.1:54321", "dir": "IN", "component": "0x0001", "command": "0x0001", "type": "REQUEST", "seq": 1, "error": 0, "body_len": 42, "raw_hex": "deadbeef...", "tdf": "{\n \"VRSN\": 0,\n ...}" } ``` ## Next steps (Milestone 2) Once captures reveal component/command IDs: 1. Identify the redirector request/response tag layout 2. Identify Util `preAuth` / `postAuth` / `ping` commands 3. Identify Authentication `login` command 4. Implement handlers and test with FIFA 23 ## Development ```bash # Build cargo build # Run with verbose logging RUST_LOG=debug cargo run --bin blaze-server -- config.toml ```