cloudfox-coreshift-core 2.11.0

Low-level Linux and Android systems primitives for CoreShift (CloudFox)
Documentation
use coreshift_core::android::dex::{find_transaction_code, resolve_uid_observer_codes};

fn main() {
    let jar = std::env::args().nth(1).unwrap_or_else(|| "/system/framework/framework.jar".to_string());
    let am = "Landroid/app/IActivityManager$Stub;";
    let uid_obs = "Landroid/app/IUidObserver$Stub;";

    println!("jar = {jar}");
    for (name, desc, field) in [
        ("registerUidObserver", am, "TRANSACTION_registerUidObserver"),
        ("registerUidObserverForUids", am, "TRANSACTION_registerUidObserverForUids"),
        ("unregisterUidObserver", am, "TRANSACTION_unregisterUidObserver"),
        ("onUidGone", uid_obs, "TRANSACTION_onUidGone"),
        ("onUidActive", uid_obs, "TRANSACTION_onUidActive"),
        ("onUidIdle", uid_obs, "TRANSACTION_onUidIdle"),
        ("onUidStateChanged", uid_obs, "TRANSACTION_onUidStateChanged"),
        ("onUidProcAdjChanged", uid_obs, "TRANSACTION_onUidProcAdjChanged"),
        ("onUidCachedChanged", uid_obs, "TRANSACTION_onUidCachedChanged"),
    ] {
        match find_transaction_code(&jar, desc, field) {
            Some(c) => println!("OK   {name:32} {c}"),
            None => println!("MISS {name:32}"),
        }
    }

    match resolve_uid_observer_codes() {
        Some(codes) => println!(
            "resolver: reg={} unreg={} for_uids={:?} gone={} active={} idle={} cached={} state={} adj={}",
            codes.register_code,
            codes.unregister_code,
            codes.register_for_uids_code,
            codes.on_gone_code,
            codes.on_active_code,
            codes.on_idle_code,
            codes.on_cached_code,
            codes.on_state_code,
            codes.on_adj_code,
        ),
        None => println!("resolver: FAILED (hardcoded /system path — needs device run)"),
    }
}