From 2c954d8d741f5b1f49932ccd0b26e49e7a0d3597 Mon Sep 17 00:00:00 2001 From: Jean-Marie 'Histausse' Mineau Date: Tue, 28 Jan 2025 10:27:30 +0100 Subject: [PATCH] fix reading zip with data descriptors --- apk_frauder/TODO.md | 3 +++ apk_frauder/src/data_descriptor.rs | 11 +++++++++-- apk_frauder/src/main.rs | 17 +---------------- 3 files changed, 13 insertions(+), 18 deletions(-) create mode 100644 apk_frauder/TODO.md diff --git a/apk_frauder/TODO.md b/apk_frauder/TODO.md new file mode 100644 index 0000000..d984e4c --- /dev/null +++ b/apk_frauder/TODO.md @@ -0,0 +1,3 @@ +- replace panic/unwrap/expect with results +- tests +- write zip with data descriptor diff --git a/apk_frauder/src/data_descriptor.rs b/apk_frauder/src/data_descriptor.rs index 2daa834..c2900fb 100644 --- a/apk_frauder/src/data_descriptor.rs +++ b/apk_frauder/src/data_descriptor.rs @@ -33,7 +33,7 @@ pub struct DataDescriptor64 { } impl DataDescriptor32 { - const SIGNATURE: Signature = Signature(0x02014b50); + const SIGNATURE: Signature = Signature(0x08074b50); } impl Serializable for DataDescriptor32 { @@ -49,6 +49,13 @@ impl Serializable for DataDescriptor32 { fn deserialize(input: &mut dyn ReadSeek) -> Result { let pos = input.stream_position().unwrap(); //TODO let signature = Signature::deserialize(input)?; + println!( + "Found: 0x{:x}, expected 0x{:x}, eq: {}", + signature.0, + Self::SIGNATURE.0, + signature == Self::SIGNATURE + ); + let use_signature = if signature != Self::SIGNATURE { input.seek(SeekFrom::Start(pos)).unwrap(); //TODO false @@ -75,7 +82,7 @@ impl Serializable for DataDescriptor32 { } impl DataDescriptor64 { - const SIGNATURE: Signature = Signature(0x02014b50); + const SIGNATURE: Signature = Signature(0x08074b50); } impl Serializable for DataDescriptor64 { diff --git a/apk_frauder/src/main.rs b/apk_frauder/src/main.rs index dd31eeb..124ab0c 100644 --- a/apk_frauder/src/main.rs +++ b/apk_frauder/src/main.rs @@ -1,13 +1,10 @@ -use apk_frauder::ZipFileReader; +//use apk_frauder::ZipFileReader; use std::collections::HashMap; use std::env; use std::fs::File; use std::io::Cursor; -use apk_frauder::data_descriptor::{DataDescriptor, DataDescriptor32}; - fn main() { - /* apk_frauder::replace_dex( "app-release.apk", "app-instrumented.apk", @@ -22,17 +19,5 @@ fn main() { env::var("HOME").expect("$HOME not set") )), None::>>>, - );*/ - let mut file = File::open("test_data_descriptor.zip").expect("failed to open file"); - let reader = ZipFileReader::new(&mut file); - println!("{:#?}", &reader.files[..4]); - assert_eq!( - reader.files[0].clone().data_descriptor, - Some(DataDescriptor::Zip32(DataDescriptor32 { - crc_32: reader.files[0].header.crc_32, - compressed_size: reader.files[0].header.compressed_size, - uncompressed_size: reader.files[0].header.uncompressed_size, - use_signature: false, - },),) ); }