From 759ff43c97423ceb8ce4be11002237ff507284c6 Mon Sep 17 00:00:00 2001 From: jtryba Date: Wed, 29 Jul 2026 20:18:25 -0500 Subject: [PATCH 1/1] Record A102 and B101 live profile evidence --- ...LDS_PROFILE_HARDENING_A102_CANDIDATE_V1.md | 69 +++++++++++++++---- libfriidump/dvd_drive.c | 8 +-- tests/test_hlds_e7_profiles.c | 36 ++++++---- 3 files changed, 83 insertions(+), 30 deletions(-) diff --git a/docs/reports/FRIIDUMP_HLDS_PROFILE_HARDENING_A102_CANDIDATE_V1.md b/docs/reports/FRIIDUMP_HLDS_PROFILE_HARDENING_A102_CANDIDATE_V1.md index 077c625..eb278d0 100644 --- a/docs/reports/FRIIDUMP_HLDS_PROFILE_HARDENING_A102_CANDIDATE_V1.md +++ b/docs/reports/FRIIDUMP_HLDS_PROFILE_HARDENING_A102_CANDIDATE_V1.md @@ -39,17 +39,58 @@ A102 and B101 remain Type3 profiles with: Unknown GCC-4243N and GCC-4244N revisions still use the conservative Type3 fallback. -## B101 regression role +## Accepted A102 hardware evidence -The accepted B101 run completed a GameCube dump and matched the known-good -image while FriiDump used the legacy Type3 fallback. +The exact A102 profile was selected on a GCC-4243N A102 drive. -This candidate binds B101 to the analyzer-derived reporting metadata. +The 20-block GameCube seed campaign passed. -It keeps the same Type3 command and Method 8 behavior. +The same candidate then completed a full dump of Sonic Mega Collection (US). -The exact B101 metadata still requires a live profile-selection check before -release promotion. +Results: + +- sectors: `712880`; +- bytes: `1459978240`; +- CRC32: `01b52739`; +- MD5: `85a525df1481d0ad67d8761f832dca12`; +- SHA-1: `06eb6d15b4d7f90ec0fed9ce9a77db41358d74ed`; +- SHA-256: + `30098da93f5de9ece8da44f8afdfb85cf9bcdc24d77131221e64e3038a529010`; +- Redump: exact match; +- STOP UNIT: pass. + +A102 full-dump evidence archive SHA-256: + +`deedfb6aaa1760bca2a6a66eb72ad1531dd88d2f84a1e5e8e3aadf8b0d4e321f` + +A102 acceptance review SHA-256: + +`44f76c26bed7bf5352b0320c50f51f5d8cc5ea1c01064cd66db6979d70f6f395` + +## Accepted B101 hardware evidence + +The exact B101 profile was selected on a GCC-4244N B101 drive. + +The 20-block GameCube seed campaign passed with Sonic Mega Collection (US). + +Results: + +- sectors: `712880`; +- command: `2`; +- Method: `8`; +- STOP UNIT: pass; +- dump image: not requested. + +An earlier B101 run with the legacy Type3 fallback completed a full GameCube +dump and matched the known-good image. + +B101 exact-profile seed evidence archive SHA-256: + +`85a4f8078bb8af3f82e7024f7869ef1df0e59c87ea78fe2c25bd7e0cc2e3e893` + +B101 acceptance review SHA-256: + +`f2ed01da41f7b0eda3129938934277da2cb0f5509e2ea80b8aff77c83b4e3250` ## GDR-8050L identity coherence @@ -67,12 +108,13 @@ cross-flashed GDR-8050L 0012 payload. ## Offline tests -The new test covers: +The test covers: - A102 live INQUIRY spelling; - A102 canonical spelling; - B101 live INQUIRY spelling; - B101 canonical spelling; +- live-validated support-tier metadata for A102 and B101; - the existing A101 profile; - GDR-8050L 0012 identity; - rejection of false exact GDR-8050L 0L23 metadata; @@ -81,11 +123,12 @@ The new test covers: ## Limits -This candidate does not claim an A102 live dump. +Static firmware addresses remain diagnostic evidence only. -It does not claim that static firmware addresses are executable host commands. +This evidence-status update does not change parser behavior, cache geometry, +command selection, or Method 8. -Live validation must start with profile selection and seed retrieval. +The A102 and B101 live profile prerequisites are complete. -A full dump and known-good hash comparison are required before A102 can move -to a live-validated tier. +Promotion still requires complete offline validation and an isolated +fast-forward rehearsal. diff --git a/libfriidump/dvd_drive.c b/libfriidump/dvd_drive.c index b77a95d..88aa2c0 100644 --- a/libfriidump/dvd_drive.c +++ b/libfriidump/dvd_drive.c @@ -255,12 +255,12 @@ static const hlds_e7_profile_desc hlds_e7_profiles[] = { { "GCC-4242N", "0J06", 22, 0x80000000U, 1, 8, "GCC-4242N 0J06 promoted E7 parser profile", "error_prone_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0066", 0x824U, 0x90038621U, "capable but error-prone; conservative Method 8 one-window validation profile" }, { "GCC-4243N", "0000", 3, 0x80000000U, 5, 8, "GCC-4243N 0000 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0069", 0x884U, 0x90037929U, "known-supported GCC_424x profile hardening target" }, { "GCC-4243N", "1.08", 3, 0x80000000U, 5, 8, "GCC-4243N 1.08 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0071", 0x880U, 0x90036813U, "known-supported GCC_424x profile hardening target" }, - { "GCC4243", "A102", 3, 0x80000000U, 5, 8, "GCC-4243N A102 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0439", 0x880U, 0x9003731dU, "Live INQUIRY alias for GCC4243/A102; analyzer-derived exact parser metadata; read-only profile hardening target; not yet live-validated with the exact profile" }, - { "GCC-4243N", "A102", 3, 0x80000000U, 5, 8, "GCC-4243N A102 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0439", 0x880U, 0x9003731dU, "Canonical model alias for GCC-4243N A102; analyzer-derived exact parser metadata; read-only profile hardening target; not yet live-validated with the exact profile" }, + { "GCC4243", "A102", 3, 0x80000000U, 5, 8, "GCC-4243N A102 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0439", 0x880U, 0x9003731dU, "Live INQUIRY alias for GCC4243/A102; exact profile selection, 20-block seed retrieval, full GameCube dump, STOP UNIT, and exact Redump match validated with Sonic Mega Collection (US)" }, + { "GCC-4243N", "A102", 3, 0x80000000U, 5, 8, "GCC-4243N A102 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0439", 0x880U, 0x9003731dU, "Canonical model alias for GCC-4243N A102; exact profile selection, 20-block seed retrieval, full GameCube dump, STOP UNIT, and exact Redump match validated with Sonic Mega Collection (US)" }, { "GCC-4244N", "1.03", 3, 0x80000000U, 5, 8, "GCC-4244N 1.03 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0073", 0x88cU, 0x90037d06U, "P1 owned GCC_424x profile hardening target" }, { "GCC-4244N", "103", 3, 0x80000000U, 5, 8, "GCC-4244N 103 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0076", 0x894U, 0x900386fbU, "P1 owned GCC_424x profile hardening target" }, - { "GCC4244", "B101", 3, 0x80000000U, 5, 8, "GCC-4244N B101 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0426", 0x894U, 0x900386d2U, "Live INQUIRY alias for GCC4244/B101; legacy Type3 fallback completed a Redump-matching GameCube dump; exact parser metadata is analyzer-derived and is the regression oracle for A102 hardening" }, - { "GCC-4244N", "B101", 3, 0x80000000U, 5, 8, "GCC-4244N B101 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0426", 0x894U, 0x900386d2U, "Canonical model alias for GCC-4244N B101; legacy Type3 fallback completed a Redump-matching GameCube dump; exact parser metadata is analyzer-derived and is the regression oracle for A102 hardening" }, + { "GCC4244", "B101", 3, 0x80000000U, 5, 8, "GCC-4244N B101 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0426", 0x894U, 0x900386d2U, "Live INQUIRY alias for GCC4244/B101; exact profile selection, 20-block GameCube seed retrieval, and STOP UNIT validated; the earlier legacy Type3 fallback full dump matched Redump" }, + { "GCC-4244N", "B101", 3, 0x80000000U, 5, 8, "GCC-4244N B101 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "hybrid_identity_v3:stage5b_0426", 0x894U, 0x900386d2U, "Canonical model alias for GCC-4244N B101; exact profile selection, 20-block GameCube seed retrieval, and STOP UNIT validated; the earlier legacy Type3 fallback full dump matched Redump" }, { "GCC4244", "B103", 3, 0x80000000U, 5, 8, "GCC-4244N B103 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "promoted_parser_signature_v23", 0x894U, 0x900386fbU, "Live INQUIRY alias for HL-DT-ST CDRW/DVD GCC4244 B103; case label B101; exact Stage5B parser signature recovered; media preflight, seed retrieval, full GameCube dump, STOP UNIT, and Redump hash match validated" }, { "GCC-4244N", "B103", 3, 0x80000000U, 5, 8, "GCC-4244N B103 promoted E7 parser profile", "known_supported_profile_hardening_live_validated", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "promoted_parser_signature_v23", 0x894U, 0x900386fbU, "B103 shares the promoted parser signature gate/CDB with 103/104; live GCC4244/B103 hardware completed a Redump-matching GameCube dump" }, { "GCC-4244N", "104", 3, 0x80000000U, 5, 8, "GCC-4244N 104 promoted E7 parser profile", "known_supported_profile_hardening", "GCC_424x", "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", "stage5b_0078", 0x894U, 0x900386fbU, "P1 owned GCC_424x profile hardening target" }, diff --git a/tests/test_hlds_e7_profiles.c b/tests/test_hlds_e7_profiles.c index a7b6612..e90dec2 100644 --- a/tests/test_hlds_e7_profiles.c +++ b/tests/test_hlds_e7_profiles.c @@ -16,6 +16,7 @@ typedef struct { int method; const char *record_id; const char *tokens; + const char *support_tier; } profile_case; static int check_case(const profile_case *test) { @@ -58,11 +59,13 @@ static int check_case(const profile_case *test) { !info.tokens || strcmp(info.tokens, test->tokens) != 0 || !info.record_id || - strcmp(info.record_id, test->record_id) != 0 + strcmp(info.record_id, test->record_id) != 0 || + !info.support_tier || + strcmp(info.support_tier, test->support_tier) != 0 ) { fprintf(stderr, "FAIL: %s type=%u cdb=0x%03x gate=0x%08x " - "blocks=%u method=%d tokens=%s record=%s\n", + "blocks=%u method=%d tokens=%s record=%s tier=%s\n", test->label, info.type, info.static_cdb_base, @@ -70,7 +73,8 @@ static int check_case(const profile_case *test) { info.mem_blocks, info.preferred_method, info.tokens ? info.tokens : "(null)", - info.record_id ? info.record_id : "(null)"); + info.record_id ? info.record_id : "(null)", + info.support_tier ? info.support_tier : "(null)"); return 0; } @@ -86,62 +90,68 @@ int main(void) { "HL-DT-ST", "CDRW/DVD GCC4243", "A102", true, 3, 0x880U, 0x9003731dU, 5, 8, "hybrid_identity_v3:stage5b_0439", - "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX" + "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", + "known_supported_profile_hardening_live_validated" }, { "A102 canonical alias", "HL-DT-ST", "GCC-4243N", "a102", true, 3, 0x880U, 0x9003731dU, 5, 8, "hybrid_identity_v3:stage5b_0439", - "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX" + "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", + "known_supported_profile_hardening_live_validated" }, { "B101 live inquiry alias", "HL-DT-ST", "CDRW/DVD GCC4244", "B101", true, 3, 0x894U, 0x900386d2U, 5, 8, "hybrid_identity_v3:stage5b_0426", - "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX" + "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", + "known_supported_profile_hardening_live_validated" }, { "B101 canonical alias", "HL-DT-ST", "GCC-4244N", "b101", true, 3, 0x894U, 0x900386d2U, 5, 8, "hybrid_identity_v3:stage5b_0426", - "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX" + "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", + "known_supported_profile_hardening_live_validated" }, { "A101 existing canonical profile", "HL-DT-ST", "GCC-4241N", "A101", true, 21, 0x85cU, 0x900356b7U, 1, 8, "stage5b_0064", - "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX" + "HL;IT;RPC;RPC_JCS3;RPC_SUFFIX", + "error_prone_supported_profile_hardening" }, { "GDR-8050L 0012 hybrid operating identity", "HL-DT-ST", "DVD-ROM GDR8050L", "0012", true, 44, 0x5d0U, 0x90026160U, 1, 8, "hybrid_identity_v3:gdr8050l_0012", - "HL;IT;RPC;RPC_JD4_SPACE;RPC_SUFFIX" + "HL;IT;RPC;RPC_JD4_SPACE;RPC_SUFFIX", + "hybrid_crossflash_modified_firmware_only" }, { "GDR-8050L 0L23 has no false exact metadata", "HL-DT-ST", "DVD-ROM GDR8050L", "0L23", - false, 44, 0, 0, 0, 0, NULL, NULL + false, 44, 0, 0, 0, 0, NULL, NULL, NULL }, { "A103 conservative Type3 fallback", "HL-DT-ST", "CDRW/DVD GCC4243", "A103", - false, 3, 0, 0, 0, 0, NULL, NULL + false, 3, 0, 0, 0, 0, NULL, NULL, NULL }, { "B102 conservative Type3 fallback", "HL-DT-ST", "CDRW/DVD GCC4244", "B102", - false, 3, 0, 0, 0, 0, NULL, NULL + false, 3, 0, 0, 0, 0, NULL, NULL, NULL }, { "non-HL vendor rejected", "NOT-HL", "CDRW/DVD GCC4243", "A102", - false, 0, 0, 0, 0, 0, NULL, NULL + false, 0, 0, 0, 0, 0, NULL, NULL, NULL } }; size_t i; -- 2.43.0