78 lines
2.7 KiB
Rust
78 lines
2.7 KiB
Rust
use apk_frauder::ZipFileReader;
|
|
use apk_frauder::ZipFileWriter;
|
|
use std::fs::File;
|
|
|
|
use std::process::Command;
|
|
|
|
fn main() {
|
|
// Remove previous generation
|
|
println!("Remove files from previous run");
|
|
Command::new("rm").arg("app-striped.apk").status().unwrap();
|
|
Command::new("rm")
|
|
.arg("app-instrumented.apk")
|
|
.status()
|
|
.unwrap();
|
|
Command::new("rm")
|
|
.arg("app-instrumented-signed.apk")
|
|
.status()
|
|
.unwrap();
|
|
Command::new("rm")
|
|
.arg("app-instrumented-aligned.apk")
|
|
.status()
|
|
.unwrap();
|
|
|
|
println!("Read the headers of the existing dex file and strip the apk signature and dex files");
|
|
let file = File::open("app-release.apk").expect("failed to open file");
|
|
let mut apk = ZipFileReader::new(file);
|
|
|
|
let mut file_info_ref = (*apk.get_classes_file_info().first().unwrap()).clone();
|
|
|
|
apk.unlink_signature_files();
|
|
apk.unlink_bytecode_files();
|
|
|
|
let out_file = File::create("app-striped.apk").expect("failed to create file");
|
|
let mut apk_out = ZipFileWriter::new(out_file, apk.zip64_end_of_central_directory.clone());
|
|
for f in apk.files.clone() {
|
|
apk_out.insert_file_from_zip(f, &mut apk);
|
|
}
|
|
apk_out.write_central_directory();
|
|
|
|
println!("Insert the dex file to the stripped apk with the header of the original dex file");
|
|
let file = File::open("app-striped.apk").expect("failed to open file");
|
|
let mut bytecodes = File::open("classes.dex").expect("failed to open file");
|
|
let mut apk = ZipFileReader::new(file);
|
|
let out_file = File::create("app-instrumented.apk").expect("failed to create file");
|
|
let mut apk_out = ZipFileWriter::new(out_file, apk.zip64_end_of_central_directory.clone());
|
|
for f in apk.files.clone() {
|
|
apk_out.insert_file_from_zip(f, &mut apk);
|
|
}
|
|
file_info_ref.set_name("classes.dex");
|
|
apk_out.insert_file(
|
|
&mut bytecodes,
|
|
file_info_ref.header,
|
|
Some(file_info_ref.local_header),
|
|
);
|
|
apk_out.write_central_directory();
|
|
|
|
println!("Align the apk");
|
|
// This could probably be performed by ourself
|
|
Command::new("/home/histausse/Android/Sdk/build-tools/34.0.0/zipalign")
|
|
.arg("-v")
|
|
.arg("-p")
|
|
.arg("4")
|
|
.arg("app-instrumented.apk")
|
|
.arg("app-instrumented-aligned.apk")
|
|
.status()
|
|
.unwrap();
|
|
|
|
println!("Sign the apk");
|
|
Command::new("/home/histausse/Android/Sdk/build-tools/34.0.0/apksigner")
|
|
.arg("sign")
|
|
.arg("--ks")
|
|
.arg("/home/histausse/AndroidStudioProjects/TestApplication/my-release-key.jks")
|
|
.arg("--out")
|
|
.arg("app-instrumented-signed.apk")
|
|
.arg("app-instrumented-aligned.apk")
|
|
.status()
|
|
.unwrap();
|
|
}
|