From 872eee9e6e434f31c609f607c563b45bf6c496ea Mon Sep 17 00:00:00 2001 From: theubusu <80545678+theubusu@users.noreply.github.com> Date: Sat, 24 Jan 2026 17:35:34 +0100 Subject: [PATCH] epk2,epk3: improve signature handling --- src/formats/epk2.rs | 6 +++--- src/formats/epk3.rs | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/formats/epk2.rs b/src/formats/epk2.rs index da60018..845d8e0 100644 --- a/src/formats/epk2.rs +++ b/src/formats/epk2.rs @@ -75,7 +75,7 @@ pub fn is_epk2_file(file: &File) -> bool { } pub fn extract_epk2(mut file: &File, output_folder: &str) -> Result<(), Box> { - file.seek(SeekFrom::Start(128))?; //inital signature + let _header_signature = common::read_exact(&mut file, SIGNATURE_SIZE as usize)?; let stored_header = common::read_exact(&mut file, 1584)?; //max header size let header; @@ -122,7 +122,7 @@ pub fn extract_epk2(mut file: &File, output_folder: &str) -> Result<(), Box Result<(), Box 0 { - let _signature = common::read_exact(&mut file, 128)?; + _segment_signature = common::read_exact(&mut file, 128)?; signature_count += 1; let encrypted_header = common::read_exact(&mut file, 128)?; diff --git a/src/formats/epk3.rs b/src/formats/epk3.rs index 36f4b96..ef293fc 100644 --- a/src/formats/epk3.rs +++ b/src/formats/epk3.rs @@ -71,27 +71,28 @@ impl PkgInfoEntry { } pub fn extract_epk3(mut file: &File, output_folder: &str) -> Result<(), Box> { - file.seek(SeekFrom::Start(128))?; //inital signature - - let stored_header = common::read_exact(&mut file, 1584)?; //max header size + file.seek(SeekFrom::Start(0))?; + let stored_header = common::read_exact(&mut file, 1712)?; let header: Vec; + let _header_signature; let mut new_type = false; - let matching_key: Option>; println!("Finding key..."); - // find the key, knowing that the header should start with "EPK3" - if let Some((key_name, key_bytes)) = find_key(&keys::EPK, &stored_header, b"EPK3")? { + // find the key, knowing that the header should start with "EPK3" (old type 128 byte signature) + if let Some((key_name, key_bytes)) = find_key(&keys::EPK, &stored_header[128..], b"EPK3")? { println!("Found valid key: {}", key_name); matching_key = Some(key_bytes); - header = decrypt_aes_ecb_auto(matching_key.as_ref().unwrap(), &stored_header)?; + _header_signature = &stored_header[..128]; + header = decrypt_aes_ecb_auto(matching_key.as_ref().unwrap(), &stored_header[128..])?; - //try for new format epk3 where theres an additional 128byte signature at the beginning - } else if let Some((key_name, key_bytes)) = find_key(&keys::EPK, &stored_header[128..], b"EPK3")? { + //try for new format epk3 (new type 256 byte signature) + } else if let Some((key_name, key_bytes)) = find_key(&keys::EPK, &stored_header[256..], b"EPK3")? { println!("Found valid key: {}", key_name); matching_key = Some(key_bytes); - header = decrypt_aes_ecb_auto(matching_key.as_ref().unwrap(), &stored_header)?; + _header_signature = &stored_header[..256]; + header = decrypt_aes_ecb_auto(matching_key.as_ref().unwrap(), &stored_header[256..])?; new_type = true; } else { @@ -106,7 +107,6 @@ pub fn extract_epk3(mut file: &File, output_folder: &str) -> Result<(), Box Result<(), Box Result<(), Box