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
| Property | Value |
|---|---|
| Size | 6,225,920 bytes, which is 3,040 sectors of 2,048 |
| Filesystem | UDF 2.50 |
| Volume identifier | BONKHEN |
| Files | 26 distinct files across 38 extent occurrences, with duplicates in BACKUP/ and the certificate tree |
| Metadata | descriptor 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 records | file names stored as UCS-2, for example NOTICE.txt at sector 323 |
Placement
| Path | Bytes | Offset | Sector |
|---|---|---|---|
BDMV/BDJO/00000.bdjo | 164 | 888,832 | 434 |
NOTICE.txt | 564 | 917,504 | 448 |
x/offline/AXZXkk.class | 1,626 | 919,552 | 449 |
x/offline/EkIKZR.class | 813 | 921,600 | 450 |
x/offline/Hx1400.class | 56,859 | 923,648 | 451 |
x/offline/J196rR.class | 2,931 | 980,992 | 479 |
BDMV/AUXDATA/00000.otf | 234,304 | 985,088 | 481 |
BDMV/JAR/00000.jar | 192,403 | 1,220,608 | 596 to 689 |
BDMV/STREAM/00000.m2ts | 3,975,168 | 1,413,120 | 690 |
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.
| Group | Count | Detail |
|---|---|---|
| Command templates | 40 | bonk/local/templates/cmd-*.bin, the opcode-style sequence the interpreter runs |
| Metadata | 7 | bonk/local/: schedule, marker plan, marker sites, rules, shapes, guards, template hashes |
| Native stage | 1 | bonk/hen.bin, 562,240 bytes |
| Signature | 3 | META-INF/MANIFEST.MF, SIG-BD00.SF, SIG-BD00.RSA |
| Permissions | 1 | org/bdj/bluray.InitXlet.perm, 320 bytes |
| Classes | 20 | all under org/bdj/ |
| Directories | 6 | META-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.
| Class | Bytes | Role |
|---|---|---|
org.bdj.InitXlet | 15,668 | Xlet entry point: preflight, UI wiring, single-shot trigger |
InitXlet$Attempt | 4,805 | State machine for the one attempt |
InitXlet$Lines | 1,376 | Screen log buffer |
org.bdj.Screen plus two inner | 5,261 | HAVI rendering |
org.bdj.OfflineRenderer plus eight inner | 16,280 | Rebuilds each template and re-checks its hash, shape, relocations and write destination on every render |
org.bdj.LocalResultLedger | 4,038 | Result gating, advancing only when a stage reports the expected shape |
org.bdj.Boot plus two inner | 14,533 | Reflective command interpreter, and the dormant remote-control path |
org.bdj.Cfg | 429 | Holds SERVER, PORT, CID, CKEY, BUILD |
x.offline.Hx1400 | 56,859 | The 14.00 kernel stage, largest class on the disc |
x.offline.AXZXkk | 1,626 | Helper, individually SHA-256 pinned |
x.offline.J196rR | 2,931 | Helper, individually SHA-256 pinned |
x.offline.EkIKZR | 813 | Helper, 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
- JAR signature. PKCS#7 over SHA-1, covering 69 entries.
- 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. - Per-render template review.
OfflineRendererre-hashes every template and re-validates shape, relocations and write destination on each render rather than once at startup. - Result gating.
LocalResultLedgeradvances 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.