From d18692fbefbcd2695b7417059f8f3a4c64c6b9e7 Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Tue, 25 Nov 2025 23:07:03 +0100 Subject: [PATCH] Add module template files Current AOSP keybox can be found at: https://cs.android.com/android/platform/superproject/main/+/main:device/generic/trusty/keymaster_soft_wrapped_attestation_keys.xml However, the support of parsing private keys in iecs format is not implemented yet. --- module/customize.sh | 89 +++++++++++++++++++++++++++++++++ module/daemon | 15 ++++++ module/keybox.xml | 116 +++++++++++++++++++++++++++++++++++++++++++ module/sepolicy.rule | 4 ++ module/service.sh | 11 ++++ module/target.txt | 11 ++++ module/zygisk.json | 6 +++ 7 files changed, 252 insertions(+) create mode 100644 module/customize.sh create mode 100755 module/daemon create mode 100644 module/keybox.xml create mode 100644 module/sepolicy.rule create mode 100644 module/service.sh create mode 100644 module/target.txt create mode 100644 module/zygisk.json diff --git a/module/customize.sh b/module/customize.sh new file mode 100644 index 0000000..373cd42 --- /dev/null +++ b/module/customize.sh @@ -0,0 +1,89 @@ +# shellcheck disable=SC2034 +SKIPUNZIP=1 +MIN_SDK=29 +CONFIG_DIR=/data/adb/tricky_store + +# --- Installation Context Check --- +if [ "$BOOTMODE" != true ]; then + ui_print "! Please install in Magisk Manager or KernelSU Manager" + abort "! Install from recovery is NOT supported" +fi + +if [ "$KSU" = true ] && [ "$KSU_VER_CODE" -lt 10670 ]; then + abort "! Please update your KernelSU and KernelSU Manager" +fi + +# --- Version Info --- +VERSION=$(grep_prop version "${TMPDIR}/module.prop") +ui_print "- Installing TEESimulator $VERSION" +ui_print "" + +# --- Architecture Handling --- +case "$ARCH" in + arm64) ABI_DIR="arm64-v8a" ;; + arm) ABI_DIR="armeabi-v7a" ;; + x64) ABI_DIR="x86_64" ;; + x86) ABI_DIR="x86" ;; + *) abort "! Unsupported architecture: $ARCH" ;; +esac + +ui_print "- Device platform: $ARCH" +ui_print "- Using ABI dir: $ABI_DIR" + +# --- SDK Check --- +if [ "$API" -lt "$MIN_SDK" ]; then + abort "! Unsupported SDK: $API. Minimum required is $MIN_SDK" +else + ui_print "- Device SDK: $API" +fi +ui_print "" + +# --- Helper to install files --- +install_file() { + if ! unzip -qqjo "$ZIPFILE" "$1" -d "$2"; then + abort "! Failed to extract $1" + fi + ui_print "- Extracted $1" +} + +# --- Installation --- +ui_print "- Extracting module files" +for file in customize.sh module.prop service.sh sepolicy.rule daemon; do + install_file "$file" "$MODPATH" +done + +# Handle service.apk or classes.dex +if unzip -l "$ZIPFILE" | grep -q "service.apk"; then + install_file "service.apk" "$MODPATH" +elif unzip -l "$ZIPFILE" | grep -q "classes.dex"; then + install_file "classes.dex" "$MODPATH" +else + abort "! Neither service.apk nor classes.dex found" +fi + +chmod 755 "$MODPATH/daemon" +ui_print "" + +ui_print "- Extracting $ARCH libraries" +install_file "lib/$ABI_DIR/libTEESimulator.so" "$MODPATH" +install_file "lib/$ABI_DIR/libinject.so" "$MODPATH" +ui_print "" + +mv "$MODPATH/libinject.so" "$MODPATH/inject" +chmod 755 "$MODPATH/inject" + +# --- Configuration Files --- +if [ ! -d "$CONFIG_DIR" ]; then + ui_print "- Creating configuration directory" + mkdir -p "$CONFIG_DIR" +fi + +if [ ! -f "$CONFIG_DIR/keybox.xml" ]; then + ui_print "- Adding AOSP software keybox" + install_file "keybox.xml" "$CONFIG_DIR" +fi + +if [ ! -f "$CONFIG_DIR/target.txt" ]; then + ui_print "- Adding default target scope" + install_file "target.txt" "$CONFIG_DIR" +fi diff --git a/module/daemon b/module/daemon new file mode 100755 index 0000000..7cfcf5f --- /dev/null +++ b/module/daemon @@ -0,0 +1,15 @@ +#!/system/bin/sh + +MODDIR=$1 + +# Determine classpath +if [ -f "$MODDIR/classes.dex" ]; then + CLASSPATH="$MODDIR/classes.dex" +elif [ -f "$MODDIR/service.apk" ]; then + CLASSPATH="$MODDIR/service.apk" +else + echo "Error: Neither classes.dex nor service.apk found in $MODDIR" + exit 1 +fi + +exec /system/bin/app_process -Djava.class.path="$CLASSPATH" "$MODDIR" --nice-name=TEESimulator org.matrix.TEESimulator.App diff --git a/module/keybox.xml b/module/keybox.xml new file mode 100644 index 0000000..d63df80 --- /dev/null +++ b/module/keybox.xml @@ -0,0 +1,116 @@ + + + 2 + + + + -----BEGIN EC PRIVATE KEY----- + MHcCAQEEICHghkMqFRmEWc82OlD8FMnarfk19SfC39ceTW28QuVEoAoGCCqGSM49 + AwEHoUQDQgAE6555+EJjWazLKpFMiYbMcK2QZpOCqXMmE/6sy/ghJ0whdJdKKv6l + uU1/ZtTgZRBmNbxTt6CjpnFYPts+Ea4QFA== + -----END EC PRIVATE KEY----- + + + 2 + + -----BEGIN CERTIFICATE----- + MIICeDCCAh6gAwIBAgICEAEwCgYIKoZIzj0EAwIwgZgxCzAJBgNVBAYTAlVTMRMw + EQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRUwEwYD + VQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQxMzAxBgNVBAMMKkFu + ZHJvaWQgS2V5c3RvcmUgU29mdHdhcmUgQXR0ZXN0YXRpb24gUm9vdDAeFw0xNjAx + MTEwMDQ2MDlaFw0yNjAxMDgwMDQ2MDlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UE + CAwKQ2FsaWZvcm5pYTEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdB + bmRyb2lkMTswOQYDVQQDDDJBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVz + dGF0aW9uIEludGVybWVkaWF0ZTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOue + efhCY1msyyqRTImGzHCtkGaTgqlzJhP+rMv4ISdMIXSXSir+pblNf2bU4GUQZjW8 + U7ego6ZxWD7bPhGuEBSjZjBkMB0GA1UdDgQWBBQ//KzWGrE6noEguNUlHMVlux6R + qTAfBgNVHSMEGDAWgBTIrel3TEXDo88NFhDkeUM6IVowzzASBgNVHRMBAf8ECDAG + AQH/AgEAMA4GA1UdDwEB/wQEAwIChDAKBggqhkjOPQQDAgNIADBFAiBLipt77oK8 + wDOHri/AiZi03cONqycqRZ9pDMfDktQPjgIhAO7aAV229DLp1IQ7YkyUBO86fMy9 + Xvsiu+f+uXc/WT/7 + -----END CERTIFICATE----- + + + -----BEGIN CERTIFICATE----- + MIICizCCAjKgAwIBAgIJAKIFntEOQ1tXMAoGCCqGSM49BAMCMIGYMQswCQYDVQQG + EwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmll + dzEVMBMGA1UECgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMTMwMQYD + VQQDDCpBbmRyb2lkIEtleXN0b3JlIFNvZnR3YXJlIEF0dGVzdGF0aW9uIFJvb3Qw + HhcNMTYwMTExMDA0MzUwWhcNMzYwMTA2MDA0MzUwWjCBmDELMAkGA1UEBhMCVVMx + EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT + BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEzMDEGA1UEAwwq + QW5kcm9pZCBLZXlzdG9yZSBTb2Z0d2FyZSBBdHRlc3RhdGlvbiBSb290MFkwEwYH + KoZIzj0CAQYIKoZIzj0DAQcDQgAE7l1ex+HA220Dpn7mthvsTWpdamguD/9/SQ59 + dx9EIm29sa/6FsvHrcV30lacqrewLVQBXT5DKyqO107sSHVBpKNjMGEwHQYDVR0O + BBYEFMit6XdMRcOjzw0WEOR5QzohWjDPMB8GA1UdIwQYMBaAFMit6XdMRcOjzw0W + EOR5QzohWjDPMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgKEMAoGCCqG + SM49BAMCA0cAMEQCIDUho++LNEYenNVg8x1YiSBq3KNlQfYNns6KGYxmSGB7AiBN + C/NR2TB8fVvaNTQdqEcbY6WFZTytTySn502vQX3xvw== + -----END CERTIFICATE----- + + + + + + + + -----BEGIN RSA PRIVATE KEY----- + MIICXQIBAAKBgQDAgyPcVogbuDAgafWwhWHG7r5/BeL1qEIEir6LR752/q7yXPKb + KvoyABQWAUKZiaFfz8aBXrNjWDwv0vIL5Jgyg92BSxbX4YVBeuVKvClqOm21wAQI + O2jFVsHwIzmRZBmGTVC3TUCuykhMdzVsiVoMJ1q/rEmdXX0jYvKcXgLocQIDAQAB + AoGBAL6GCwuZqAKm+xpZQ4p7txUGWwmjbcbpysxr88AsNNfXnpTGYGQo2Ix7f2V3 + wc3qZAdKvo5yht8fCBHclygmCGjeldMu/Ja20IT/JxpfYN78xwPno45uKbqaPF/C + woB2tqiWrx0014gozpvdsfNPnJQEQweBKY4gExZyW728mTpBAkEA4cbZJ2RsCRbs + NoJtWUmDdAwh8bB0xKGlmGfGaXlchdPcRkxbkp6Uv7NODcxQFLEPEzQat/3V9gQU + 0qMmytQcxQJBANpIWZd4XNVjD7D9jFJU+Y5TjhiYOq6ea35qWntdNDdVuSGOvUAy + DSg4fXifdvohi8wti2il9kGPu+ylF5qzr70CQFD+/DJklVlhbtZTThVFCTKdk6PY + ENvlvbmCKSz3i9i624Agro1X9LcdBThv/p6dsnHKNHejSZnbdvjl7OnA1J0CQBW3 + TPJ8zv+Ls2vwTZ2DRrCaL3DS9EObDyasfgP36dH3fUuRX9KbKCPwOstdUgDghX/y + qAPpPu6W1iNc6VRCvCECQQCQp0XaiXCyzWSWYDJCKMX4KFb/1mW6moXI1g8bi+5x + fs0scurgHa2GunZU1M9FrbXx8rMdn4Eiz6XxpVcPmy0l + -----END RSA PRIVATE KEY----- + + + 2 + + -----BEGIN CERTIFICATE----- + MIICtjCCAh+gAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwYzELMAkGA1UEBhMCVVMx + EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcxFTAT + BgNVBAoMDEdvb2dsZSwgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDAeFw0xNjAxMDQx + MjQwNTNaFw0zNTEyMzAxMjQwNTNaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApD + YWxpZm9ybmlhMRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJv + aWQxKTAnBgNVBAMMIEFuZHJvaWQgU29mdHdhcmUgQXR0ZXN0YXRpb24gS2V5MIGf + MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAgyPcVogbuDAgafWwhWHG7r5/BeL1 + qEIEir6LR752/q7yXPKbKvoyABQWAUKZiaFfz8aBXrNjWDwv0vIL5Jgyg92BSxbX + 4YVBeuVKvClqOm21wAQIO2jFVsHwIzmRZBmGTVC3TUCuykhMdzVsiVoMJ1q/rEmd + XX0jYvKcXgLocQIDAQABo2YwZDAdBgNVHQ4EFgQU1AwQG/jNY7n3OVK1DhNcpteZ + k4YwHwYDVR0jBBgwFoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wEgYDVR0TAQH/BAgw + BgEB/wIBADAOBgNVHQ8BAf8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAni1IX4xn + M9waha2Z11Aj6hTsQ7DhnerCI0YecrUZ3GAi5KVoMWwLVcTmnKItnzpPk2sxixZ4 + Fg2Iy9mLzICdhPDCJ+NrOPH90ecXcjFZNX2W88V/q52PlmEmT7K+gbsNSQQiis6f + 9/VCLiVE+iEHElqDtVWtGIL4QBSbnCBjBH8= + -----END CERTIFICATE----- + + + -----BEGIN CERTIFICATE----- + MIICpzCCAhCgAwIBAgIJAP+U2d2fB8gMMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV + BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBW + aWV3MRUwEwYDVQQKDAxHb29nbGUsIEluYy4xEDAOBgNVBAsMB0FuZHJvaWQwHhcN + MTYwMTA0MTIzMTA4WhcNMzUxMjMwMTIzMTA4WjBjMQswCQYDVQQGEwJVUzETMBEG + A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEVMBMGA1UE + CgwMR29vZ2xlLCBJbmMuMRAwDgYDVQQLDAdBbmRyb2lkMIGfMA0GCSqGSIb3DQEB + AQUAA4GNADCBiQKBgQCia63rbi5EYe/VDoLmt5TRdSMfd5tjkWP/96r/C3JHTsAs + Q+wzfNes7UA+jCigZtX3hwszl94OuE4TQKuvpSe/lWmgMdsGUmX4RFlXYfC78hdL + t0GAZMAoDo9Sd47b0ke2RekZyOmLw9vCkT/X11DEHTVm+Vfkl5YLCazOkjWFmwID + AQABo2MwYTAdBgNVHQ4EFgQUKfrxrMxN0kyWQCd1trDpMuUH/i4wHwYDVR0jBBgw + FoAUKfrxrMxN0kyWQCd1trDpMuUH/i4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B + Af8EBAMCAoQwDQYJKoZIhvcNAQELBQADgYEAT3LzNlmNDsG5dFsxWfbwjSVJMJ6j + HBwp0kUtILlNX2S06IDHeHqcOd6os/W/L3BfRxBcxebrTQaZYdKumgf/93y4q+uc + DyQHXrF/unlx/U1bnt8Uqf7f7XzAiF343ZtkMlbVNZriE/mPzsF83O+kqrJVw4Op + Lvtc9mL1J1IXvmM= + -----END CERTIFICATE----- + + + + + diff --git a/module/sepolicy.rule b/module/sepolicy.rule new file mode 100644 index 0000000..c1d02a4 --- /dev/null +++ b/module/sepolicy.rule @@ -0,0 +1,4 @@ +allow keystore system_file unix_dgram_socket * +allow system_file keystore unix_dgram_socket * +allow keystore system_file file * +allow crash_dump keystore process * diff --git a/module/service.sh b/module/service.sh new file mode 100644 index 0000000..b2a3562 --- /dev/null +++ b/module/service.sh @@ -0,0 +1,11 @@ +DEBUG=false + +MODDIR=${0%/*} + +cd $MODDIR + +while true; do + ./daemon "$MODDIR" || exit 1 + # ensure keystore initialized + sleep 2 +done & diff --git a/module/target.txt b/module/target.txt new file mode 100644 index 0000000..9f3ec54 --- /dev/null +++ b/module/target.txt @@ -0,0 +1,11 @@ +com.android.vending +com.google.android.gms +io.github.vvb2060.keyattestation +io.github.vvb2060.mahoshojo +icu.nullptr.nativetest +com.reveny.nativecheck +com.zhenxi.hunter +io.github.qwq233.keyattestation +com.android.nativetest +io.liankong.riskdetector +luna.safe.luna diff --git a/module/zygisk.json b/module/zygisk.json new file mode 100644 index 0000000..4c18421 --- /dev/null +++ b/module/zygisk.json @@ -0,0 +1,6 @@ +{ + "version": "v1.0", + "versionCode": 74, + "zipUrl": "https://github.com/JingMatrix/TEESimulator/releases/download/v1.0/TEESimulator-v1.0-74-release.zip", + "changelog": "https://raw.githubusercontent.com/JingMatrix/TEESimulator/main/module/changelog.md" +}