Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
magisk.py113 linesDownload Raw Back to utils
1import hashlib2import os3from zipfile import ZipFile4 5from cryptography import x5096from cryptography.hazmat.primitives import serialization7 8from mitmproxy import certs9from mitmproxy import ctx10from mitmproxy.options import CONF_BASENAME11 12# The following 3 variables are for including in the magisk module as text file13MODULE_PROP_TEXT = """id=mitmproxycert14name=MITMProxy cert15version=v116versionCode=117author=mitmproxy18description=Adds the mitmproxy certificate to the system store19template=3"""20 21CONFIG_SH_TEXT = """22MODID=mitmproxycert23AUTOMOUNT=true24PROPFILE=false25POSTFSDATA=false26LATESTARTSERVICE=false27 28print_modname() {29  ui_print "*******************************"30  ui_print "    MITMProxy cert installer   "31  ui_print "*******************************"32}33 34REPLACE="35"36 37set_permissions() {38  set_perm_recursive  $MODPATH  0  0  0755  064439}40"""41 42UPDATE_BINARY_TEXT = """43#!/sbin/sh44 45#################46# Initialization47#################48 49umask 02250 51# echo before loading util_functions52ui_print() { echo "$1"; }53 54require_new_magisk() {55  ui_print "*******************************"56  ui_print " Please install Magisk v20.4+! "57  ui_print "*******************************"58  exit 159}60 61OUTFD=$262ZIPFILE=$363 64mount /data 2>/dev/null65[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk66. /data/adb/magisk/util_functions.sh67[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk68 69install_module70exit 071"""72 73 74def get_ca_from_files() -> x509.Certificate:75    # Borrowed from tlsconfig76    certstore_path = os.path.expanduser(ctx.options.confdir)77    certstore = certs.CertStore.from_store(78        path=certstore_path,79        basename=CONF_BASENAME,80        key_size=ctx.options.key_size,81        passphrase=ctx.options.cert_passphrase.encode("utf8")82        if ctx.options.cert_passphrase83        else None,84    )85    return certstore.default_ca._cert86 87 88def subject_hash_old(ca: x509.Certificate) -> str:89    # Mimics the -subject_hash_old option of openssl used for android certificate names90    full_hash = hashlib.md5(ca.subject.public_bytes()).digest()91    sho = full_hash[0] | (full_hash[1] << 8) | (full_hash[2] << 16) | full_hash[3] << 2492    return hex(sho)[2:]93 94 95def write_magisk_module(path: str):96    # Makes a zip file that can be loaded by Magisk97    # Android certs are stored as DER files98    ca = get_ca_from_files()99    der_cert = ca.public_bytes(serialization.Encoding.DER)100    with ZipFile(path, "w") as zipp:101        # Main cert file, name is always the old subject hash with a '.0' added102        zipp.writestr(f"system/etc/security/cacerts/{subject_hash_old(ca)}.0", der_cert)103        zipp.writestr("module.prop", MODULE_PROP_TEXT)104        zipp.writestr("config.sh", CONFIG_SH_TEXT)105        zipp.writestr("META-INF/com/google/android/updater-script", "#MAGISK")106        zipp.writestr("META-INF/com/google/android/update-binary", UPDATE_BINARY_TEXT)107        zipp.writestr(108            "common/file_contexts_image", "/magisk(/.*)? u:object_r:system_file:s0"109        )110        zipp.writestr("common/post-fs-data.sh", "MODDIR=${0%/*}")111        zipp.writestr("common/service.sh", "MODDIR=${0%/*}")112        zipp.writestr("common/system.prop", "")113 
codekingpro/portable-devtools · Team Ai