x1ongzhu 1 năm trước cách đây
mục cha
commit
481c843186
13 tập tin đã thay đổi với 1179 bổ sung715 xóa
  1. 7 0
      .prettierrc.json
  2. 87 0
      configuratio1.json
  3. 6 0
      configuration.json
  4. 4 4
      gen.js
  5. 73 98
      injects/all.js
  6. 10 11
      saved_spoof.txt
  7. 504 416
      scripts/_spoof.js
  8. 227 47
      scripts/_spoof_gms.js
  9. 1 1
      scripts/sendsms.js
  10. 213 125
      scripts/spoof1.js
  11. 8 0
      scripts/spoof_gms.js
  12. 26 0
      sinch.js
  13. 13 13
      vars.json

+ 7 - 0
.prettierrc.json

@@ -0,0 +1,7 @@
+{
+    "tabWidth": 4,
+    "semi": false,
+    "singleQuote": true,
+    "trailingComma": "none",
+    "printWidth": 120
+}

+ 87 - 0
configuratio1.json

@@ -0,0 +1,87 @@
+{
+    "mDeviceId": null,
+    "mTachyonAuthToken": "Co4BAMGp9URq_nfz_ZlENzz8u_puvxmWh8d5un7_YrRxQz88BIcLMy1f6u1lxLquLek1WVqiQFJIcRueVtpSAywHShUH92CkY39YrMwQTHWUfGHrXhmJQSR6onQ7N_XU2kTbOkILS9PvJ5cDXurT-O5-zTfn2NEJBzT5exUVnHOWKjQSWV5YX-SIzcZbyA8mhQ",
+    "mVerifiedSmsToken": "ANvafuAntB4GjBoi3ikbvSWdYkdhoiWuaWYUxiL-o2GBYZPX5r6WouAJLk-HfaLEH6LNMAaosZ7p1Rg",
+    "tachygramEnabled": true,
+    "tachyonUrl": "instantmessaging-pa-jms-preprod-eu.googleapis.com:443",
+    "mConfigState": 0,
+    "mToken": {
+        "mValue": "5-AA50oPN5bXQoEeEXT6kDyXyHL943xMTTVHqU3GHkP0dPSJTiFthNX1Vyt0BYyI_sR1QG6NqtL6X6I6qlPJXcVTZA-EaKQE5dbxdeKGTlzimqwL1qblW4FQBEymYIzx-9W8oPQnocyqj_f1stVFAGNa4hCsftGRRSe2HQPA",
+        "mExpirationTime": "1715843339453"
+    },
+    "mType": 1,
+    "mImsConfiguration": {
+        "mAuthDigestPassword": "VMV4z80XuTTWO7GezziZjHFNIKMzL7fY",
+        "mAuthDigestRealm": "ua-lifecell.rcs.telephony.goog",
+        "mAuthDigestUsername": "+380638783055",
+        "mAuthenticationScheme": "Digest",
+        "mDomain": "ua-lifecell.rcs.telephony.goog",
+        "mPcscfAddress": "ua-lifecell.rcs.telephony.goog",
+        "mPcsfPort": -1,
+        "mPrivateIdentity": "+380638783055@ua-lifecell.rcs.telephony.goog",
+        "mPsMediaTransport": "MSRPoTLS",
+        "mPsRtpTransport": "SRTP",
+        "mPsSipTransport": "SIPoTLS",
+        "mPublicIdentity": "tel:+380638783055",
+        "mUserName": "+380638783055",
+        "mWifiMediaTransport": "MSRPoTLS",
+        "mWifiRtpTransport": "SRTP",
+        "mWifiSipTransport": "SIPoTLS",
+        "mT1": 600,
+        "mT2": 9500,
+        "mT4": 10000,
+        "mLocalSipPort": 5762,
+        "mQ": 0.5,
+        "mKeepAlive": true,
+        "mPhoneContext": "tel:+380638783055",
+        "mRegRetryBaseTime": 30,
+        "mRegRetryMaxTime": 1800,
+        "mNatUrlFmt": "tel",
+        "mIntUrlFmt": "tel",
+        "rcsVolteSingleRegistration": false
+    },
+    "mInstantMessageConfiguration": {
+        "mAutoAccept": true,
+        "mAutoAcceptGroupChat": true,
+        "mChatAuth": false,
+        "mChatRevokeTimer": 300,
+        "mConferenceFactoryUri": "sip:conference@rcs.google.com",
+        "mDeferredMessageFunctionUri": "sip:foo@bar",
+        "mExploderUri": "sip:foo@bar",
+        "mFileTransferAutoAcceptSupported": true,
+        "mFtCapAlwaysOn": false,
+        "mFtHttpCapAlwaysOn": true,
+        "mFtHttpContentServerPassword": "TelJNe0M4972xu8fhpsOibrtM9cGFpGd",
+        "mFtHttpContentServerUri": "https://rcs-copper-eu.googleapis.com",
+        "mFtHttpContentServerUser": "+380638783055",
+        "mFtStoreAndForwardEnabled": false,
+        "mFullGroupSandFSupported": true,
+        "mImCapAlwaysOn": true,
+        "mImSessionStart": 0,
+        "mImWarnSF": false,
+        "mMaxAdhocGroupSize": 100,
+        "mPublishPresenceCap": false,
+        "mReconnectGuardTimer": 120,
+        "mSmsFallBackAuth": false,
+        "mMaxSize1to1": 8192,
+        "mMaxSize1toM": 8192,
+        "mMaxSizeFileTransfer": 104857600,
+        "mWarnSizeFileTransfer": 104857600,
+        "mFtThumbnailSupported": false,
+        "mFtDefaultMechanism": "http",
+        "mMessageTech": 1,
+        "mDefaultSharingMethod": -1,
+        "mTimerIdleSecs": 180,
+        "mDeliveryReportTimeout": 300,
+        "mAnonymousChat": true,
+        "mMaxConcurrentSession": 0,
+        "mSwitchoverSize": 1300
+    },
+    "mReconfigRequested": false,
+    "mMessageTech": 0,
+    "rcsState": 0,
+    "iccids": "",
+    "mValiditySecs": 411163,
+    "mLastUpdateSecs": "1713337739",
+    "mVersion": 1
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 6 - 0
configuration.json


+ 4 - 4
gen.js

@@ -18,16 +18,16 @@ function randomeNumber(length) {
     return n
 }
 
-const mcc = "255"
-const mnc = "06"
+const mcc = "310"
+const mnc = "010"  // 240 160
 const simOperator = mcc + mnc
 const networkOperator = mcc + mnc
 const simSerialNumber = randomeNumber(20)
 const iccId = simSerialNumber
-const number = "638783055" || randomeNumber(9)
+const number = "6789901017" || randomeNumber(9)
 const imei = nodeImei.random()
 const imsi = mcc + mnc + randomeNumber(15 - (mcc + mnc).length)
-const countryIso = "ua"
+const countryIso = "us"
 let subId = "37"
 const androidId = randomstring.generate({ length: 16, charset: "hex" })
 const serialNumber = randomstring.generate({ length: 8, charset: "hex" })

+ 73 - 98
injects/all.js

@@ -1,10 +1,10 @@
-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 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'
 
 const filePath = url.fileURLToPath(import.meta.url)
 const __dirname = path.dirname(filePath)
@@ -17,12 +17,8 @@ function pushFile(file, dest, force = false) {
     if (!force) {
         console.log(`Checking if ${destPath} exists`)
         try {
-            if (
-                execSync(`adb shell ls ${destPath}`)
-                    .toString()
-                    .includes("No such file or directory")
-            ) {
-                throw new Error("File not found")
+            if (execSync(`adb shell ls ${destPath}`).toString().includes('No such file or directory')) {
+                throw new Error('File not found')
             }
             console.log(`File ${fileName} already exists`)
             return
@@ -42,23 +38,24 @@ function pushFile(file, dest, force = false) {
     console.log(`set permission success: ${fileName}`)
 }
 
-pushFile("../RcsHackTool.dex", "/sdcard/Download/")
-pushFile("../gson.dex", "/sdcard/Android/data/com.google.android.gms/")
+pushFile('../RcsHackTool.dex', '/sdcard/Download/')
+pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.gms/')
+pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.apps.messaging/')
 
 class Log {
-    static TAG = ""
+    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()) {
+            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(" ")
+        m = m.join(' ')
         return m
     }
     static i(...msg) {
@@ -76,46 +73,42 @@ class Log {
 }
 
 function replaceVars(source) {
-    const vars = JSON.parse(
-        fs.readFileSync(path.resolve(__dirname, "../vars.json")).toString()
-    )
+    const vars = JSON.parse(fs.readFileSync(path.resolve(__dirname, '../vars.json')).toString())
     return source
-        .replace("{{mcc}}", vars.mcc)
-        .replace("{{mnc}}", vars.mnc)
-        .replace("{{simOperator}}", vars.simOperator)
-        .replace("{{networkOperator}}", vars.networkOperator)
-        .replace("{{simSerialNumber}}", vars.simSerialNumber)
-        .replace("{{iccId}}", vars.iccId)
-        .replace("{{number}}", vars.number)
-        .replace("{{imei}}", vars.imei)
-        .replace("{{imsi}}", vars.imsi)
-        .replace("{{countryIso}}", vars.countryIso)
-        .replace("{{subId}}", vars.subId)
-        .replace("{{androidId}}", vars.androidId)
-        .replace("{{serialNumber}}", vars.serialNumber)
+        .replace('{{mcc}}', vars.mcc)
+        .replace('{{mnc}}', vars.mnc)
+        .replace('{{simOperator}}', vars.simOperator)
+        .replace('{{networkOperator}}', vars.networkOperator)
+        .replace('{{simSerialNumber}}', vars.simSerialNumber)
+        .replace('{{iccId}}', vars.iccId)
+        .replace('{{number}}', vars.number)
+        .replace('{{imei}}', vars.imei)
+        .replace('{{imsi}}', vars.imsi)
+        .replace('{{countryIso}}', vars.countryIso)
+        .replace('{{subId}}', vars.subId)
+        .replace('{{androidId}}', vars.androidId)
+        .replace('{{serialNumber}}', vars.serialNumber)
 }
 
 function loadSource(filePath) {
     Log.s(`Loading ${filePath}`)
-    return replaceVars(
-        fs.readFileSync(path.resolve(__dirname, filePath)).toString()
-    )
+    return replaceVars(fs.readFileSync(path.resolve(__dirname, filePath)).toString())
 }
 
-const source = loadSource("../scripts/spoof1.js")
-const source_gms = loadSource("../scripts/spoof_gms.js")
-const source_ssl = loadSource("../scripts/ssl_bypass.js")
+const source = loadSource('../scripts/spoof1.js')
+const source_gms = loadSource('../scripts/spoof_gms.js')
+const source_ssl = loadSource('../scripts/ssl_bypass.js')
 
-fs.writeFileSync("scripts/_spoof.js", source)
-fs.writeFileSync("scripts/_spoof_gms.js", source_gms)
+fs.writeFileSync('scripts/_spoof.js', source)
+fs.writeFileSync('scripts/_spoof_gms.js', source_gms)
 
 let device = null
 let tracers = []
 
 async function stop() {
-    Log.i("[*] Stopping all tracers")
+    Log.i('[*] Stopping all tracers')
     for (const tracer of tracers) {
-        Log.i("[*] Stopping", tracer.pid)
+        Log.i('[*] Stopping', tracer.pid)
         tracer.session.detach()
         try {
             await device.kill(tracer.pid)
@@ -124,16 +117,16 @@ async function stop() {
     process.exit(1)
 }
 
-process.on("SIGTERM", stop)
-process.on("SIGINT", stop)
+process.on('SIGTERM', stop)
+process.on('SIGINT', stop)
 
 async function main() {
     device = await frida.getUsbDevice()
     device.spawnAdded.connect(onSpawnAdded)
 
-    Log.i("[*] Enabling spawn gating")
+    Log.i('[*] Enabling spawn gating')
     await device.enableSpawnGating()
-    Log.i("[*] Enabled spawn gating")
+    Log.i('[*] Enabled spawn gating')
 
     // Log.i("[*] Spawning com.google.android.apps.messaging")
     // const pid = await device.spawn("com.google.android.apps.messaging")
@@ -144,23 +137,17 @@ async function main() {
 
 async function onSpawnAdded(spawn) {
     try {
-        if (spawn.identifier.startsWith("com.google.android.apps.messaging")) {
-            Log.i("[*] Tracing", spawn.pid, spawn.identifier)
-            const tracer = await Tracer.open(
-                spawn.pid,
-                loadSource("../scripts/spoof1.js")
-            )
+        if (spawn.identifier.startsWith('com.google.android.apps.messaging')) {
+            Log.i('[*] Tracing', spawn.pid, spawn.identifier)
+            const tracer = await Tracer.open(spawn.pid, loadSource('../scripts/spoof1.js'))
             tracers.push(tracer)
         }
-        if (spawn.identifier.startsWith("com.google.android.gms")) {
-            Log.i("[*] Tracing", spawn.pid, spawn.identifier)
-            const tracer = await Tracer.open(
-                spawn.pid,
-                loadSource("../scripts/spoof_gms.js")
-            )
+        if (spawn.identifier.startsWith('com.google.android.gms')) {
+            Log.i('[*] Tracing', spawn.pid, spawn.identifier)
+            const tracer = await Tracer.open(spawn.pid, loadSource('../scripts/spoof_gms.js'))
             tracers.push(tracer)
         } else {
-            Log.i("[*] Resuming", spawn.pid, spawn.identifier)
+            Log.i('[*] Resuming', spawn.pid, spawn.identifier)
             await device.resume(spawn.pid)
         }
     } catch (e) {
@@ -204,25 +191,17 @@ class Tracer {
 
     _onSessionDetached(reason) {
         Log.w(`[PID ${this.pid}] onSessionDetached(reason='${reason}')`)
-        const i = tracers.findIndex(tracer => tracer.pid === this.pid)
+        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) : ""
-            )
+        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) : ""
-            )
+            Log.i(`[PID ${this.pid}] onScriptMessage()`, message, data ? JSON.stringify(data) : '')
         }
     }
 }
@@ -233,26 +212,22 @@ vorpal.sigint(function () {
     stop()
 })
 
-vorpal.command("clear [app]").action(function (args, callback) {
+vorpal.command('clear [app]').action(function (args, callback) {
     try {
         const app = args.app
-        if ("sms" === app) {
-            execSync("adb shell pm clear com.google.android.apps.messaging")
-        } else if ("gms" === app) {
-            execSync("adb shell pm clear com.google.android.gms")
-            pushFile(
-                "../gson.dex",
-                "/sdcard/Android/data/com.google.android.gms/"
-            )
-        } else if ("gsf" === app) {
-            execSync("adb shell pm clear com.google.android.gsf")
-        } else if ("all" === app) {
-            execSync("adb shell pm clear com.google.android.apps.messaging")
-            execSync("adb shell pm clear com.google.android.gms")
-            pushFile(
-                "../gson.dex",
-                "/sdcard/Android/data/com.google.android.gms/"
-            )
+        if ('sms' === app) {
+            execSync('adb shell pm clear com.google.android.apps.messaging')
+            pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.apps.messaging/')
+        } else if ('gms' === app) {
+            execSync('adb shell pm clear com.google.android.gms')
+            pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.gms/')
+        } else if ('gsf' === app) {
+            execSync('adb shell pm clear com.google.android.gsf')
+        } else if ('all' === app) {
+            execSync('adb shell pm clear com.google.android.apps.messaging')
+            execSync('adb shell pm clear com.google.android.gms')
+            pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.gms/')
+            pushFile('../gson.dex', '/sdcard/Android/data/com.google.android.apps.messaging/')
         }
     } catch (error) {
         Log.e(error)
@@ -260,17 +235,17 @@ vorpal.command("clear [app]").action(function (args, callback) {
     callback()
 })
 
-vorpal.command("stop").action(function (args, callback) {
+vorpal.command('stop').action(function (args, callback) {
     try {
-        execSync("adb shell am force-stop com.google.android.apps.messaging")
-        execSync("adb shell am force-stop com.google.android.gms")
+        execSync('adb shell am force-stop com.google.android.apps.messaging')
+        execSync('adb shell am force-stop com.google.android.gms')
     } catch (error) {
         Log.e(error)
     }
     callback()
 })
-vorpal.command("gen").action(function (args, callback) {
-    execSync(`node ${path.resolve(__dirname, "../gen.js")}`)
+vorpal.command('gen').action(function (args, callback) {
+    execSync(`node ${path.resolve(__dirname, '../gen.js')}`)
     callback()
 })
-vorpal.delimiter("rcs$").show()
+vorpal.delimiter('rcs$').show()

+ 10 - 11
saved_spoof.txt

@@ -46,21 +46,20 @@ const subId = "21"
 
 {
     "mcc": "310",
-    "mnc": "450",
-    "simOperator": "310450",
-    "networkOperator": "310450",
-    "simSerialNumber": "60624983982014067795",
-    "iccId": "60624983982014067795",
+    "mnc": "240",
+    "simOperator": "310240",
+    "networkOperator": "310240",
+    "simSerialNumber": "69441482314469852043",
+    "iccId": "69441482314469852043",
     "number": "6789901017",
-    "imei": "359514061570765",
-    "imsi": "310450317507422",
+    "imei": "011546006444888",
+    "imsi": "310240956540295",
     "countryIso": "us",
-    "subId": "56",
-    "androidId": "31be1f8ec203d552",
-    "serialNumber": "7cb3a5b9"
+    "subId": "46",
+    "androidId": "a6b08c40f873dafb",
+    "serialNumber": "beb54004"
 }
 
-
 {
     "mcc": "255",
     "mnc": "06",

+ 504 - 416
scripts/_spoof.js

@@ -1,28 +1,28 @@
-const mcc = "302"
-const mnc = "299"
-const simOperator = "302299"
-const networkOperator = "302299"
-const simSerialNumber = "25343849204326395079"
-const iccId = "25343849204326395079"
-const number = "4305581376"
-const imei = "359028031160102"
-const imsi = "302299418648530"
-const countryIso = "ca"
-const subId = "45"
+const mcc = '310'
+const mnc = '160'
+const simOperator = '310160'
+const networkOperator = '310160'
+const simSerialNumber = '21116333706453551203'
+const iccId = '21116333706453551203'
+const number = '4014224597'
+const imei = '359294044823884'
+const imsi = '310160362935445'
+const countryIso = 'us'
+const subId = '60'
 
 class Log {
-    static TAG = "[SMS]"
+    static TAG = '[SMS]'
     static Debug = false
     static format(...msg) {
         let m = []
         for (let i = 0; i < msg.length; i++) {
-            if (typeof msg[i] === "object") {
+            if (typeof msg[i] === 'object') {
                 m.push(JSON.stringify(msg[i]))
             } else {
                 m.push(msg[i])
             }
         }
-        m = m.join(" ")
+        m = m.join(' ')
         return m
     }
     static i(...msg) {
@@ -42,10 +42,8 @@ class Log {
 
 setImmediate(() => {
     Java.perform(function () {
-        const SmsManager = Java.use("android.telephony.SmsManager")
-        SmsManager.getSmsManagerForSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
+        const SmsManager = Java.use('android.telephony.SmsManager')
+        SmsManager.getSmsManagerForSubscriptionId.overload('int').implementation = function (i) {
             const _smsManager = this.getSmsManagerForSubscriptionId(i)
             Log.i(`SmsManager.getSmsManagerForSubscriptionId: ${i}`)
             return _smsManager
@@ -57,184 +55,167 @@ setImmediate(() => {
             return _smsManager
         }
 
-        SmsManager.getDefaultSmsSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getDefaultSmsSubscriptionId()
-                Log.i(
-                    `spoof SmsManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-
-        SmsManager.getSubscriptionId.overload().implementation = function () {
-            const _subId = this.getSubscriptionId()
-            Log.i(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
-            return parseInt(subId)
+        // SmsManager.getDefaultSmsSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getDefaultSmsSubscriptionId()
+        //         Log.i(
+        //             `spoof SmsManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+
+        // SmsManager.getSubscriptionId.overload().implementation = function () {
+        //     const _subId = this.getSubscriptionId()
+        //     Log.i(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
+        //     return parseInt(subId)
+        // }
+        SmsManager.getCarrierConfigValues.overload().implementation = function () {
+            const _config = this.getCarrierConfigValues()
+            Log.i(`SmsManager.getCarrierConfigValues: ${_config}`)
+            return _config
         }
-        SmsManager.getCarrierConfigValues.overload().implementation =
-            function () {
-                const _config = this.getCarrierConfigValues()
-                Log.i(`SmsManager.getCarrierConfigValues: ${_config}`)
-                return _config
-            }
 
-        const CarrierConfigManager = Java.use(
-            "android.telephony.CarrierConfigManager"
-        )
-        CarrierConfigManager.getConfigForSubId.overload("int").implementation =
-            function (i) {
-                const _config = this.getConfigForSubId(i)
-                Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
-                return _config
-            }
-
-        const SubscriptionManager = Java.use(
-            "android.telephony.SubscriptionManager"
-        )
-        SubscriptionManager.getActiveSubscriptionInfoCount.overload().implementation =
-            function () {
-                const _count = this.getActiveSubscriptionInfoCount()
-                Log.i(
-                    `SubscriptionManager.getActiveSubscriptionInfoCount: ${_count}`
-                )
-                return _count
-            }
-        SubscriptionManager.getDefaultSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getDefaultSubscriptionId()
-                Log.i(
-                    `spoof SubscriptionManager.getDefaultSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-        SubscriptionManager.getDefaultSmsSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getDefaultSmsSubscriptionId()
-                Log.i(
-                    `spoof SubscriptionManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-        SubscriptionManager.getDefaultVoiceSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getDefaultVoiceSubscriptionId()
-                Log.i(
-                    `spoof SubscriptionManager.getDefaultVoiceSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-        SubscriptionManager.getActiveDataSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getActiveDataSubscriptionId()
-                Log.i(
-                    `spoof SubscriptionManager.getActiveDataSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-        SubscriptionManager.getSlotIndex.overload("int").implementation =
-            function (i) {
-                const _slotIndex = this.getSlotIndex(i)
-                Log.i(
-                    `spoof SubscriptionManager.getSlotIndex: ${_slotIndex} -> 0`
-                )
-                return 0
-            }
-        SubscriptionManager.isUsableSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
-            const _isUsable = this.isUsableSubscriptionId(i)
-            Log.i(`SubscriptionManager.isUsableSubscriptionId: ${_isUsable}`)
-            return _isUsable
+        const CarrierConfigManager = Java.use('android.telephony.CarrierConfigManager')
+        CarrierConfigManager.getConfigForSubId.overload('int').implementation = function (i) {
+            const _config = this.getConfigForSubId(i)
+            Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
+            return _config
         }
-        SubscriptionManager.isValidSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
-            const _isValid = this.isValidSubscriptionId(i)
-            Log.i(
-                `spoof SubscriptionManager.isValidSubscriptionId(${i}): ${_isValid} -> true`
-            )
-            return true
+
+        const SubscriptionManager = Java.use('android.telephony.SubscriptionManager')
+        SubscriptionManager.getActiveSubscriptionInfoCount.overload().implementation = function () {
+            const _count = this.getActiveSubscriptionInfoCount()
+            Log.i(`SubscriptionManager.getActiveSubscriptionInfoCount: ${_count}`)
+            return _count
         }
-        SubscriptionManager.getPhoneNumber.overload("int").implementation =
-            function (i) {
-                Log.i(
-                    `spoof SubscriptionManager.getPhoneNumber(${i}): -> ${number}`
-                )
-                return number
-            }
-        SubscriptionManager.getPhoneNumber.overload(
-            "int",
-            "int"
-        ).implementation = function (i, i2) {
-            Log.i(
-                `spoof SubscriptionManager.getPhoneNumber(${i},${i2}): -> ${number}`
-            )
+        // SubscriptionManager.getDefaultSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getDefaultSubscriptionId()
+        //         Log.i(
+        //             `spoof SubscriptionManager.getDefaultSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+        // SubscriptionManager.getDefaultSmsSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getDefaultSmsSubscriptionId()
+        //         Log.i(
+        //             `spoof SubscriptionManager.getDefaultSmsSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+        // SubscriptionManager.getDefaultVoiceSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getDefaultVoiceSubscriptionId()
+        //         Log.i(
+        //             `spoof SubscriptionManager.getDefaultVoiceSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+        // SubscriptionManager.getActiveDataSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getActiveDataSubscriptionId()
+        //         Log.i(
+        //             `spoof SubscriptionManager.getActiveDataSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+        // SubscriptionManager.getSlotIndex.overload("int").implementation =
+        //     function (i) {
+        //         const _slotIndex = this.getSlotIndex(i)
+        //         Log.i(
+        //             `spoof SubscriptionManager.getSlotIndex: ${_slotIndex} -> 0`
+        //         )
+        //         return 0
+        //     }
+        // SubscriptionManager.isUsableSubscriptionId.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     const _isUsable = this.isUsableSubscriptionId(i)
+        //     Log.i(`SubscriptionManager.isUsableSubscriptionId: ${_isUsable}`)
+        //     return _isUsable
+        // }
+        // SubscriptionManager.isValidSubscriptionId.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     const _isValid = this.isValidSubscriptionId(i)
+        //     Log.i(
+        //         `spoof SubscriptionManager.isValidSubscriptionId(${i}): ${_isValid} -> true`
+        //     )
+        //     return true
+        // }
+        SubscriptionManager.getPhoneNumber.overload('int').implementation = function (i) {
+            Log.i(`spoof SubscriptionManager.getPhoneNumber(${i}): -> ${number}`)
             return number
         }
-        SubscriptionManager.getActiveSubscriptionInfoList.overload().implementation =
-            function () {
-                const _list = this.getActiveSubscriptionInfoList()
-                Log.i(
-                    `SubscriptionManager.getActiveSubscriptionInfoList ${_list.size()}`
-                )
-                return _list
-            }
-        SubscriptionManager.getActiveSubscriptionIdList.overload().implementation =
-            function () {
-                const _list = this.getActiveSubscriptionIdList()
-                Log.i(
-                    `spoof SubscriptionManager.getActiveSubscriptionIdList ${_list} -> ${subId}`
-                )
-                return [parseInt(subId)]
-            }
-        SubscriptionManager.getActiveSubscriptionInfo.overload(
-            "int"
-        ).implementation = function (i) {
-            const _info = this.getActiveSubscriptionInfo(i)
-
-            const simCount = this.getActiveSubscriptionInfoCountMax()
-
-            let subInfo = null
-            try {
-                for (let i = 0; i < simCount; i++) {
-                    subInfo = this.getActiveSubscriptionInfoForSimSlotIndex(i)
-                    if (subInfo) {
-                        break
-                    }
-                }
-                Log.i(
-                    `spoof SubscriptionManager.getActiveSubscriptionInfo(${i})`
-                )
-            } catch (error) {
-                console.error(
-                    `spoof error SubscriptionManager.getActiveSubscriptionInfo(${i})`
-                )
-                error.printStackTrace()
-            }
-            return subInfo
-        }
-        SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
-            "int"
-        ).implementation = function (i) {
-            const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
-            Log.i(
-                `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(${i}): ${
-                    _info ? "ok" : "null"
-                }`
-            )
-            return _info
-        }
-        SubscriptionManager.isActiveSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
-            const _isActive = this.isActiveSubscriptionId(i)
-            Log.i(
-                `spoof SubscriptionManager.isActiveSubscriptionId(${i}): ${_isActive} -> true`
-            )
-            return true
+        SubscriptionManager.getPhoneNumber.overload('int', 'int').implementation = function (i, i2) {
+            Log.i(`spoof SubscriptionManager.getPhoneNumber(${i},${i2}): -> ${number}`)
+            return number
         }
+        // SubscriptionManager.getActiveSubscriptionInfoList.overload().implementation =
+        //     function () {
+        //         const _list = this.getActiveSubscriptionInfoList()
+        //         Log.i(
+        //             `SubscriptionManager.getActiveSubscriptionInfoList ${_list.size()}`
+        //         )
+        //         return _list
+        //     }
+        // SubscriptionManager.getActiveSubscriptionIdList.overload().implementation =
+        //     function () {
+        //         const _list = this.getActiveSubscriptionIdList()
+        //         Log.i(
+        //             `spoof SubscriptionManager.getActiveSubscriptionIdList ${_list} -> ${subId}`
+        //         )
+        //         return [parseInt(subId)]
+        //     }
+        // SubscriptionManager.getActiveSubscriptionInfo.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     const _info = this.getActiveSubscriptionInfo(i)
+
+        //     const simCount = this.getActiveSubscriptionInfoCountMax()
+
+        //     let subInfo = null
+        //     try {
+        //         for (let i = 0; i < simCount; i++) {
+        //             subInfo = this.getActiveSubscriptionInfoForSimSlotIndex(i)
+        //             if (subInfo) {
+        //                 break
+        //             }
+        //         }
+        //         Log.i(
+        //             `spoof SubscriptionManager.getActiveSubscriptionInfo(${i})`
+        //         )
+        //     } catch (error) {
+        //         console.error(
+        //             `spoof error SubscriptionManager.getActiveSubscriptionInfo(${i})`
+        //         )
+        //         error.printStackTrace()
+        //     }
+        //     return subInfo
+        // }
+        // SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
+        //     Log.i(
+        //         `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(${i}): ${
+        //             _info ? "ok" : "null"
+        //         }`
+        //     )
+        //     return _info
+        // }
+        // SubscriptionManager.isActiveSubscriptionId.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     const _isActive = this.isActiveSubscriptionId(i)
+        //     Log.i(
+        //         `spoof SubscriptionManager.isActiveSubscriptionId(${i}): ${_isActive} -> true`
+        //     )
+        //     return true
+        // }
 
-        const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
+        const SubscriptionInfo = Java.use('android.telephony.SubscriptionInfo')
         SubscriptionInfo.getMcc.overload().implementation = function () {
             const _mcc = this.getMcc()
             Log.i(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
@@ -249,17 +230,13 @@ setImmediate(() => {
 
         SubscriptionInfo.getMccString.overload().implementation = function () {
             const _mccString = this.getMccString()
-            Log.i(
-                `spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`
-            )
+            Log.i(`spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`)
             return mcc
         }
 
         SubscriptionInfo.getMncString.overload().implementation = function () {
             const _mncString = this.getMncString()
-            Log.i(
-                `spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`
-            )
+            Log.i(`spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`)
             return mnc
         }
 
@@ -277,76 +254,59 @@ setImmediate(() => {
 
         SubscriptionInfo.getCountryIso.overload().implementation = function () {
             const _countryIso = this.getCountryIso()
-            Log.i(
-                `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
-            )
+            Log.i(`spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`)
             return countryIso
         }
 
-        SubscriptionInfo.getSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getSubscriptionId()
-                if (!subId) {
-                    Log.i(_subId)
-                    return _subId
-                }
-                Log.i(
-                    `spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
-
-        const TelephonyManager = Java.use("android.telephony.TelephonyManager")
-        TelephonyManager.createForSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
-            Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
-            return this
+        // SubscriptionInfo.getSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getSubscriptionId()
+        //         if (!subId) {
+        //             Log.i(_subId)
+        //             return _subId
+        //         }
+        //         Log.i(
+        //             `spoof SubscriptionInfo.getSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
+
+        const TelephonyManager = Java.use('android.telephony.TelephonyManager')
+        // TelephonyManager.createForSubscriptionId.overload(
+        //     "int"
+        // ).implementation = function (i) {
+        //     Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
+        //     return this
+        // }
+        TelephonyManager.getLine1Number.overload().implementation = function () {
+            const _number = this.getLine1Number()
+            Log.i(`spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`)
+            return number
         }
-        TelephonyManager.getLine1Number.overload().implementation =
-            function () {
-                const _number = this.getLine1Number()
-                Log.i(
-                    `spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`
-                )
-                return number
-            }
 
-        TelephonyManager.getSimOperator.overload().implementation =
-            function () {
-                const _simOperator = this.getSimOperator()
-                Log.i(
-                    `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
-                )
-                return simOperator
-            }
+        TelephonyManager.getSimOperator.overload().implementation = function () {
+            const _simOperator = this.getSimOperator()
+            Log.i(`spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`)
+            return simOperator
+        }
 
-        TelephonyManager.getNetworkOperator.overload().implementation =
-            function () {
-                const _networkOperator = this.getNetworkOperator()
-                Log.i(
-                    `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
-                )
-                return networkOperator
-            }
+        TelephonyManager.getNetworkOperator.overload().implementation = function () {
+            const _networkOperator = this.getNetworkOperator()
+            Log.i(`spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`)
+            return networkOperator
+        }
 
-        TelephonyManager.getSimSerialNumber.overload().implementation =
-            function () {
-                const _simSerialNumber = this.getSimSerialNumber()
-                Log.i(
-                    `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
-                )
-                return simSerialNumber
-            }
+        TelephonyManager.getSimSerialNumber.overload().implementation = function () {
+            const _simSerialNumber = this.getSimSerialNumber()
+            Log.i(`spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`)
+            return simSerialNumber
+        }
 
-        TelephonyManager.getSubscriberId.overload().implementation =
-            function () {
-                const _imsi = this.getSubscriberId()
-                Log.i(
-                    `spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`
-                )
-                return imsi
-            }
+        TelephonyManager.getSubscriberId.overload().implementation = function () {
+            const _imsi = this.getSubscriberId()
+            Log.i(`spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`)
+            return imsi
+        }
 
         TelephonyManager.getImei.overload().implementation = function () {
             const _imei = this.getImei()
@@ -354,36 +314,30 @@ setImmediate(() => {
             return imei
         }
 
-        TelephonyManager.getNetworkCountryIso.overload().implementation =
-            function () {
-                const _countryIso = this.getNetworkCountryIso()
-                Log.i(
-                    `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
-                )
-                return countryIso
-            }
+        TelephonyManager.getNetworkCountryIso.overload().implementation = function () {
+            const _countryIso = this.getNetworkCountryIso()
+            Log.i(`spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`)
+            return countryIso
+        }
 
-        TelephonyManager.getSimCountryIso.overload().implementation =
-            function () {
-                const _countryIso = this.getSimCountryIso()
-                Log.i(
-                    `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
-                )
-                return countryIso
-            }
+        TelephonyManager.getSimCountryIso.overload().implementation = function () {
+            const _countryIso = this.getSimCountryIso()
+            Log.i(`spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`)
+            return countryIso
+        }
 
-        TelephonyManager.getSubscriptionId.overload().implementation =
-            function () {
-                const _subId = this.getSubscriptionId()
-                if (!subId) {
-                    Log.i(_subId)
-                    return _subId
-                }
-                Log.i(
-                    `spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`
-                )
-                return parseInt(subId)
-            }
+        // TelephonyManager.getSubscriptionId.overload().implementation =
+        //     function () {
+        //         const _subId = this.getSubscriptionId()
+        //         if (!subId) {
+        //             Log.i(_subId)
+        //             return _subId
+        //         }
+        //         Log.i(
+        //             `spoof TelephonyManager.getSubscriptionId: ${_subId} -> ${subId}`
+        //         )
+        //         return parseInt(subId)
+        //     }
 
         TelephonyManager.getSimState.overload().implementation = function () {
             const _simState = this.getSimState()
@@ -391,149 +345,283 @@ setImmediate(() => {
             return 5
         }
 
-        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, l, i, i2, str2, bundle, i3, l2) {
-            Log.i("PhoneNumberVerification.$init")
-
-            Log.i(
-                `str: ${str}, l: ${l}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l2: ${l2}`
-            )
-            // print bundle
-            if (bundle) {
-                const keySet = bundle.keySet().toArray()
-                for (let i = 0; i < keySet.length; i++) {
-                    const key = keySet[i]
-                    Log.i(`key: ${key}, value: ${bundle.get(key)}`)
-                }
-            }
+        // 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, l, i, i2, str2, bundle, i3, l2) {
+        //     Log.i("PhoneNumberVerification.$init")
+
+        //     Log.i(
+        //         `str: ${str}, l: ${l}, i: ${i}, i2: ${i2}, str2: ${str2}, i3: ${i3}, l2: ${l2}`
+        //     )
+        //     // print bundle
+        //     if (bundle) {
+        //         const keySet = bundle.keySet().toArray()
+        //         for (let i = 0; i < keySet.length; i++) {
+        //             const key = keySet[i]
+        //             Log.i(`key: ${key}, value: ${bundle.get(key)}`)
+        //         }
+        //     }
+
+        //     return this.$init(str, l, i, i2, str2, bundle, i3, l2)
+        // }
 
-            return this.$init(str, l, i, i2, str2, bundle, i3, l2)
-        }
+        // // const aays = Java.use("aays")
+        // // aays.d.overload("int", "boolean").implementation = function (i, z) {
+        // //     Log.i("aays.d", i, z, Object.keys(this.f.value))
+
+        // //     return number
+        // // }
+
+        // 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"
+        // ).implementation = function (
+        //     i,
+        //     i2,
+        //     i3,
+        //     iArr,
+        //     l,
+        //     i4,
+        //     bundle,
+        //     i5,
+        //     str,
+        //     str2,
+        //     str3,
+        //     str4,
+        //     str5,
+        //     str6,
+        //     str7,
+        //     str8
+        // ) {
+        //     Log.i(
+        //         Java.use("android.util.Log").getStackTraceString(
+        //             Java.use("java.lang.Throwable").$new()
+        //         )
+        //     )
+        //     Log.i("SetAsterismConsentRequest.$init")
+
+        //     Log.i(
+        //         `i: ${i}, i2: ${i2}, i3: ${i3}, iArr: ${iArr}, l: ${l}, i4: ${i4}, i5: ${i5}, str: ${str}, str2: ${str2}, str3: ${str3}, str4: ${str4}, str5: ${str5}, str6: ${str6}, str7: ${str7}, str8: ${str8}`
+        //     )
+        //     // print bundle
+        //     const keySet = bundle.keySet().toArray()
+        //     for (let i = 0; i < keySet.length; i++) {
+        //         const key = keySet[i]
+        //         Log.i(`key: ${key}, value: ${bundle.get(key)}`)
+        //     }
+
+        //     return this.$init(
+        //         i,
+        //         i2,
+        //         i3,
+        //         iArr,
+        //         l,
+        //         i4,
+        //         bundle,
+        //         i5,
+        //         str,
+        //         str2,
+        //         str3,
+        //         str4,
+        //         str5,
+        //         str6,
+        //         str7,
+        //         str8
+        //     )
+        // }
 
-        // const aays = Java.use("aays")
-        // aays.d.overload("int", "boolean").implementation = function (i, z) {
-        //     Log.i("aays.d", i, z, Object.keys(this.f.value))
+        // 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(
+        //         Java.use("android.util.Log").getStackTraceString(
+        //             Java.use("java.lang.Throwable").$new()
+        //         )
+        //     )
+
+        //     Log.i("SetAsterismConsentResponse.$init")
+        //     Log.i(`i: ${i}, str: ${str}, str2: ${str2}`)
+        //     // return this.$init(
+        //     //     1,
+        //     //     "c4q5zP5Ft4A:APA91bEASr50HwwOY789LSZrcHPT8aG_fT19xlelS35qgIJeC3UBYypAHmmL9IygzlphzTKKz0wCdiQwuoPZMJKvgKPmGi3_imdr1CY0s7fs8qa_LMgNDFfvWEnpTCReAYc7IjThhFQq",
+        //     //     "c4q5zP5Ft4A"
+        //     // )
+        //     return this.$init(i, str, str2)
+        // }
 
-        //     return number
+        // // spoof sim to exist
+        // const bjsf = Java.use("bjsf")
+        // bjsf.s.overload("android.content.Context").implementation = function (
+        //     c
+        // ) {
+        //     Log.i("bjsf.s spoof sim to exist")
+        //     return true
         // }
 
-        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"
-        ).implementation = function (
-            i,
-            i2,
-            i3,
-            iArr,
-            l,
-            i4,
-            bundle,
-            i5,
-            str,
-            str2,
-            str3,
-            str4,
-            str5,
-            str6,
-            str7,
-            str8
-        ) {
-            Log.i(
-                Java.use("android.util.Log").getStackTraceString(
-                    Java.use("java.lang.Throwable").$new()
-                )
-            )
-            Log.i("SetAsterismConsentRequest.$init")
+        function printConfiguration(config) {
+            JSON.stringify({
+                mDeviceId: config.mDeviceId.value,
+                mTachyonAuthToken: config.mTachyonAuthToken.value,
+                mVerifiedSmsToken: config.mVerifiedSmsToken.value,
+                tachygramEnabled: config.tachygramEnabled.value,
+                tachyonUrl: config.tachyonUrl.value,
+                mConfigState: config.mConfigState.value,
+                mToken: {
+                    mValue: config.mToken.value.mValue.value,
+                    mExpirationTime: config.mToken.value.mExpirationTime.value
+                },
+                mType: config.mType.value,
+                mImsConfiguration: {
+                    mAuthDigestPassword: config.mImsConfiguration.value.mAuthDigestPassword.value,
+                    mAuthDigestRealm: config.mImsConfiguration.value.mAuthDigestRealm.value,
+                    mAuthDigestUsername: config.mImsConfiguration.value.mAuthDigestUsername.value,
+                    mAuthenticationScheme: config.mImsConfiguration.value.mAuthenticationScheme.value,
+                    mDomain: config.mImsConfiguration.value.mDomain.value,
+                    mPcscfAddress: config.mImsConfiguration.value.mPcscfAddress.value,
+                    mPcsfPort: config.mImsConfiguration.value.mPcsfPort.value,
+                    mPrivateIdentity: config.mImsConfiguration.value.mPrivateIdentity.value,
+                    mPsMediaTransport: config.mImsConfiguration.value.mPsMediaTransport.value,
+                    mPsRtpTransport: config.mImsConfiguration.value.mPsRtpTransport.value,
+                    mPsSipTransport: config.mImsConfiguration.value.mPsSipTransport.value,
+                    mPublicIdentity: config.mImsConfiguration.value.mPublicIdentity.value,
+                    mUserName: config.mImsConfiguration.value.mUserName.value,
+                    mWifiMediaTransport: config.mImsConfiguration.value.mWifiMediaTransport.value,
+                    mWifiRtpTransport: config.mImsConfiguration.value.mWifiRtpTransport.value,
+                    mWifiSipTransport: config.mImsConfiguration.value.mWifiSipTransport.value,
+                    mT1: config.mImsConfiguration.value.mT1.value,
+                    mT2: config.mImsConfiguration.value.mT2.value,
+                    mT4: config.mImsConfiguration.value.mT4.value,
+                    mLocalSipPort: config.mImsConfiguration.value.mLocalSipPort.value,
+                    mQ: config.mImsConfiguration.value.mQ.value,
+                    mKeepAlive: config.mImsConfiguration.value.mKeepAlive.value,
+                    mPhoneContext: config.mImsConfiguration.value.mPhoneContext.value,
+                    mRegRetryBaseTime: config.mImsConfiguration.value.mRegRetryBaseTime.value,
+                    mRegRetryMaxTime: config.mImsConfiguration.value.mRegRetryMaxTime.value,
+                    mNatUrlFmt: config.mImsConfiguration.value.mNatUrlFmt.value,
+                    mIntUrlFmt: config.mImsConfiguration.value.mIntUrlFmt.value,
+                    rcsVolteSingleRegistration: config.mImsConfiguration.value.rcsVolteSingleRegistration.value
+                },
+                mInstantMessageConfiguration: {
+                    mAutoAccept: config.mInstantMessageConfiguration.value.mAutoAccept.value,
+                    mAutoAcceptGroupChat: config.mInstantMessageConfiguration.value.mAutoAcceptGroupChat.value,
+                    mChatAuth: config.mInstantMessageConfiguration.value.mChatAuth.value,
+                    mChatRevokeTimer: config.mInstantMessageConfiguration.value.mChatRevokeTimer.value,
+                    mConferenceFactoryUri: config.mInstantMessageConfiguration.value.mConferenceFactoryUri.value,
+                    mDeferredMessageFunctionUri:
+                        config.mInstantMessageConfiguration.value.mDeferredMessageFunctionUri.value,
+                    mExploderUri: config.mInstantMessageConfiguration.value.mExploderUri.value,
+                    mFileTransferAutoAcceptSupported:
+                        config.mInstantMessageConfiguration.value.mFileTransferAutoAcceptSupported.value,
+                    mFtCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtCapAlwaysOn.value,
+                    mFtHttpCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtHttpCapAlwaysOn.value,
+                    mFtHttpContentServerPassword:
+                        config.mInstantMessageConfiguration.value.mFtHttpContentServerPassword.value,
+                    mFtHttpContentServerUri: config.mInstantMessageConfiguration.value.mFtHttpContentServerUri.value,
+                    mFtHttpContentServerUser: config.mInstantMessageConfiguration.value.mFtHttpContentServerUser.value,
+                    mFtStoreAndForwardEnabled:
+                        config.mInstantMessageConfiguration.value.mFtStoreAndForwardEnabled.value,
+                    mFullGroupSandFSupported: config.mInstantMessageConfiguration.value.mFullGroupSandFSupported.value,
+                    mImCapAlwaysOn: config.mInstantMessageConfiguration.value.mImCapAlwaysOn.value,
+                    mImSessionStart: config.mInstantMessageConfiguration.value.mImSessionStart.value,
+                    mImWarnSF: config.mInstantMessageConfiguration.value.mImWarnSF.value,
+                    mMaxAdhocGroupSize: config.mInstantMessageConfiguration.value.mMaxAdhocGroupSize.value,
+                    mPublishPresenceCap: config.mInstantMessageConfiguration.value.mPublishPresenceCap.value,
+                    mReconnectGuardTimer: config.mInstantMessageConfiguration.value.mReconnectGuardTimer.value,
+                    mSmsFallBackAuth: config.mInstantMessageConfiguration.value.mSmsFallBackAuth.value,
+                    mMaxSize1to1: config.mInstantMessageConfiguration.value.mMaxSize1to1.value,
+                    mMaxSize1toM: config.mInstantMessageConfiguration.value.mMaxSize1toM.value,
+                    mMaxSizeFileTransfer: config.mInstantMessageConfiguration.value.mMaxSizeFileTransfer.value,
+                    mWarnSizeFileTransfer: config.mInstantMessageConfiguration.value.mWarnSizeFileTransfer.value,
+                    mFtThumbnailSupported: config.mInstantMessageConfiguration.value.mFtThumbnailSupported.value,
+                    mFtDefaultMechanism: config.mInstantMessageConfiguration.value.mFtDefaultMechanism.value,
+                    mMessageTech: config.mInstantMessageConfiguration.value.mMessageTech.value,
+                    mDefaultSharingMethod: config.mInstantMessageConfiguration.value.mDefaultSharingMethod.value,
+                    mTimerIdleSecs: config.mInstantMessageConfiguration.value.mTimerIdleSecs.value,
+                    mDeliveryReportTimeout: config.mInstantMessageConfiguration.value.mDeliveryReportTimeout.value,
+                    mAnonymousChat: config.mInstantMessageConfiguration.value.mAnonymousChat.value,
+                    mMaxConcurrentSession: config.mInstantMessageConfiguration.value.mMaxConcurrentSession.value,
+                    mSwitchoverSize: config.mInstantMessageConfiguration.value.mSwitchoverSize.value
+                },
+                mReconfigRequested: config.mReconfigRequested.value,
+                mMessageTech: config.mMessageTech.value,
+                rcsState: config.rcsState.value,
+                iccids: config.iccids.value,
+                mValiditySecs: config.mValiditySecs.value,
+                mLastUpdateSecs: config.mLastUpdateSecs.value,
+                mVersion: config.mVersion.value
+            })
+        }
 
-            Log.i(
-                `i: ${i}, i2: ${i2}, i3: ${i3}, iArr: ${iArr}, l: ${l}, i4: ${i4}, i5: ${i5}, str: ${str}, str2: ${str2}, str3: ${str3}, str4: ${str4}, str5: ${str5}, str6: ${str6}, str7: ${str7}, str8: ${str8}`
-            )
-            // print bundle
-            const keySet = bundle.keySet().toArray()
-            for (let i = 0; i < keySet.length; i++) {
-                const key = keySet[i]
-                Log.i(`key: ${key}, value: ${bundle.get(key)}`)
-            }
+        // const Configuration = Java.use('com.google.android.ims.provisioning.config.Configuration')
+        // Configuration.k.overload().implementation = function () {
+        //     Log.e(`Configuration.k()`)
+        //     printConfiguration(this)
+        //     return this.k()
+        // }
 
-            return this.$init(
-                i,
-                i2,
-                i3,
-                iArr,
-                l,
-                i4,
-                bundle,
-                i5,
-                str,
-                str2,
-                str3,
-                str4,
-                str5,
-                str6,
-                str7,
-                str8
-            )
+        function dumpList(list) {
+            if (list) {
+                let res = []
+                for (let i = 0; i < list.size(); i++) {
+                    res.push('' + list.get(i))
+                }
+                return res
+            }
+            return []
         }
 
-        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(
-                Java.use("android.util.Log").getStackTraceString(
-                    Java.use("java.lang.Throwable").$new()
-                )
+        const bjaq = Java.use('bjaq')
+        bjaq.f.overload('java.io.InputStream').implementation = function (inputStream) {
+            const res = this.f(inputStream)
+            Log.e(
+                `bjaq.f() => ${JSON.stringify({
+                    a: dumpList(res._a.value),
+                    b: dumpList(res._b.value),
+                    c: res._c.value
+                })}`
             )
-
-            Log.i("SetAsterismConsentResponse.$init")
-            Log.i(`i: ${i}, str: ${str}, str2: ${str2}`)
-            // return this.$init(
-            //     1,
-            //     "c4q5zP5Ft4A:APA91bEASr50HwwOY789LSZrcHPT8aG_fT19xlelS35qgIJeC3UBYypAHmmL9IygzlphzTKKz0wCdiQwuoPZMJKvgKPmGi3_imdr1CY0s7fs8qa_LMgNDFfvWEnpTCReAYc7IjThhFQq",
-            //     "c4q5zP5Ft4A"
-            // )
-            return this.$init(i, str, str2)
+            return res
         }
-
-        // spoof sim to exist
-        const bjsf = Java.use("bjsf")
-        bjsf.s.overload("android.content.Context").implementation = function (
-            c
-        ) {
-            Log.i("bjsf.s spoof sim to exist")
-            return true
+        bjaq.a.overload(
+            'java.io.InputStream',
+            'com.google.android.ims.provisioning.config.Configuration',
+            'boolean'
+        ).implementation = function (inputStream, configuration, z) {
+            Log.e(`bjaq.a()`)
+            printConfiguration(configuration)
+            return this.a(inputStream, configuration, z)
         }
     })
 })

+ 227 - 47
scripts/_spoof_gms.js

@@ -1,16 +1,16 @@
-const mcc = "302"
-const mnc = "299"
-const simOperator = "302299"
-const networkOperator = "302299"
-const simSerialNumber = "25343849204326395079"
-const iccId = "25343849204326395079"
-const number = "4305581376"
-const imei = "359028031160102"
-const imsi = "302299418648530"
-const countryIso = "ca"
-const subId = "45"
-const androidId = "d7a277d884757666"
-const serialNumber = "41d7c20e"
+const mcc = "310"
+const mnc = "160"
+const simOperator = "310160"
+const networkOperator = "310160"
+const simSerialNumber = "21116333706453551203"
+const iccId = "21116333706453551203"
+const number = "4014224597"
+const imei = "359294044823884"
+const imsi = "310160362935445"
+const countryIso = "us"
+const subId = "60"
+const androidId = "428a920c85b8edc6"
+const serialNumber = "650e0483"
 
 function trace(tag) {
     Log.e(
@@ -31,6 +31,16 @@ function dump(obj) {
     }
 }
 
+function dumpJson(obj) {
+    try {
+        const gson = Java.use("com.google.gson.Gson").$new()
+        const json = gson.toJson(obj)
+        return JSON.parse(json)
+    } catch (error) {
+        return ""
+    }
+}
+
 class Log {
     static TAG = "[GMS]"
     static Debug = false
@@ -109,12 +119,12 @@ Java.perform(function () {
     const CarrierConfigManager = Java.use(
         "android.telephony.CarrierConfigManager"
     )
-    // CarrierConfigManager.getConfigForSubId.overload("int").implementation =
-    //     function (i) {
-    //         const _config = this.getConfigForSubId(i)
-    //         Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
-    //         return _config
-    //     }
+    CarrierConfigManager.getConfigForSubId.overload("int").implementation =
+        function (i) {
+            const _config = this.getConfigForSubId(i)
+            Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
+            return _config
+        }
 
     const SubscriptionManager = Java.use(
         "android.telephony.SubscriptionManager"
@@ -245,15 +255,15 @@ Java.perform(function () {
     //     }
     //     return subInfo
     // }
-    SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
-        "int"
-    ).implementation = function (i) {
-        const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
-        Log.i(
-            `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex: ${_info}`
-        )
-        return _info
-    }
+    // SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex.overload(
+    //     "int"
+    // ).implementation = function (i) {
+    //     const _info = this.getActiveSubscriptionInfoForSimSlotIndex(i)
+    //     Log.i(
+    //         `SubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex: ${_info}`
+    //     )
+    //     return _info
+    // }
     // SubscriptionManager.isActiveSubscriptionId.overload("int").implementation =
     //     function (i) {
     //         const _isActive = this.isActiveSubscriptionId(i)
@@ -319,11 +329,11 @@ Java.perform(function () {
     // }
 
     const TelephonyManager = Java.use("android.telephony.TelephonyManager")
-    TelephonyManager.createForSubscriptionId.overload("int").implementation =
-        function (i) {
-            Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
-            return this
-        }
+    // TelephonyManager.createForSubscriptionId.overload("int").implementation =
+    //     function (i) {
+    //         Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
+    //         return this
+    //     }
 
     TelephonyManager.getLine1Number.overload().implementation = function () {
         const _number = this.getLine1Number()
@@ -564,6 +574,163 @@ Java.perform(function () {
         return this.$init(i, str, str2)
     }
 
+    try {
+        const amac = Java.use("amac")
+        const amlo = Java.use("amlo")
+        const emiy = Java.use("emiy")
+        const emiz = Java.use("emiz")
+        const emis = Java.use("emis")
+        const fiwu = Java.use("fiwu")
+        const ambs = Java.use("ambs")
+        const emkm = Java.use("emkm")
+        const fivh = Java.use("fivh")
+        const fivk = Java.use("fivk")
+        const fivn = Java.use("fivn")
+        const emjr = Java.use("emjr")
+        const amag = Java.use("amag")
+        const ftha = Java.use("ftha")
+        const ftgy = Java.use("ftgy")
+        const fuem = Java.use("fuem")
+        const fiwt = Java.use("fiwt")
+        const TimeUnit = Java.use("java.util.concurrent.TimeUnit")
+        const ambi = Java.use("ambi")
+        const fivj = Java.use("fivj")
+        amac.o.overload("amlu", "boolean", "boolean", "fiwt").implementation =
+            function (amluVar, z, z2, fiwtVar) {
+                Log.e(
+                    ` amac.o(amluVar=${dump(
+                        amluVar
+                    )}, z=${z}, z2=${z2}, fiwtVar=${dump(fiwtVar)})`
+                )
+                try {
+                    var z3
+                    var z4
+                    const eq = fiwtVar.eQ()
+                    const arr0 = Java.array("java.lang.Object", [this.z(eq)])
+                    this._a.value.d("SetConsentRequest: %s", arr0)
+
+                    var amloVar = this._d.value
+                    var emiyVar = Java.cast(emiz.h.value.eV(), emiy)
+
+                    if (!emiyVar._b.value.fm()) {
+                        emiyVar.O()
+                    }
+                    var emizVar = Java.cast(emiyVar._b.value, emiz)
+                    emizVar.b = emkm.a(10)
+                    Log.i(emizVar, emizVar.b, emizVar.a)
+
+                    emizVar.a = emizVar.a | 1
+                    var eV = emis.d.value.eV()
+
+                    if ((fiwtVar.a.value & 2) != 0) {
+                        var fivnVar = fiwtVar.e.value
+                        if (fivnVar == null) {
+                            fivnVar = fivn.c.value
+                        }
+                        var b = fivh.b(fivnVar.a.value)
+                        if (b == 0) {
+                            z3 = false
+                        } else if (b == 3) {
+                            z3 = true
+                        } else {
+                            z3 = false
+                        }
+                        if (!eV._b.value.fm()) {
+                            eV.O()
+                        }
+                        var fbzbVar = eV._b.value
+                        var emisVar = Java.cast(fbzbVar, emis)
+                        emisVar.a |= 1
+                        emisVar.b = z3
+                        var fivnVar2 = fiwtVar.e.value
+                        if (fivnVar2 == null) {
+                            fivnVar2 = fivn.c.value
+                        }
+                        var a2 = fivk.a(fivnVar2.b.value)
+                        if (a2 == 0) {
+                            z4 = false
+                        } else if (a2 == 3) {
+                            z4 = true
+                        } else {
+                            z4 = false
+                        }
+                        if (!fbzbVar.fm()) {
+                            eV.O()
+                        }
+                        var emisVar2 = Java.cast(eV._b.value, emis)
+                        emisVar2.a |= 2
+                        emisVar2.c = z4
+                    }
+                    if (!emiyVar._b.value.fm()) {
+                        emiyVar.O()
+                    }
+                    var emizVar2 = Java.cast(emiyVar._b.value, emiz)
+                    var emisVar3 = Java.cast(eV.K(), emis)
+                    emisVar3.getClass()
+                    emizVar2.c = emisVar3
+                    emizVar2.a |= 2
+                    amloVar.A(amluVar, emjr.b(5), Java.cast(emiyVar.K(), emiz))
+
+                    var v = this.v()
+                    var akxiVar = this._c.value
+                    var j = this._e.value
+                    if (amag._a.value == null) {
+                        amag._a.value = ftha.b(
+                            ftgy._a.value,
+                            "google.internal.communications.phonedeviceverification.v1.PhoneDeviceVerification/SetConsent",
+                            fuem.a(fiwt.k.value),
+                            fuem.a(fiwu.a.value)
+                        )
+                    }
+                    // const vdg = v.d.value.g(
+                    //     amag._a.value,
+                    //     akxiVar,
+                    //     fiwtVar,
+                    //     Java.use('java.lang.Long').valueOf(j).longValue(),
+                    //     TimeUnit.MILLISECONDS.value,
+                    //     v.e.value
+                    // )
+                    // Log.i("aaaaa")
+                    // const eqres = Java.cast(vdg, fiwu).eQ()
+                    // Log.i("bbbbb")
+                    // const res = this.z(eqres)
+                    // Log.i("SetConsentResponse: ", res)
+                    // const arr = Java.array("java.lang.Object", [res])
+                    // this._a.value.d("SetConsentResponse: %s", arr)
+                    var amloVar2 = this._d.value
+                    var emiyVar2 = Java.cast(emiz.h.value.eV(), emiy)
+                    if (!emiyVar2._b.value.fm()) {
+                        emiyVar2.O()
+                    }
+                    var emizVar3 = Java.cast(emiyVar2._b.value, emiz)
+
+                    emizVar3.b = emkm.a(10)
+                    emizVar3.a |= 1
+                    amloVar2.A(
+                        amluVar,
+                        emjr.b(6),
+                        Java.cast(emiyVar2.K(), emiz)
+                    )
+                    var a3 = ambi.b().a(this._b.value.getApplicationContext())
+                    a3.n(z)
+                    a3.m(Java.use("java.lang.Boolean").valueOf(z2))
+                    var b2 = fivj.b(fiwtVar.g.value)
+                    if (b2 == 0) {
+                        b2 = 1
+                    }
+                    var a4 = fivj.a(b2)
+                    var edit = Java.cast(a3, ambs)._c.value.edit()
+                    edit.putInt("device_consent_version", a4)
+                    edit.apply()
+                    Log.i("oooooooooo")
+                } catch (e) {
+                    Log.i("2222222", e)
+                    trace()
+                }
+                // this.o(amluVar, z, z2, fiwtVar)
+            }
+    } catch (error) {}
+
     const alyx = Java.use("alyx")
     alyx.a.overload("fixf").implementation = function (fixf) {
         const b = this.a(fixf)
@@ -586,13 +753,16 @@ Java.perform(function () {
         const d = Java.cast(amlu.d.value, HashMap) // map
         const e = Java.cast(amlu.e.value, HashMap) // map
 
-        Log.e(`alyx.m(
-                a=${a}, 
-                f=${f}, 
-                g=${g ? dump(g) : null}, 
-                h=${h ? dump(h) : null}, 
-                d=${d ? dump(d) : null}, 
-                e=${e ? dump(e) : null})`)
+        Log.e(
+            `alyx.m(${JSON.stringify({
+                a,
+                f,
+                g: g ? JSON.parse(dump(g)) : null,
+                h: h ? JSON.parse(dump(h)) : null,
+                d: d ? JSON.parse(dump(d)) : null,
+                e: e ? JSON.parse(dump(e)) : null
+            })})`
+        )
 
         const res = this.m(amlu, list)
         Log.e(`alyx.m res: ${dump(res)}`)
@@ -604,16 +774,18 @@ Java.perform(function () {
         "java.lang.String",
         "java.lang.String"
     ).implementation = function (amlu, list, str, str2) {
-        trace()
-        Log.e(`alyx.r(
-            amlu=${dump(amlu)},
-            list=${dump(list)},
-            str=${str},
-            str2=${str2})`)
+        Log.e(
+            `alyx.r(${JSON.stringify({
+                amlu: dumpJson(amlu),
+                list: dumpJson(list),
+                str,
+                str2
+            })})`
+        )
         try {
             const res = this.r(amlu, list, str, str2)
-            return res
             Log.e(`alyx.r res: ${res}`)
+            return res
         } catch (error) {
             Log.e(`alyx.r error: ${error}`)
         }
@@ -781,4 +953,12 @@ Java.perform(function () {
     //     trace()
     //     return this.b(akxi, fiwx, j)
     // }
+
+    // const Configuration = Java.use(
+    //     "com.google.android.ims.provisioning.config.Configuration"
+    // )
+    // Configuration.k.overload().implementation = function () {
+    //     Log.e(`Configuration.k() ${dump(this)}`)
+    //     return this.k()
+    // }
 })

+ 1 - 1
scripts/sendsms.js

@@ -20,7 +20,7 @@ Java.perform(() => {
             const intent = RcsHackTool.createSmsIntent(
                 instance.mContext.value,
                 "3538",
-                "Your Messenger verification code is G-707299"
+                "Your Messenger verification code is G-392411"
             )
             // instance.mContext.value.sendBroadcast(intent)
 

+ 213 - 125
scripts/spoof1.js

@@ -1,28 +1,28 @@
-const mcc = "{{mcc}}"
-const mnc = "{{mnc}}"
-const simOperator = "{{simOperator}}"
-const networkOperator = "{{networkOperator}}"
-const simSerialNumber = "{{simSerialNumber}}"
-const iccId = "{{iccId}}"
-const number = "{{number}}"
-const imei = "{{imei}}"
-const imsi = "{{imsi}}"
-const countryIso = "{{countryIso}}"
-const subId = "{{subId}}"
+const mcc = '{{mcc}}'
+const mnc = '{{mnc}}'
+const simOperator = '{{simOperator}}'
+const networkOperator = '{{networkOperator}}'
+const simSerialNumber = '{{simSerialNumber}}'
+const iccId = '{{iccId}}'
+const number = '{{number}}'
+const imei = '{{imei}}'
+const imsi = '{{imsi}}'
+const countryIso = '{{countryIso}}'
+const subId = '{{subId}}'
 
 class Log {
-    static TAG = "[SMS]"
+    static TAG = '[SMS]'
     static Debug = false
     static format(...msg) {
         let m = []
         for (let i = 0; i < msg.length; i++) {
-            if (typeof msg[i] === "object") {
+            if (typeof msg[i] === 'object') {
                 m.push(JSON.stringify(msg[i]))
             } else {
                 m.push(msg[i])
             }
         }
-        m = m.join(" ")
+        m = m.join(' ')
         return m
     }
     static i(...msg) {
@@ -42,10 +42,8 @@ class Log {
 
 setImmediate(() => {
     Java.perform(function () {
-        const SmsManager = Java.use("android.telephony.SmsManager")
-        SmsManager.getSmsManagerForSubscriptionId.overload(
-            "int"
-        ).implementation = function (i) {
+        const SmsManager = Java.use('android.telephony.SmsManager')
+        SmsManager.getSmsManagerForSubscriptionId.overload('int').implementation = function (i) {
             const _smsManager = this.getSmsManagerForSubscriptionId(i)
             Log.i(`SmsManager.getSmsManagerForSubscriptionId: ${i}`)
             return _smsManager
@@ -71,34 +69,25 @@ setImmediate(() => {
         //     Log.i(`SmsManager.getSubscriptionId: ${_subId} -> ${subId}`)
         //     return parseInt(subId)
         // }
-        SmsManager.getCarrierConfigValues.overload().implementation =
-            function () {
-                const _config = this.getCarrierConfigValues()
-                Log.i(`SmsManager.getCarrierConfigValues: ${_config}`)
-                return _config
-            }
+        SmsManager.getCarrierConfigValues.overload().implementation = function () {
+            const _config = this.getCarrierConfigValues()
+            Log.i(`SmsManager.getCarrierConfigValues: ${_config}`)
+            return _config
+        }
 
-        const CarrierConfigManager = Java.use(
-            "android.telephony.CarrierConfigManager"
-        )
-        CarrierConfigManager.getConfigForSubId.overload("int").implementation =
-            function (i) {
-                const _config = this.getConfigForSubId(i)
-                Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
-                return _config
-            }
+        const CarrierConfigManager = Java.use('android.telephony.CarrierConfigManager')
+        CarrierConfigManager.getConfigForSubId.overload('int').implementation = function (i) {
+            const _config = this.getConfigForSubId(i)
+            Log.i(`CarrierConfigManager.getConfigForSubId: ${i}`)
+            return _config
+        }
 
-        const SubscriptionManager = Java.use(
-            "android.telephony.SubscriptionManager"
-        )
-        SubscriptionManager.getActiveSubscriptionInfoCount.overload().implementation =
-            function () {
-                const _count = this.getActiveSubscriptionInfoCount()
-                Log.i(
-                    `SubscriptionManager.getActiveSubscriptionInfoCount: ${_count}`
-                )
-                return _count
-            }
+        const SubscriptionManager = Java.use('android.telephony.SubscriptionManager')
+        SubscriptionManager.getActiveSubscriptionInfoCount.overload().implementation = function () {
+            const _count = this.getActiveSubscriptionInfoCount()
+            Log.i(`SubscriptionManager.getActiveSubscriptionInfoCount: ${_count}`)
+            return _count
+        }
         // SubscriptionManager.getDefaultSubscriptionId.overload().implementation =
         //     function () {
         //         const _subId = this.getDefaultSubscriptionId()
@@ -155,20 +144,12 @@ setImmediate(() => {
         //     )
         //     return true
         // }
-        SubscriptionManager.getPhoneNumber.overload("int").implementation =
-            function (i) {
-                Log.i(
-                    `spoof SubscriptionManager.getPhoneNumber(${i}): -> ${number}`
-                )
-                return number
-            }
-        SubscriptionManager.getPhoneNumber.overload(
-            "int",
-            "int"
-        ).implementation = function (i, i2) {
-            Log.i(
-                `spoof SubscriptionManager.getPhoneNumber(${i},${i2}): -> ${number}`
-            )
+        SubscriptionManager.getPhoneNumber.overload('int').implementation = function (i) {
+            Log.i(`spoof SubscriptionManager.getPhoneNumber(${i}): -> ${number}`)
+            return number
+        }
+        SubscriptionManager.getPhoneNumber.overload('int', 'int').implementation = function (i, i2) {
+            Log.i(`spoof SubscriptionManager.getPhoneNumber(${i},${i2}): -> ${number}`)
             return number
         }
         // SubscriptionManager.getActiveSubscriptionInfoList.overload().implementation =
@@ -234,7 +215,7 @@ setImmediate(() => {
         //     return true
         // }
 
-        const SubscriptionInfo = Java.use("android.telephony.SubscriptionInfo")
+        const SubscriptionInfo = Java.use('android.telephony.SubscriptionInfo')
         SubscriptionInfo.getMcc.overload().implementation = function () {
             const _mcc = this.getMcc()
             Log.i(`spoof SubscriptionInfo.getMcc: ${_mcc} -> ${mcc}`)
@@ -249,17 +230,13 @@ setImmediate(() => {
 
         SubscriptionInfo.getMccString.overload().implementation = function () {
             const _mccString = this.getMccString()
-            Log.i(
-                `spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`
-            )
+            Log.i(`spoof SubscriptionInfo.getMccString: ${_mccString} -> ${mcc}`)
             return mcc
         }
 
         SubscriptionInfo.getMncString.overload().implementation = function () {
             const _mncString = this.getMncString()
-            Log.i(
-                `spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`
-            )
+            Log.i(`spoof SubscriptionInfo.getMncString: ${_mncString} -> ${mnc}`)
             return mnc
         }
 
@@ -277,9 +254,7 @@ setImmediate(() => {
 
         SubscriptionInfo.getCountryIso.overload().implementation = function () {
             const _countryIso = this.getCountryIso()
-            Log.i(
-                `spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`
-            )
+            Log.i(`spoof SubscriptionInfo.getCountryIso: ${_countryIso} -> ${countryIso}`)
             return countryIso
         }
 
@@ -296,57 +271,42 @@ setImmediate(() => {
         //         return parseInt(subId)
         //     }
 
-        const TelephonyManager = Java.use("android.telephony.TelephonyManager")
+        const TelephonyManager = Java.use('android.telephony.TelephonyManager')
         // TelephonyManager.createForSubscriptionId.overload(
         //     "int"
         // ).implementation = function (i) {
         //     Log.i(`spoof TelephonyManager.createForSubscriptionId: ${i}`)
         //     return this
         // }
-        TelephonyManager.getLine1Number.overload().implementation =
-            function () {
-                const _number = this.getLine1Number()
-                Log.i(
-                    `spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`
-                )
-                return number
-            }
+        TelephonyManager.getLine1Number.overload().implementation = function () {
+            const _number = this.getLine1Number()
+            Log.i(`spoof TelephonyManager.getLine1Number: ${_number} -> ${number}`)
+            return number
+        }
 
-        TelephonyManager.getSimOperator.overload().implementation =
-            function () {
-                const _simOperator = this.getSimOperator()
-                Log.i(
-                    `spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`
-                )
-                return simOperator
-            }
+        TelephonyManager.getSimOperator.overload().implementation = function () {
+            const _simOperator = this.getSimOperator()
+            Log.i(`spoof TelephonyManager.getSimOperator: ${_simOperator} -> ${simOperator}`)
+            return simOperator
+        }
 
-        TelephonyManager.getNetworkOperator.overload().implementation =
-            function () {
-                const _networkOperator = this.getNetworkOperator()
-                Log.i(
-                    `spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`
-                )
-                return networkOperator
-            }
+        TelephonyManager.getNetworkOperator.overload().implementation = function () {
+            const _networkOperator = this.getNetworkOperator()
+            Log.i(`spoof TelephonyManager.getNetworkOperator: ${_networkOperator} -> ${networkOperator}`)
+            return networkOperator
+        }
 
-        TelephonyManager.getSimSerialNumber.overload().implementation =
-            function () {
-                const _simSerialNumber = this.getSimSerialNumber()
-                Log.i(
-                    `spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`
-                )
-                return simSerialNumber
-            }
+        TelephonyManager.getSimSerialNumber.overload().implementation = function () {
+            const _simSerialNumber = this.getSimSerialNumber()
+            Log.i(`spoof TelephonyManager.getSimSerialNumber: ${_simSerialNumber} -> ${simSerialNumber}`)
+            return simSerialNumber
+        }
 
-        TelephonyManager.getSubscriberId.overload().implementation =
-            function () {
-                const _imsi = this.getSubscriberId()
-                Log.i(
-                    `spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`
-                )
-                return imsi
-            }
+        TelephonyManager.getSubscriberId.overload().implementation = function () {
+            const _imsi = this.getSubscriberId()
+            Log.i(`spoof TelephonyManager.getSubscriberId: ${_imsi} -> ${imsi}`)
+            return imsi
+        }
 
         TelephonyManager.getImei.overload().implementation = function () {
             const _imei = this.getImei()
@@ -354,23 +314,17 @@ setImmediate(() => {
             return imei
         }
 
-        TelephonyManager.getNetworkCountryIso.overload().implementation =
-            function () {
-                const _countryIso = this.getNetworkCountryIso()
-                Log.i(
-                    `spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`
-                )
-                return countryIso
-            }
+        TelephonyManager.getNetworkCountryIso.overload().implementation = function () {
+            const _countryIso = this.getNetworkCountryIso()
+            Log.i(`spoof TelephonyManager.getNetworkCountryIso: ${_countryIso} -> ${countryIso}`)
+            return countryIso
+        }
 
-        TelephonyManager.getSimCountryIso.overload().implementation =
-            function () {
-                const _countryIso = this.getSimCountryIso()
-                Log.i(
-                    `spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`
-                )
-                return countryIso
-            }
+        TelephonyManager.getSimCountryIso.overload().implementation = function () {
+            const _countryIso = this.getSimCountryIso()
+            Log.i(`spoof TelephonyManager.getSimCountryIso: ${_countryIso} -> ${countryIso}`)
+            return countryIso
+        }
 
         // TelephonyManager.getSubscriptionId.overload().implementation =
         //     function () {
@@ -535,5 +489,139 @@ setImmediate(() => {
         //     Log.i("bjsf.s spoof sim to exist")
         //     return true
         // }
+
+        function printConfiguration(config) {
+            JSON.stringify({
+                mDeviceId: config.mDeviceId.value,
+                mTachyonAuthToken: config.mTachyonAuthToken.value,
+                mVerifiedSmsToken: config.mVerifiedSmsToken.value,
+                tachygramEnabled: config.tachygramEnabled.value,
+                tachyonUrl: config.tachyonUrl.value,
+                mConfigState: config.mConfigState.value,
+                mToken: {
+                    mValue: config.mToken.value.mValue.value,
+                    mExpirationTime: config.mToken.value.mExpirationTime.value
+                },
+                mType: config.mType.value,
+                mImsConfiguration: {
+                    mAuthDigestPassword: config.mImsConfiguration.value.mAuthDigestPassword.value,
+                    mAuthDigestRealm: config.mImsConfiguration.value.mAuthDigestRealm.value,
+                    mAuthDigestUsername: config.mImsConfiguration.value.mAuthDigestUsername.value,
+                    mAuthenticationScheme: config.mImsConfiguration.value.mAuthenticationScheme.value,
+                    mDomain: config.mImsConfiguration.value.mDomain.value,
+                    mPcscfAddress: config.mImsConfiguration.value.mPcscfAddress.value,
+                    mPcsfPort: config.mImsConfiguration.value.mPcsfPort.value,
+                    mPrivateIdentity: config.mImsConfiguration.value.mPrivateIdentity.value,
+                    mPsMediaTransport: config.mImsConfiguration.value.mPsMediaTransport.value,
+                    mPsRtpTransport: config.mImsConfiguration.value.mPsRtpTransport.value,
+                    mPsSipTransport: config.mImsConfiguration.value.mPsSipTransport.value,
+                    mPublicIdentity: config.mImsConfiguration.value.mPublicIdentity.value,
+                    mUserName: config.mImsConfiguration.value.mUserName.value,
+                    mWifiMediaTransport: config.mImsConfiguration.value.mWifiMediaTransport.value,
+                    mWifiRtpTransport: config.mImsConfiguration.value.mWifiRtpTransport.value,
+                    mWifiSipTransport: config.mImsConfiguration.value.mWifiSipTransport.value,
+                    mT1: config.mImsConfiguration.value.mT1.value,
+                    mT2: config.mImsConfiguration.value.mT2.value,
+                    mT4: config.mImsConfiguration.value.mT4.value,
+                    mLocalSipPort: config.mImsConfiguration.value.mLocalSipPort.value,
+                    mQ: config.mImsConfiguration.value.mQ.value,
+                    mKeepAlive: config.mImsConfiguration.value.mKeepAlive.value,
+                    mPhoneContext: config.mImsConfiguration.value.mPhoneContext.value,
+                    mRegRetryBaseTime: config.mImsConfiguration.value.mRegRetryBaseTime.value,
+                    mRegRetryMaxTime: config.mImsConfiguration.value.mRegRetryMaxTime.value,
+                    mNatUrlFmt: config.mImsConfiguration.value.mNatUrlFmt.value,
+                    mIntUrlFmt: config.mImsConfiguration.value.mIntUrlFmt.value,
+                    rcsVolteSingleRegistration: config.mImsConfiguration.value.rcsVolteSingleRegistration.value
+                },
+                mInstantMessageConfiguration: {
+                    mAutoAccept: config.mInstantMessageConfiguration.value.mAutoAccept.value,
+                    mAutoAcceptGroupChat: config.mInstantMessageConfiguration.value.mAutoAcceptGroupChat.value,
+                    mChatAuth: config.mInstantMessageConfiguration.value.mChatAuth.value,
+                    mChatRevokeTimer: config.mInstantMessageConfiguration.value.mChatRevokeTimer.value,
+                    mConferenceFactoryUri: config.mInstantMessageConfiguration.value.mConferenceFactoryUri.value,
+                    mDeferredMessageFunctionUri:
+                        config.mInstantMessageConfiguration.value.mDeferredMessageFunctionUri.value,
+                    mExploderUri: config.mInstantMessageConfiguration.value.mExploderUri.value,
+                    mFileTransferAutoAcceptSupported:
+                        config.mInstantMessageConfiguration.value.mFileTransferAutoAcceptSupported.value,
+                    mFtCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtCapAlwaysOn.value,
+                    mFtHttpCapAlwaysOn: config.mInstantMessageConfiguration.value.mFtHttpCapAlwaysOn.value,
+                    mFtHttpContentServerPassword:
+                        config.mInstantMessageConfiguration.value.mFtHttpContentServerPassword.value,
+                    mFtHttpContentServerUri: config.mInstantMessageConfiguration.value.mFtHttpContentServerUri.value,
+                    mFtHttpContentServerUser: config.mInstantMessageConfiguration.value.mFtHttpContentServerUser.value,
+                    mFtStoreAndForwardEnabled:
+                        config.mInstantMessageConfiguration.value.mFtStoreAndForwardEnabled.value,
+                    mFullGroupSandFSupported: config.mInstantMessageConfiguration.value.mFullGroupSandFSupported.value,
+                    mImCapAlwaysOn: config.mInstantMessageConfiguration.value.mImCapAlwaysOn.value,
+                    mImSessionStart: config.mInstantMessageConfiguration.value.mImSessionStart.value,
+                    mImWarnSF: config.mInstantMessageConfiguration.value.mImWarnSF.value,
+                    mMaxAdhocGroupSize: config.mInstantMessageConfiguration.value.mMaxAdhocGroupSize.value,
+                    mPublishPresenceCap: config.mInstantMessageConfiguration.value.mPublishPresenceCap.value,
+                    mReconnectGuardTimer: config.mInstantMessageConfiguration.value.mReconnectGuardTimer.value,
+                    mSmsFallBackAuth: config.mInstantMessageConfiguration.value.mSmsFallBackAuth.value,
+                    mMaxSize1to1: config.mInstantMessageConfiguration.value.mMaxSize1to1.value,
+                    mMaxSize1toM: config.mInstantMessageConfiguration.value.mMaxSize1toM.value,
+                    mMaxSizeFileTransfer: config.mInstantMessageConfiguration.value.mMaxSizeFileTransfer.value,
+                    mWarnSizeFileTransfer: config.mInstantMessageConfiguration.value.mWarnSizeFileTransfer.value,
+                    mFtThumbnailSupported: config.mInstantMessageConfiguration.value.mFtThumbnailSupported.value,
+                    mFtDefaultMechanism: config.mInstantMessageConfiguration.value.mFtDefaultMechanism.value,
+                    mMessageTech: config.mInstantMessageConfiguration.value.mMessageTech.value,
+                    mDefaultSharingMethod: config.mInstantMessageConfiguration.value.mDefaultSharingMethod.value,
+                    mTimerIdleSecs: config.mInstantMessageConfiguration.value.mTimerIdleSecs.value,
+                    mDeliveryReportTimeout: config.mInstantMessageConfiguration.value.mDeliveryReportTimeout.value,
+                    mAnonymousChat: config.mInstantMessageConfiguration.value.mAnonymousChat.value,
+                    mMaxConcurrentSession: config.mInstantMessageConfiguration.value.mMaxConcurrentSession.value,
+                    mSwitchoverSize: config.mInstantMessageConfiguration.value.mSwitchoverSize.value
+                },
+                mReconfigRequested: config.mReconfigRequested.value,
+                mMessageTech: config.mMessageTech.value,
+                rcsState: config.rcsState.value,
+                iccids: config.iccids.value,
+                mValiditySecs: config.mValiditySecs.value,
+                mLastUpdateSecs: config.mLastUpdateSecs.value,
+                mVersion: config.mVersion.value
+            })
+        }
+
+        // const Configuration = Java.use('com.google.android.ims.provisioning.config.Configuration')
+        // Configuration.k.overload().implementation = function () {
+        //     Log.e(`Configuration.k()`)
+        //     printConfiguration(this)
+        //     return this.k()
+        // }
+
+        function dumpList(list) {
+            if (list) {
+                let res = []
+                for (let i = 0; i < list.size(); i++) {
+                    res.push('' + list.get(i))
+                }
+                return res
+            }
+            return []
+        }
+
+        const bjaq = Java.use('bjaq')
+        bjaq.f.overload('java.io.InputStream').implementation = function (inputStream) {
+            const res = this.f(inputStream)
+            Log.e(
+                `bjaq.f() => ${JSON.stringify({
+                    a: dumpList(res._a.value),
+                    b: dumpList(res._b.value),
+                    c: res._c.value
+                })}`
+            )
+            return res
+        }
+        bjaq.a.overload(
+            'java.io.InputStream',
+            'com.google.android.ims.provisioning.config.Configuration',
+            'boolean'
+        ).implementation = function (inputStream, configuration, z) {
+            Log.e(`bjaq.a()`)
+            printConfiguration(configuration)
+            return this.a(inputStream, configuration, z)
+        }
     })
 })

+ 8 - 0
scripts/spoof_gms.js

@@ -953,4 +953,12 @@ Java.perform(function () {
     //     trace()
     //     return this.b(akxi, fiwx, j)
     // }
+
+    // const Configuration = Java.use(
+    //     "com.google.android.ims.provisioning.config.Configuration"
+    // )
+    // Configuration.k.overload().implementation = function () {
+    //     Log.e(`Configuration.k() ${dump(this)}`)
+    //     return this.k()
+    // }
 })

+ 26 - 0
sinch.js

@@ -0,0 +1,26 @@
+import axios from 'axios'
+// Find your Service Plan ID and API Token at dashboard.sinch.com/sms/api/rest
+// Find your Sinch numbers at dashboard.sinch.com/numbers/your-numbers/numbers
+const SERVICE_PLAN_ID = 'a1ac863dc82e4075b816a22d8f75a9c7'
+const API_TOKEN = 'eb521456941c4fce861e254fb669f743'
+const SINCH_NUMBER = '+12085686210'
+const TO_NUMBER = '+16789901017'
+const REGION = 'us'
+const SINCH_URL = 'https://' + REGION + '.sms.api.sinch.com/xms/v1/' + SERVICE_PLAN_ID + '/batches'
+
+const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer ' + API_TOKEN }
+const payload = JSON.stringify({
+    from: SINCH_NUMBER,
+    to: [TO_NUMBER],
+    body: 'Programmers are tools for converting caffeine into code. We just got a new shipment of mugs! Check them out: https://tinyurl.com/4a6fxce7!'
+})
+
+// axios
+//     .post(SINCH_URL, payload, { headers })
+//     .then((response) => console.log(response.data))
+//     .catch((error) => console.error('There was an error!', error.response))
+
+axios
+    .get(`https://${REGION}.sms.api.sinch.com/xms/v1/${SERVICE_PLAN_ID}/inbounds`, { headers })
+    .then((response) => console.log(response.data))
+    .catch((error) => console.error('There was an error!', error.response))

+ 13 - 13
vars.json

@@ -1,15 +1,15 @@
 {
-    "mcc": "255",
-    "mnc": "06",
-    "simOperator": "25506",
-    "networkOperator": "25506",
-    "simSerialNumber": "47254539375685548460",
-    "iccId": "47254539375685548460",
-    "number": "638783055",
-    "imei": "011546009466177",
-    "imsi": "255063661827038",
-    "countryIso": "ua",
-    "subId": "45",
-    "androidId": "8f0804f720128407",
-    "serialNumber": "c3ccaebf"
+    "mcc": "310",
+    "mnc": "010",
+    "simOperator": "310010",
+    "networkOperator": "310010",
+    "simSerialNumber": "22960550165845760409",
+    "iccId": "22960550165845760409",
+    "number": "6789901017",
+    "imei": "359294044816961",
+    "imsi": "310010718394481",
+    "countryIso": "us",
+    "subId": "64",
+    "androidId": "325bf50b6d211c5c",
+    "serialNumber": "39bf5421"
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác