funman300 f4f33969f2 docs(frame): flag Fire2 header as an unvalidated FIFA23 guess vs the proven layout
frame.rs implements a 12-byte Fire2 header that was a pre-FIFA17-recon guess at
FIFA 23's variant; its docstring described it plainly, and it is wrong in every
field for the proven FIFA 17 Fire2 layout (16 bytes, u32 length, u24 msgNum,
(msgType<<5)|userIndex byte, options, reserved; no error field, no jumbo). Correct
the docstring to cite openfut-protocol-blaze::fire2 as authoritative and mark the
implemented 12-byte layout as an unvalidated capture-tool guess to reconcile once
a live FIFA 23 capture exists. Code unchanged: the server is a capture tool whose
documented behaviour is 'guess, then fall back to Raw', so its framing is not
rewritten to an assumption without FIFA 23 evidence.
2026-08-16 21:29:44 +00:00

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/<timestamp>.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.

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

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

cd fifa-blaze
cargo run --release --bin blaze-server -- config.toml

5. Start FIFA 23 and go to FUT

The capture log at captures/<timestamp>.jsonl will contain every packet.
Inspect with jq:

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:

{
  "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

# Build
cargo build

# Run with verbose logging
RUST_LOG=debug cargo run --bin blaze-server -- config.toml
S
Description
FIFA 23 Blaze protocol server emulator
Readme 99 KiB
Languages
Rust 100%