xiongzhu hai 10 meses
pai
achega
69ca2b9380
Modificáronse 3 ficheiros con 482 adicións e 176 borrados
  1. 142 14
      injects/spoof_gms.js
  2. 292 0
      scripts/connect.js
  3. 48 162
      scripts/gms.js

+ 142 - 14
injects/spoof_gms.js

@@ -2,38 +2,166 @@ import frida from 'frida'
 import fs from 'fs'
 import url from 'url'
 import path from 'path'
+import util from 'util'
+import Vorpal from 'vorpal'
+import { spawn, execSync } from 'child_process'
 import { setTimeout } from 'timers/promises'
 
 const filePath = url.fileURLToPath(import.meta.url)
 const __dirname = path.dirname(filePath)
 
-const mcc = '255'
-const mnc = '06'
-const simOperator = '25506'
-const networkOperator = '25506'
-const simSerialNumber = '89380062300689132983'
-const iccId = simSerialNumber
-const number = '969379250'
-const imei = '860114061248785'
-const imsi = '255065209546456'
-const countryIso = 'ua'
-const subId = '8'
+function loadSource(filePath) {
+    Log.s(`Loading ${filePath}`)
+    return fs.readFileSync(path.resolve(__dirname, filePath)).toString()
+}
+
+class Log {
+    static TAG = ''
+    static format(...msg) {
+        let m = []
+        for (let i = 0; i < msg.length; i++) {
+            if (typeof msg[i] === 'object') {
+                if ('[object Object]' === msg[i].toString()) {
+                    m.push(util.inspect(msg[i]))
+                }
+            } else {
+                m.push(msg[i])
+            }
+        }
+        m = m.join(' ')
+        return m
+    }
+    static i(...msg) {
+        console.log(`\x1b[30m${this.TAG} ${this.format(...msg)}\x1b[0m`)
+    }
+    static w(...msg) {
+        console.log(`\x1b[33m${this.TAG} ${this.format(...msg)}\x1b[0m`)
+    }
+    static e(...msg) {
+        console.log(`\x1b[31m${this.TAG} ${this.format(...msg)}\x1b[0m`)
+    }
+    static s(...msg) {
+        console.log(`\x1b[32m${this.TAG} ${this.format(...msg)}\x1b[0m`)
+    }
+}
 
 let device = null
+let tracers = []
+
+async function stop() {
+    Log.i('[*] Stopping all tracers')
+    for (const tracer of tracers) {
+        Log.i('[*] Stopping', tracer.pid)
+        tracer.session.detach()
+        try {
+            await device.kill(tracer.pid)
+        } catch (error) {}
+    }
+    process.exit(1)
+}
+
+process.on('SIGTERM', stop)
+process.on('SIGINT', stop)
 
 async function main() {
     device = await frida.getUsbDevice()
+    device.spawnAdded.connect(onSpawnAdded)
+
+    Log.i('[*] Enabling spawn gating')
+    await device.enableSpawnGating()
+    Log.i('[*] Enabled spawn gating')
+
+    // Log.i("[*] Spawning com.google.android.apps.messaging")
+    // const pid = await device.spawn("com.google.android.apps.messaging")
+    // Log.i("[*] Spawned com.google.android.apps.messaging: " + pid)
+    // const tracer = await Tracer.open(pid)
+    // tracers.push(tracer)
     const processes = await device.enumerateProcesses()
     for (const process of processes) {
         if (process.name.startsWith('com.google.android.gms')) {
             console.log('[*] Attaching to', process.pid, process.name)
             const session = await device.attach(process.pid)
-            const script = await session.createScript(
-                fs.readFileSync(path.resolve(__dirname, '../scripts/gms.js'))
-            )
+            const script = await session.createScript(loadSource('../scripts/gms.js'))
             await script.load()
         }
     }
 }
 
+async function onSpawnAdded(spawn) {
+    try {
+        if (spawn.identifier.startsWith('com.google.android.gms')) {
+            Log.i('[*] Tracing', spawn.pid, spawn.identifier)
+            const tracer = await Tracer.open(spawn.pid, '../scripts/gms.js')
+            tracers.push(tracer)
+        } else {
+            Log.i('[*] Resuming', spawn.pid, spawn.identifier)
+            await device.resume(spawn.pid)
+        }
+    } catch (e) {
+        Log.e(`err: ${e}`)
+    }
+}
+
+class Tracer {
+    static async open(pid, source) {
+        const tracer = new Tracer(pid, source)
+        await tracer._initialize()
+        return tracer
+    }
+
+    constructor(pid, sourceFile) {
+        this.pid = pid
+        this.sourceFile = sourceFile
+        this.source = loadSource(sourceFile)
+        this.session = null
+        this.script = null
+    }
+
+    async _initialize() {
+        const session = await device.attach(this.pid)
+        this.session = session
+        session.detached.connect(this._onSessionDetached.bind(this))
+
+        const script = await session.createScript(this.source)
+        this.script = script
+        script.message.connect(this._onScriptMessage.bind(this))
+        await script.load()
+
+        // const script_ssl = await session.createScript(source_ssl)
+        // await script_ssl.load()
+
+        try {
+            await device.resume(this.pid)
+        } catch (e) {
+            Log.e(e)
+        }
+    }
+
+    async reload() {
+        if (this.script) {
+            this.script.unload()
+        }
+        this.source = loadSource(this.sourceFile)
+        this.script = await this.session.createScript(this.source)
+        this.script.message.connect(this._onScriptMessage.bind(this))
+        await this.script.load()
+    }
+
+    _onSessionDetached(reason) {
+        Log.i(`[PID ${this.pid}] onSessionDetached(reason='${reason}')`)
+        const i = tracers.findIndex((tracer) => tracer.pid === this.pid)
+        if (i !== -1) {
+            tracers.splice(i, 1)
+        }
+    }
+
+    _onScriptMessage(message, data) {
+        if (message.type === 'error') {
+            Log.e(`[PID ${this.pid}] onScriptMessage()`, message, data ? JSON.stringify(data) : '')
+        } else {
+            Log.i(`[PID ${this.pid}] onScriptMessage()`, message, data ? JSON.stringify(data) : '')
+        }
+    }
+}
+
 main()

+ 292 - 0
scripts/connect.js

@@ -0,0 +1,292 @@
+function trace(tag) {
+    Log.e((tag || '') + Java.use('android.util.Log').getStackTraceString(Java.use('java.lang.Throwable').$new()))
+}
+
+function randomMac() {
+    var mac = '00:16:3e'
+    for (var i = 0; i < 3; i++) {
+        mac += ':' + ('00' + Math.floor(Math.random() * 256).toString(16)).slice(-2)
+    }
+    return mac
+}
+
+function buff2json(buf) {
+    console.log(`buffer length: ${buf.byteLength}`)
+    try {
+        var decoded = String.fromCharCode(...new Uint8Array(buf))
+        console.log(`decoded: ${decoded}`)
+        return JSON.parse(decoded.trim())
+    } catch (e) {
+        console.error(e)
+        return null
+    }
+}
+
+class Interaction {
+    failure(err) {
+        console.error(err.message)
+        Java.use('android.util.Log').d('frida-system_server', err.message)
+    }
+
+    accepted(connection) {
+        console.warn('accepted')
+        connection.input.read(2000).then((data) => {
+            Java.use('android.util.Log').d('frida-system_server', data + '')
+            try {
+                const json = buff2json(data)
+                console.log('received', json)
+                this.messageFn && this.messageFn(json)
+            } catch (e) {}
+            connection.close()
+        })
+    }
+
+    accept_loop(listener) {
+        var next_iter = this.accept_loop.bind(this, listener)
+        listener
+            .accept()
+            .then(this.accepted.bind(this))
+            .catch(this.failure.bind(this))
+            .finally(function () {
+                setImmediate(next_iter)
+            })
+    }
+
+    listened(listener) {
+        console.warn('listened')
+        this.accept_loop(listener)
+    }
+
+    start(port, messageFn) {
+        this.messageFn = messageFn
+        console.warn('starting on port', port)
+        Socket.listen({ family: 'ipv4', host: '0.0.0.0', port: port })
+            .then(this.listened.bind(this))
+            .catch(this.failure.bind(this))
+    }
+}
+
+setImmediate(() => {
+    Java.perform(function () {
+        const Log = Java.use('android.util.Log')
+        const Uri = Java.use('android.net.Uri')
+        const File = Java.use('java.io.File')
+
+        const BufferedReader = Java.use('java.io.BufferedReader')
+        const FileInputStream = Java.use('java.io.FileInputStream')
+        const FileOutputStream = Java.use('java.io.FileOutputStream')
+        const InputStreamReader = Java.use('java.io.InputStreamReader')
+        const OutputStreamWriter = Java.use('java.io.OutputStreamWriter')
+
+        function log(msg) {
+            console.log(`\x1b[32m[system_server] ${msg}\x1b[0m`)
+            Log.d('frida-system_server', msg + '')
+        }
+
+        function getContext() {
+            try {
+                var ActivityThread = Java.use('android.app.ActivityThread')
+                var application = ActivityThread.currentApplication()
+                return application.getApplicationContext()
+            } catch (e) {
+                console.log(e)
+                return null
+            }
+        }
+
+        function readFile(file) {
+            if (!file.exists()) {
+                return null
+            }
+            var fileInputStream = FileInputStream.$new(file)
+
+            var inputStreamReader = InputStreamReader.$new(Java.cast(fileInputStream, Java.use('java.io.InputStream')))
+            var bufferedReader = BufferedReader.$new(inputStreamReader)
+            var line
+            var content = ''
+            while ((line = bufferedReader.readLine()) !== null) {
+                content += line + '\n'
+            }
+
+            bufferedReader.close()
+            inputStreamReader.close()
+            fileInputStream.close()
+
+            return content
+        }
+
+        function writeFile(file, content) {
+            if (!file.exists()) {
+                file.createNewFile()
+            }
+            var fileOutputStream = FileOutputStream.$new(file)
+            var outputStreamWriter = OutputStreamWriter.$new(
+                Java.cast(fileOutputStream, Java.use('java.io.OutputStream'))
+            )
+            outputStreamWriter.write(content, 0, content.length)
+            outputStreamWriter.flush()
+            outputStreamWriter.close()
+            fileOutputStream.close()
+        }
+
+        function readConfig() {
+            const configFile = File.$new('/data/system/config.json')
+            log(`read config from ${configFile.getAbsolutePath()}`)
+            const json = readFile(configFile)
+            if (!json) {
+                return {}
+            } else {
+                log(`config: ${json}`)
+                return JSON.parse(json)
+            }
+        }
+
+        function saveConfig(config) {
+            const configFile = File.$new('/data/system/config.json')
+            log(`save config to ${configFile.getAbsolutePath()}`)
+            const json = JSON.stringify(config)
+            log(`config: ${json}`)
+            writeFile(configFile, json)
+        }
+
+        function queryConfig(key) {
+            const context = getContext()
+            if (!context) {
+                return null
+            }
+            const cr = context.getContentResolver()
+            const uri = Uri.parse('content://SimInfo')
+            const cursor = cr.query(uri, null, null, null, null)
+            if (!cursor) {
+                return null
+            }
+            if (!cursor.moveToFirst()) {
+                cursor.close()
+                return null
+            }
+            const idx = cursor.getColumnIndex(key)
+            if (idx < 0) {
+                cursor.close()
+                return null
+            }
+            const value = cursor.getString(idx)
+            cursor.close()
+            return value
+        }
+
+        // saveConfig({ a: 1 })
+        let config = readConfig()
+
+        const DeviceIdentifiersPolicy = Java.use(
+            'com.android.server.os.DeviceIdentifiersPolicyService$DeviceIdentifiersPolicy'
+        )
+
+        DeviceIdentifiersPolicy.getSerial.overload().implementation = function () {
+            const original = this.getSerial()
+            const spoof = readConfig().serialNo || original
+            log(`DeviceIdentifiersPolicy.getSerial() called, returning: ${spoof}, original: ${original}`)
+            return spoof
+        }
+
+        DeviceIdentifiersPolicy.getSerialForPackage.overload('java.lang.String', 'java.lang.String').implementation =
+            function (callingPackage, callingFeatureId) {
+                const original = this.getSerialForPackage(callingPackage, callingFeatureId)
+                const spoof = readConfig().serialNo || original
+                log(`DeviceIdentifiersPolicy.getSerialForPackage(${callingPackage}, ${callingFeatureId}) called`)
+                log(`  ${original} -> ${spoof}`)
+                return spoof
+            }
+
+        const classLoaders = Java.enumerateClassLoadersSync()
+        for (let i of classLoaders) {
+            if (i.toString().includes('service-connectivity')) {
+                log(i)
+                Java.classFactory.loader = i
+            }
+        }
+
+        const ConnectivityService = Java.use('com.android.server.ConnectivityService')
+        log(ConnectivityService)
+        // ConnectivityService.getActiveNetworkInfo.overload().implementation = function () {
+        //     log('getActiveNetworkInfo')
+        //     const res = this.getActiveNetworkInfo()
+        //     log(res)
+        //     return res
+        // }
+        ConnectivityService.getNetworkInfo.overload('int').implementation = function (networkType) {
+            log('getNetworkInfo')
+            const res = this.getNetworkInfo(networkType)
+            log(res)
+            return res
+        }
+
+        const InterfaceParams = Java.use('android.net.connectivity.com.android.net.module.util.InterfaceParams')
+        InterfaceParams.getByName.overload('java.lang.String').implementation = function (name) {
+            log('getByName')
+            const res = this.getByName(name)
+            log(res)
+            return res
+        }
+        InterfaceParams.getMacAddress.overload('java.net.NetworkInterface').implementation = function (
+            networkInterface
+        ) {
+            log('getMacAddress')
+            const res = this.getMacAddress(networkInterface)
+            log(res)
+            return res
+        }
+
+        const NetworkInterface = Java.use('java.net.NetworkInterface')
+        NetworkInterface.$init.overload().implementation = function () {
+            log('NetworkInterface')
+            const res = this.$new()
+            log(res)
+            return res
+        }
+        NetworkInterface.$init.overload('java.lang.String', 'int', '[Ljava.net.InetAddress;').implementation =
+            function (name, index, addrs) {
+                log('NetworkInterface')
+                const res = this.$new(name, index, addrs)
+                log(res)
+                return res
+            }
+
+        const wifiClassLoader = classLoaders.find((i) => i.toString().includes('wifi'))
+        Java.classFactory.loader = wifiClassLoader
+        const WifiServiceImpl = Java.use('com.android.server.wifi.WifiServiceImpl')
+        WifiServiceImpl.getFactoryMacAddresses.overload().implementation = function () {
+            const original = this.getFactoryMacAddresses()
+            const spoof = [readConfig().mac || randomMac()]
+            log(`WifiServiceImpl.getFactoryMacAddresses() called`)
+            log(`  ${original} -> ${spoof}`)
+            return spoof
+        }
+        WifiServiceImpl.getConnectionInfo.overload('java.lang.String', 'java.lang.String').implementation = function (
+            callingPackage,
+            callingFeatureId
+        ) {
+            const original = this.getConnectionInfo(callingPackage, callingFeatureId)
+            const originalMac = original.getMacAddress()
+            const originalBSSID = original.getBSSID()
+            const spoofedMac = readConfig().mac || randomMac()
+            const spoofedBSSID = readConfig().bssid || randomMac()
+            original.setMacAddress(spoofedMac)
+            original.setBSSID(spoofedBSSID)
+            log(`WifiServiceImpl.getConnectionInfo(${callingPackage}, ${callingFeatureId}) called`)
+            log(`  MAC: ${originalMac} -> ${spoofedMac}`)
+            log(`  BSSID: ${originalBSSID} -> ${spoofedBSSID}`)
+            return original
+        }
+
+        const btClassLoader = classLoaders.find((i) => i.toString().includes('service-bluetooth'))
+        Java.classFactory.loader = btClassLoader
+        const BluetoothManagerService = Java.use('com.android.server.bluetooth.BluetoothManagerService')
+        BluetoothManagerService.getAddress.overload('android.content.AttributionSource').implementation = function (
+            source
+        ) {
+            const res = this.getAddress(source)
+            log(`BluetoothManagerService.getAddress() called: packageName:${source.getPackageName()} -> ${res}`)
+            return res
+        }
+    })
+})

+ 48 - 162
scripts/gms.js

@@ -33,171 +33,57 @@ class Log {
 }
 
 Java.perform(function () {
-    const aoks = Java.use('aoks')
-    aoks.$init.overload('aokt', 'android.os.Handler').implementation = function (aokt, handler) {
-        Log.i(`${this.a.value}`)
-        return this.$init(aokt, handler)
-    }
-    aoks.d.overload('boolean', 'java.util.Map').implementation = function (b, map) {
-        Log.e(`${map.keySet().toArray()}, ${this.a.value._f.value}`)
-        // Log.e(`${map.get('UPI_FEATURES_ENABLED')}`)
-        // Log.e(`${map.get('515039672404610')}`)
-        // Java.cast(map.get('515039672404610'), Bundle).putString('IMSI', '515039672404610')
-        return this.d(b, map)
-    }
-
-    const Reiceiver = Java.use('com.google.android.gms.constellation.util.OnSyncCompletedListener$Receiver')
-    Reiceiver.onReceiveResult.overload('int', 'android.os.Bundle').implementation = function (i, bundle) {
-        Log.e(`i=${i}, ${bundle}`)
-        return this.onReceiveResult(i, bundle)
-    }
-
-    const aokt = Java.use('aokt')
-    aokt.$init.overload(
-        'android.content.Context',
-        'aoli',
-        'com.google.android.gms.constellation.VerifyPhoneNumberRequest',
-        'java.lang.String',
-        'aoiy'
-    ).implementation = function (context, aoli, request, str, aoiy) {
-        Log.e(`${request.a.value} ${request.b.value}`)
-        trace('[aokt]')
-        return this.$init(context, aoli, request, str, aoiy)
-    }
-    aokt.c.overload(
-        'com.google.android.gms.constellation.VerifyPhoneNumberRequest',
-        'com.google.android.gms.constellation.VerifyPhoneNumberResponse',
-        'int'
-    ).implementation = function (request, response, i) {
-        Log.e(`${request.a.value} ${request.b.value}`)
-        return this.c(request, response, i)
-    }
-
-    const BaseBundle = Java.use('android.os.BaseBundle')
-    BaseBundle.getInt.overload('java.lang.String', 'int').implementation = function (key, i) {
-        const value = this.getInt(key, i)
-        // Log.e(`[BaseBundle]${key}, ${i} -> ${value}`)
-        if (key == 'sim_slot_index') {
-            Log.e(`[BaseBundle]sim_slot_index`)
-            return 0
-        }
-        return this.getInt(key, i)
-    }
+    const System = Java.use('java.lang.System')
+    // System.load.overload('java.lang.String').implementation = function (library) {
+    //     Log.e('Loading library:', library)
+    //     return this.load(library)
+    // }
+    // System.loadLibrary.overload('java.lang.String').implementation = function (library) {
+    //     Log.e('Loading library1:', library)
+    //     return this.loadLibrary(library)
+    // }
+    // 定位 __system_property_read_callback 函数地址
+    // 假设我们已经 hook 了 __system_property_read_callback,并获得参数 args[0] 为 pi
+    Interceptor.attach(Module.findExportByName(null, '__system_property_read_callback'), {
+        onEnter: function (args) {
+            var pi = args[0]
+            console.log('-------------------------')
+            console.log('prop_info 地址: ' + pi)
 
-    const PhoneNumberVerification = Java.use('com.google.android.gms.constellation.PhoneNumberVerification')
-    PhoneNumberVerification.$init.overload(
-        'java.lang.String',
-        'long',
-        'int',
-        'int',
-        'java.lang.String',
-        'android.os.Bundle',
-        'int',
-        'long'
-    ).implementation = function (str, j, i, i2, str2, bundle, i3, l) {
-        Log.e(`PhoneNumberVerification.$init(str=${str}, j=${j}, i=${i}, i2=${i2}, str2=${str2}, i3=${i3}, l=${l}`)
-        // print bundle
-        const keySet = bundle.keySet().toArray()
+            // 读取 serial(4 字节)
+            var serial = Memory.readU32(pi)
+            console.log('serial: ' + serial)
 
-        for (let i = 0; i < keySet.length; i++) {
-            const key = keySet[i]
-            Log.i(`PhoneNumberVerification(key: ${key}, value: ${bundle.get(key)})`)
-        }
+            // 定义 offset 值,PROP_VALUE_MAX 一般为 92
+            var PROP_VALUE_MAX = 92
 
-        return this.$init(str, j, i, i2, str2, bundle, i3, l)
-    }
+            // 读取 name,name 在 union 后,即 pi + 4 + PROP_VALUE_MAX
+            var namePtr = pi.add(4 + PROP_VALUE_MAX)
+            var nameStr = Memory.readCString(namePtr)
+            console.log('name: ' + nameStr)
 
-    const VerifyPhoneNumberRequest = Java.use('com.google.android.gms.constellation.VerifyPhoneNumberRequest')
-    VerifyPhoneNumberRequest.$init.overload(
-        //String str, long j, IdTokenRequest idTokenRequest, Bundle bundle, List list, boolean z, int i, List list2
-        'java.lang.String',
-        'long',
-        'com.google.android.gms.constellation.IdTokenRequest',
-        'android.os.Bundle',
-        'java.util.List',
-        'boolean',
-        'int',
-        'java.util.List'
-    ).implementation = function (str, j, idTokenRequest, bundle, list, z, i, list2) {
-        Log.e(`VerifyPhoneNumberRequest.$init(
-            str=${str}, j=${j}, idTokenRequest=${idTokenRequest}, bundle=${bundle}, list=${list}, z=${z}, i=${i}, list2=${list2})`)
-        // print bundle
-        const keySet = bundle.keySet().toArray()
-        for (let i = 0; i < keySet.length; i++) {
-            const key = keySet[i]
-            Log.i(`VerifyPhoneNumberRequest.Bundle(key=${key}, value=${bundle.get(key)})`)
-        }
-
-        return this.$init(str, j, idTokenRequest, bundle, list, z, i, list2)
-    }
-    const SetAsterismConsentRequest = Java.use('com.google.android.gms.asterism.SetAsterismConsentRequest')
-    SetAsterismConsentRequest.$init.overload(
-        'int',
-        'int',
-        'int',
-        '[I',
-        'java.lang.Long',
-        'int',
-        'android.os.Bundle',
-        'int',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'java.lang.String',
-        'int'
-    ).implementation = function (
-        i,
-        i2,
-        i3,
-        iArr,
-        l,
-        i4,
-        bundle,
-        i5,
-        str,
-        str2,
-        str3,
-        str4,
-        str5,
-        str6,
-        str7,
-        str8,
-        i6
-    ) {
-        Log.i(
-            `SetAsterismConsentRequest.$init(
-                i=${i}, i2=${i2}, i3=${i3}, iArr=${iArr}, l=${l},
-                i4=${i4}, bundle=${bundle}, i5=${i5}, str=${str},
-                str2=${str2}, str3=${str3}, str4=${str4}, str5=${str5},
-                str6=${str6}, str7=${str7}, str8=${str8}, i6=${i6})`
-        )
-        // print bundle
-        const keySet = bundle.keySet().toArray()
-        for (let i = 0; i < keySet.length; i++) {
-            const key = keySet[i]
-            Log.i(`SetAsterismConsentRequest.Bundle(key=${key}, value=${bundle.get(key)})`)
+            var valueStr = ''
+            // 判断是否为 long 属性(is_long() 判断逻辑)
+            if ((serial & (1 << 16)) !== 0) {
+                // long 属性: offset 存在于 union.long_property.offset,
+                // offset 地址 = pi + 4 (union 开始) + 56(error_message 长度)
+                var offset = Memory.readU32(pi.add(4 + 56))
+                var longValuePtr = pi.add(offset)
+                console.log('long_property.offset: ' + offset)
+                try {
+                    valueStr = Memory.readCString(longValuePtr)
+                } catch (e) {
+                    valueStr = '读取 long_value 出错: ' + e
+                }
+            } else {
+                // 非 long 属性,值直接存储在 union.value 中,起始于 pi + 4
+                try {
+                    valueStr = Memory.readCString(pi.add(4))
+                } catch (e) {
+                    valueStr = '读取 inline value 出错: ' + e
+                }
+            }
+            console.log('value: ' + valueStr)
         }
-
-        return this.$init(i, i2, i3, iArr, l, i4, bundle, i5, str, str2, str3, str4, str5, str6, str7, str8, i6)
-    }
-
-    const SetAsterismConsentResponse = Java.use('com.google.android.gms.asterism.SetAsterismConsentResponse')
-    SetAsterismConsentResponse.$init.overload('int', 'java.lang.String', 'java.lang.String').implementation = function (
-        i,
-        str,
-        str2
-    ) {
-        Log.i(`SetAsterismConsentResponse.$init(i=${i}, str=${str}, str2=${str2})`)
-        return this.$init(i, str, str2)
-    }
-
-    const EventManager = Java.use('com.google.android.gms.constellation.EventManager')
-    EventManager.onHandleIntent.overload('android.content.Intent').implementation = function (intent) {
-        Log.i('EventManager.onHandleIntent(intent)')
-        return this.onHandleIntent(intent)
-    }
+    })
 })