Technical notes

A static description of the disc. Every number here is measurable from the published files, and the verification page shows how. None of it came from running the image on a console.

Disc

PropertyValue
Size6,225,920 bytes, which is 3,040 sectors of 2,048
FilesystemUDF 2.50
Volume identifierBONKHEN
Files26 distinct files across 38 extent occurrences, with duplicates in BACKUP/ and the certificate tree
Metadatadescriptor sectors 32 to 37 for PVD, IUVD, LVD, PD, USD and TD; 64 and 65 for LVID; 256 for AVDP; 320 to 373 for FSD, FID and AED. File data starts at sector 384. Sectors 2,656 to 3,040 hold the second copy and padding.
Directory recordsfile names stored as UCS-2, for example NOTICE.txt at sector 323

Placement

PathBytesOffsetSector
BDMV/BDJO/00000.bdjo164888,832434
NOTICE.txt564917,504448
x/offline/AXZXkk.class1,626919,552449
x/offline/EkIKZR.class813921,600450
x/offline/Hx1400.class56,859923,648451
x/offline/J196rR.class2,931980,992479
BDMV/AUXDATA/00000.otf234,304985,088481
BDMV/JAR/00000.jar192,4031,220,608596 to 689
BDMV/STREAM/00000.m2ts3,975,1681,413,120690

The 164-byte BDJO registers org.bdj.InitXlet with the 00000*.* entry point, which is what makes the applet start on playback rather than waiting for a menu choice. 00000.mpls and 00000.clpi point at the mandatory stream, and AUXDATA carries the OpenType fonts and dvb.fontindex that HAVI uses to draw the text you read on screen.

The signed JAR

192,403 bytes and 78 entries: 20 classes, 52 data files, 6 directories.

GroupCountDetail
Command templates40bonk/local/templates/cmd-*.bin, the opcode-style sequence the interpreter runs
Metadata7bonk/local/: schedule, marker plan, marker sites, rules, shapes, guards, template hashes
Native stage1bonk/hen.bin, 562,240 bytes
Signature3META-INF/MANIFEST.MF, SIG-BD00.SF, SIG-BD00.RSA
Permissions1org/bdj/bluray.InitXlet.perm, 320 bytes
Classes20all under org/bdj/
Directories6META-INF, bonk, bonk/local, bonk/local/templates, org, org/bdj

74 entries are deflated at level 6 and 2 are stored. The ZIP headers are as authored: version-made-by 0x0014, version-needed 20, flags 0, original DOS time and date, external attributes 0x01800000, no extra fields and no comments.

Classes

24 in total, every one of them major version 48 and minor 0, which is Java 1.4 bytecode. Twenty live in the JAR. The four x/offline helpers are also present as standalone files on the disc, because InitXlet defines them from raw disc bytes with defineClass instead of through the JAR classloader.

ClassBytesRole
org.bdj.InitXlet15,668Xlet entry point: preflight, UI wiring, single-shot trigger
InitXlet$Attempt4,805State machine for the one attempt
InitXlet$Lines1,376Screen log buffer
org.bdj.Screen plus two inner5,261HAVI rendering
org.bdj.OfflineRenderer plus eight inner16,280Rebuilds each template and re-checks its hash, shape, relocations and write destination on every render
org.bdj.LocalResultLedger4,038Result gating, advancing only when a stage reports the expected shape
org.bdj.Boot plus two inner14,533Reflective command interpreter, and the dormant remote-control path
org.bdj.Cfg429Holds SERVER, PORT, CID, CKEY, BUILD
x.offline.Hx140056,859The 14.00 kernel stage, largest class on the disc
x.offline.AXZXkk1,626Helper, individually SHA-256 pinned
x.offline.J196rR2,931Helper, individually SHA-256 pinned
x.offline.EkIKZR813Helper, individually SHA-256 pinned

Execution flow

Blu-ray player / PS4 BD-J VM
  └─ BDMV/BDJO/00000.bdjo  →  org.bdj.InitXlet
       ├─ PREFLIGHT, background thread, 25 checks
       │    • 4 helper classes, SHA-256 pin each
       │    • bonk/hen.bin, size 562,240 plus SHA-256 pin
       │    • 7 metadata files under bonk/local
       │    • 40 command templates and their schedule order
       │    • marker plan, write sites, shapes and guards
       ├─ UI: Screen and InitXlet$Lines, waits for one X press
       └─ ON X:
            OfflineRenderer and LocalResultLedger
              → reconstruct each cmd-*.bin template and verify it again
              → Boot.exec runs the template opcodes
              → Hx1400.run as a thread, the kernel stage
              → hen.bin mapped and executed in kernel, giving HEN

Four trust layers

  1. JAR signature. PKCS#7 over SHA-1, covering 69 entries.
  2. Compile-time pins in InitXlet. Hashes of the helpers, hen.bin, the seven metadata files and the forty templates are baked into the class, so tampering with any asset fails before a single command runs.
  3. Per-render template review. OfflineRenderer re-hashes every template and re-validates shape, relocations and write destination on each render rather than once at startup.
  4. Result gating. LocalResultLedger advances only when the previous stage's result matches the expected shape. There is no retry loop, which makes the one-attempt rule structural instead of a preference.

The first two layers protect the payload from modification. The last two protect the console from running a half-verified command sequence.

What is deliberately absent

No Java source, no bytecode sources, no manifests, no build tooling. The UDF authoring method is not published and the original tool is unavailable, so the ISO is a finished artifact rather than a project you can rebuild. bonk/hen.bin ships as a signed, pinned asset with no native source. The original signing key is not available, which means a modified disc cannot carry the same signature, and that constraint is what makes the hash check a meaningful defence.