fix for several issues
This commit is contained in:
parent
17a9fda06c
commit
606c635a91
5 changed files with 118 additions and 11 deletions
|
|
@ -335,7 +335,7 @@ def collect_runtime(
|
|||
"cnstr_new_inst_data": [],
|
||||
"dyn_code_load": [],
|
||||
"classloaders": {},
|
||||
"app_info": {},
|
||||
"app_info": None,
|
||||
}
|
||||
try:
|
||||
env = dict(os.environ)
|
||||
|
|
|
|||
84
patcher/Cargo.lock
generated
84
patcher/Cargo.lock
generated
|
|
@ -136,7 +136,7 @@ dependencies = [
|
|||
"anyhow",
|
||||
"flate2",
|
||||
"log",
|
||||
"rand",
|
||||
"rand 0.8.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -154,6 +154,12 @@ dependencies = [
|
|||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.4"
|
||||
|
|
@ -335,7 +341,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
|
|||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi",
|
||||
"wasi 0.14.2+wasi-0.2.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -438,6 +456,7 @@ dependencies = [
|
|||
"clap",
|
||||
"env_logger",
|
||||
"log",
|
||||
"rand 0.9.1",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
|
@ -484,6 +503,12 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "r-efi"
|
||||
version = "5.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.8.5"
|
||||
|
|
@ -491,8 +516,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
"rand_chacha 0.3.1",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
|
||||
dependencies = [
|
||||
"rand_chacha 0.9.0",
|
||||
"rand_core 0.9.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -502,7 +537,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
"rand_core 0.6.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core 0.9.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -511,7 +556,16 @@ version = "0.6.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"getrandom 0.2.15",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
|
||||
dependencies = [
|
||||
"getrandom 0.3.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -665,6 +719,15 @@ version = "0.11.0+wasi-snapshot-preview1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.14.2+wasi-0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
|
||||
dependencies = [
|
||||
"wit-bindgen-rt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.59.0"
|
||||
|
|
@ -738,6 +801,15 @@ version = "0.52.6"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen-rt"
|
||||
version = "0.39.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.24"
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ env_logger = "0.11.6"
|
|||
serde = "1.0.217"
|
||||
serde_json = "1.0.138"
|
||||
log = "0.4.25"
|
||||
rand = "0.9.1"
|
||||
|
||||
[profile.minsizerelease]
|
||||
inherits = "release"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
use anyhow::Context;
|
||||
use log::warn;
|
||||
use rand::distr::{Alphanumeric, SampleString};
|
||||
use std::collections::HashMap;
|
||||
use std::fs::File;
|
||||
use std::io::{Cursor, Read};
|
||||
|
|
@ -56,7 +58,16 @@ fn main() {
|
|||
|
||||
// Reflection
|
||||
let mut test_methods = HashMap::new();
|
||||
let test_class = IdType::class("theseus/T");
|
||||
// Generate a new, unique name
|
||||
let test_class = loop {
|
||||
let ty = IdType::class(&format!(
|
||||
"theseus/{}/T",
|
||||
Alphanumeric.sample_string(&mut rand::rng(), 16),
|
||||
));
|
||||
if apk.get_class(&ty).is_none() {
|
||||
break ty;
|
||||
}
|
||||
};
|
||||
for method in rt_data.get_method_referenced().iter() {
|
||||
if let Some(class) = apk.get_class_mut(&method.class_) {
|
||||
//println!("{:#?}", class.direct_methods.keys());
|
||||
|
|
@ -76,7 +87,18 @@ fn main() {
|
|||
})
|
||||
.unwrap()
|
||||
};
|
||||
transform_method(method, &rt_data, test_class.clone(), &mut test_methods).unwrap();
|
||||
// May be native method or other kind of android shenanigan.
|
||||
if method.code.is_some() {
|
||||
if let Err(err) =
|
||||
transform_method(method, &rt_data, test_class.clone(), &mut test_methods)
|
||||
{
|
||||
warn!(
|
||||
"Failed to patch method {}: {}",
|
||||
method.descriptor.__str__(),
|
||||
err
|
||||
);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
let mut class = Class::new(test_class.get_name()).unwrap();
|
||||
|
|
@ -85,7 +107,19 @@ fn main() {
|
|||
.into_values()
|
||||
.map(|v| (v.descriptor.clone(), v))
|
||||
.collect();
|
||||
apk.add_class("classes.dex", class).unwrap();
|
||||
// Add the new testing class in a separateed dex file to avoid breaking
|
||||
// the dex method limit.
|
||||
// TODO: check the number of methods in the existing dex files to avoid generated
|
||||
// a new one each time.
|
||||
let mut i = 2;
|
||||
let new_dex_name = loop {
|
||||
let name = format!("classes{}.dex", i);
|
||||
if !apk.dex_files.contains_key(&name) {
|
||||
break name;
|
||||
};
|
||||
i += 1;
|
||||
};
|
||||
apk.add_class(&new_dex_name, class).unwrap();
|
||||
let mut dex_files = vec![];
|
||||
let mut files = apk.gen_raw_dex().unwrap();
|
||||
let mut i = 0;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ pub struct RuntimeData {
|
|||
/// Additionnal classloader data.
|
||||
pub classloaders: HashMap<String, ClassLoaderData>,
|
||||
/// Additionnal application data.
|
||||
pub app_info: AppInfo,
|
||||
pub app_info: Option<AppInfo>,
|
||||
}
|
||||
|
||||
impl RuntimeData {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue