Skip to content

Solve (or route around) the FL Studio v25 scalar keystream #7

Description

@sepehrsadri

FL Studio projects from v10 through v24 parse cleanly. v25 does not, and this blocks support for the current release.

What we know (see docs/FORMATS.md)

v25-era files appear to add an additive, file-offset-dependent obfuscation keystream over scalar (fixed-size, ID < 192) events:

  • Two real autosaves of one project, same size: only 17 of 53,448 bytes differ (0.032%) — FL's writer is otherwise deterministic and positionally stable.
  • But when file size changes by 48 bytes, 957 of 973 fixed-size events change, and 88.6% of the changed bytes differ by exactly +48 mod 256 — the file-size delta. All deltas are multiples of 16.
  • Event count was identical, so the key is keyed on byte offset, not event index.
  • A per-file constant K was recovered (K=135 for one project, K=136 for another), and byte_real = byte_stored + byte_offset + K (mod 256) correctly decodes IsEnabled/Type/PingPongLoopbut not tempo or time signature, so the key function is not fully solved.
  • v25 also breaks the event-width rule at a fixed spot: ID 172 (0xAC) carries a 3-byte payload, so the stream must resync at 0x34.

The task

Solve the keystream, or prove it cannot be solved and implement the fallback (diff only variable-length events).

The experiment that would settle it — requires FL Studio 2025:

  1. Open a project, save as A.
  2. Change one note velocity (no length change) → save as B.
  3. Change one mixer knob → save as C.
  4. Add one note (length change) → save as D.
  5. Rename a channel → save as E.

Then byte-diff A/B/C/D/E. B vs A isolates whether a same-size edit is local under v25 obfuscation. D vs A confirms whether any size change globally rewrites scalars. C vs A measures MixerID.Params blob locality. Repeat on FL 20.9 to confirm the regression.

Start from experiments/flp_parse.py. Please report exact FL version numbers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    format-researchReverse-engineering a DAW project formathelp wantedExtra attention is neededphase-4FL Studio milestone — post-0.0 write-path roadmap

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions