list file names
This commit is contained in:
parent
ea18640a78
commit
857a67b657
2 changed files with 170 additions and 1 deletions
140
apk_frauder/src/cp437.rs
Normal file
140
apk_frauder/src/cp437.rs
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
/// Convert cp437 encoded string to [`String`].
|
||||
|
||||
pub fn cp437_char_to_char(input: u8) -> char {
|
||||
char::from_u32(match input {
|
||||
0x00..=0x7f => input as u32,
|
||||
0x80 => 0x00c7,
|
||||
0x81 => 0x00fc,
|
||||
0x82 => 0x00e9,
|
||||
0x83 => 0x00e2,
|
||||
0x84 => 0x00e4,
|
||||
0x85 => 0x00e0,
|
||||
0x86 => 0x00e5,
|
||||
0x87 => 0x00e7,
|
||||
0x88 => 0x00ea,
|
||||
0x89 => 0x00eb,
|
||||
0x8a => 0x00e8,
|
||||
0x8b => 0x00ef,
|
||||
0x8c => 0x00ee,
|
||||
0x8d => 0x00ec,
|
||||
0x8e => 0x00c4,
|
||||
0x8f => 0x00c5,
|
||||
0x90 => 0x00c9,
|
||||
0x91 => 0x00e6,
|
||||
0x92 => 0x00c6,
|
||||
0x93 => 0x00f4,
|
||||
0x94 => 0x00f6,
|
||||
0x95 => 0x00f2,
|
||||
0x96 => 0x00fb,
|
||||
0x97 => 0x00f9,
|
||||
0x98 => 0x00ff,
|
||||
0x99 => 0x00d6,
|
||||
0x9a => 0x00dc,
|
||||
0x9b => 0x00a2,
|
||||
0x9c => 0x00a3,
|
||||
0x9d => 0x00a5,
|
||||
0x9e => 0x20a7,
|
||||
0x9f => 0x0192,
|
||||
0xa0 => 0x00e1,
|
||||
0xa1 => 0x00ed,
|
||||
0xa2 => 0x00f3,
|
||||
0xa3 => 0x00fa,
|
||||
0xa4 => 0x00f1,
|
||||
0xa5 => 0x00d1,
|
||||
0xa6 => 0x00aa,
|
||||
0xa7 => 0x00ba,
|
||||
0xa8 => 0x00bf,
|
||||
0xa9 => 0x2310,
|
||||
0xaa => 0x00ac,
|
||||
0xab => 0x00bd,
|
||||
0xac => 0x00bc,
|
||||
0xad => 0x00a1,
|
||||
0xae => 0x00ab,
|
||||
0xaf => 0x00bb,
|
||||
0xb0 => 0x2591,
|
||||
0xb1 => 0x2592,
|
||||
0xb2 => 0x2593,
|
||||
0xb3 => 0x2502,
|
||||
0xb4 => 0x2524,
|
||||
0xb5 => 0x2561,
|
||||
0xb6 => 0x2562,
|
||||
0xb7 => 0x2556,
|
||||
0xb8 => 0x2555,
|
||||
0xb9 => 0x2563,
|
||||
0xba => 0x2551,
|
||||
0xbb => 0x2557,
|
||||
0xbc => 0x255d,
|
||||
0xbd => 0x255c,
|
||||
0xbe => 0x255b,
|
||||
0xbf => 0x2510,
|
||||
0xc0 => 0x2514,
|
||||
0xc1 => 0x2534,
|
||||
0xc2 => 0x252c,
|
||||
0xc3 => 0x251c,
|
||||
0xc4 => 0x2500,
|
||||
0xc5 => 0x253c,
|
||||
0xc6 => 0x255e,
|
||||
0xc7 => 0x255f,
|
||||
0xc8 => 0x255a,
|
||||
0xc9 => 0x2554,
|
||||
0xca => 0x2569,
|
||||
0xcb => 0x2566,
|
||||
0xcc => 0x2560,
|
||||
0xcd => 0x2550,
|
||||
0xce => 0x256c,
|
||||
0xcf => 0x2567,
|
||||
0xd0 => 0x2568,
|
||||
0xd1 => 0x2564,
|
||||
0xd2 => 0x2565,
|
||||
0xd3 => 0x2559,
|
||||
0xd4 => 0x2558,
|
||||
0xd5 => 0x2552,
|
||||
0xd6 => 0x2553,
|
||||
0xd7 => 0x256b,
|
||||
0xd8 => 0x256a,
|
||||
0xd9 => 0x2518,
|
||||
0xda => 0x250c,
|
||||
0xdb => 0x2588,
|
||||
0xdc => 0x2584,
|
||||
0xdd => 0x258c,
|
||||
0xde => 0x2590,
|
||||
0xdf => 0x2580,
|
||||
0xe0 => 0x03b1,
|
||||
0xe1 => 0x00df,
|
||||
0xe2 => 0x0393,
|
||||
0xe3 => 0x03c0,
|
||||
0xe4 => 0x03a3,
|
||||
0xe5 => 0x03c3,
|
||||
0xe6 => 0x00b5,
|
||||
0xe7 => 0x03c4,
|
||||
0xe8 => 0x03a6,
|
||||
0xe9 => 0x0398,
|
||||
0xea => 0x03a9,
|
||||
0xeb => 0x03b4,
|
||||
0xec => 0x221e,
|
||||
0xed => 0x03c6,
|
||||
0xee => 0x03b5,
|
||||
0xef => 0x2229,
|
||||
0xf0 => 0x2261,
|
||||
0xf1 => 0x00b1,
|
||||
0xf2 => 0x2265,
|
||||
0xf3 => 0x2264,
|
||||
0xf4 => 0x2320,
|
||||
0xf5 => 0x2321,
|
||||
0xf6 => 0x00f7,
|
||||
0xf7 => 0x2248,
|
||||
0xf8 => 0x00b0,
|
||||
0xf9 => 0x2219,
|
||||
0xfa => 0x00b7,
|
||||
0xfb => 0x221a,
|
||||
0xfc => 0x207f,
|
||||
0xfd => 0x00b2,
|
||||
0xfe => 0x25a0,
|
||||
0xff => 0x00a0,
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
pub fn cp437_to_string(input: &[u8]) -> String {
|
||||
input.iter().cloned().map(cp437_char_to_char).collect()
|
||||
}
|
||||
|
|
@ -3,6 +3,13 @@ use std::io::{Read, Seek, SeekFrom, Write};
|
|||
|
||||
use androscalpel_serializer::{ReadSeek, Result, Serializable};
|
||||
|
||||
mod cp437;
|
||||
|
||||
enum Encoding {
|
||||
CP437,
|
||||
UTF8,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serializable, Default)]
|
||||
//struct Signature(pub [u8; 4]);
|
||||
struct Signature(pub u32);
|
||||
|
|
@ -121,6 +128,23 @@ impl Serializable for FileHeader {
|
|||
impl FileHeader {
|
||||
const SIGNATURE: Signature = Signature(0x02014b50);
|
||||
const MIN_SIZE: usize = 4 + 6 * 2 + 4 * 3 + 5 * 2 + 4 * 2;
|
||||
|
||||
const MASK_UTF8_FILENAME: u16 = 1 << 11;
|
||||
|
||||
fn get_name_encoding(&self) -> Encoding {
|
||||
if self.general_purpose_flag & Self::MASK_UTF8_FILENAME != 0 {
|
||||
Encoding::UTF8
|
||||
} else {
|
||||
Encoding::CP437
|
||||
}
|
||||
}
|
||||
|
||||
fn get_name(&self) -> String {
|
||||
match self.get_name_encoding() {
|
||||
Encoding::UTF8 => std::str::from_utf8(&self.file_name).unwrap().into(),
|
||||
Encoding::CP437 => cp437::cp437_to_string(&self.file_name),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
|
|
@ -423,10 +447,15 @@ impl<T: Read + Seek> ZipFile<T> {
|
|||
comment_size -= 1;
|
||||
Some(file_size - comment_size as u64 - EndCentralDirectory::MIN_SIZE as u64)
|
||||
}
|
||||
|
||||
fn get_file_names(&self) -> Vec<String> {
|
||||
self.files.iter().map(|f| f.get_name()).collect()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
//let file = File::open("app-release.apk").expect("failed to open file");
|
||||
let file = File::open("tst_64.zip").expect("failed to open file");
|
||||
let zip_fime = ZipFile::new(file);
|
||||
let zip_file = ZipFile::new(file);
|
||||
println!("{}", zip_file.get_file_names().join("\n"));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue