mirror of
https://github.com/Ap0dexMe0/unixtract.git
synced 2026-07-15 21:00:03 +02:00
mtk_pkg & old: fix bug in version detection, add compression detection. fix mistake in main
This commit is contained in:
@@ -44,7 +44,10 @@ impl PartEntry {
|
||||
self.name().is_ascii()
|
||||
}
|
||||
fn is_encrypted(&self) -> bool {
|
||||
(self.flags & 1 << 0) == 1 << 0
|
||||
(self.flags & 1 << 0) != 0
|
||||
}
|
||||
fn is_compressed(&self) -> bool { //lzhs fs
|
||||
(self.flags & 1 << 8) != 0
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +94,8 @@ pub fn extract_mtk_pkg(mut file: &File, output_folder: &str) -> Result<(), Box<d
|
||||
break
|
||||
}
|
||||
|
||||
println!("\n#{} - {}, Size: {} {}", part_n, part_entry.name(), part_entry.size, if part_entry.is_encrypted() {"[ENCRYPTED]"} else {""} );
|
||||
println!("\n#{} - {}, Size: {}{} {}",
|
||||
part_n, part_entry.name(), part_entry.size, if part_entry.is_compressed() {" [COMPRESSED]"} else {""}, if part_entry.is_encrypted() {"[ENCRYPTED]"} else {""} );
|
||||
|
||||
let data = common::read_exact(&mut file, part_entry.size as usize + 48)?;
|
||||
|
||||
@@ -142,9 +146,11 @@ pub fn extract_mtk_pkg(mut file: &File, output_folder: &str) -> Result<(), Box<d
|
||||
//strip iMtK thing and get version
|
||||
let extra_header_len = if &out_data[48..52] == b"iMtK" {
|
||||
let imtk_len = u32::from_le_bytes(out_data[52..56].try_into().unwrap());
|
||||
if &out_data[56..60] != b"iPAd" {
|
||||
let version_len = u32::from_le_bytes(out_data[56..60].try_into().unwrap());
|
||||
let version = common::string_from_bytes(&out_data[60..60 + version_len as usize]);
|
||||
println!("- Version: {}", version);
|
||||
}
|
||||
imtk_len + 8
|
||||
} else {
|
||||
0
|
||||
|
||||
@@ -81,9 +81,8 @@ pub fn extract_mtk_pkg_old(mut file: &File, output_folder: &str) -> Result<(), B
|
||||
while file.stream_position()? < file_size as u64 {
|
||||
part_n += 1;
|
||||
let part_entry: PartEntry = file.read_le()?;
|
||||
let is_encrypted = if (part_entry.flags & 1 << 0) == 1 << 0 {true} else {false};
|
||||
|
||||
println!("\n#{} - {}, Size: {} {}", part_n, part_entry.name(), part_entry.size, if is_encrypted {"[ENCRYPTED]"} else {""} );
|
||||
println!("\n#{} - {}, Size: {} {}", part_n, part_entry.name(), part_entry.size, if part_entry.is_encrypted() {"[ENCRYPTED]"} else {""} );
|
||||
|
||||
let data = common::read_exact(&mut file, part_entry.size as usize)?;
|
||||
let out_data;
|
||||
@@ -99,9 +98,11 @@ pub fn extract_mtk_pkg_old(mut file: &File, output_folder: &str) -> Result<(), B
|
||||
//strip iMtK thing and get version
|
||||
let extra_header_len = if &out_data[0..4] == b"iMtK" {
|
||||
let imtk_len = u32::from_le_bytes(out_data[4..8].try_into().unwrap());
|
||||
if &out_data[56..60] != b"iPAd" {
|
||||
let version_len = u32::from_le_bytes(out_data[8..12].try_into().unwrap());
|
||||
let version = common::string_from_bytes(&out_data[12..12 + version_len as usize]);
|
||||
println!("- Version: {}", version);
|
||||
}
|
||||
imtk_len + 8
|
||||
} else {
|
||||
0
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
println!("Novatek TIMG file detected!");
|
||||
formats::nvt_timg::extract_nvt_timg(&file, &output_path)?;
|
||||
}
|
||||
if formats::android_ota_payload::is_android_ota_payload_file(&file) {
|
||||
else if formats::android_ota_payload::is_android_ota_payload_file(&file) {
|
||||
println!("Android OTA payload file detected!");
|
||||
formats::android_ota_payload::extract_android_ota_payload(&file, &output_path)?;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user