Jelajahi Sumber

first commit

xiongzhu 1 tahun lalu
melakukan
bb3f71a79b
8 mengubah file dengan 920 tambahan dan 0 penghapusan
  1. 4 0
      .gitignore
  2. 19 0
      README.md
  3. 30 0
      agent/index.ts
  4. 3 0
      agent/logger.ts
  5. 512 0
      package-lock.json
  6. 17 0
      package.json
  7. 10 0
      tsconfig.json
  8. 325 0
      yarn.lock

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+/_agent.js
+/node_modules
+.DS_Store
+.vscode

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+### How to compile & load
+
+```sh
+$ git clone git://github.com/oleavr/frida-agent-example.git
+$ cd frida-agent-example/
+$ npm install
+$ frida -U -f com.example.android --no-pause -l _agent.js
+```
+
+### Development workflow
+
+To continuously recompile on change, keep this running in a terminal:
+
+```sh
+$ npm run watch
+```
+
+And use an editor like Visual Studio Code for code completion and instant
+type-checking feedback.

+ 30 - 0
agent/index.ts

@@ -0,0 +1,30 @@
+import { log } from "./logger.js"
+
+setImmediate(() => {
+    Java.perform(() => {
+        var MainActivity = Java.use("com.google.android.apps.messaging.main.MainActivity")
+        var SmsUtil = Java.use("com.example.mysmsapp.SmsUtils")
+        Java.choose("com.example.mysmsapp.MainActivity", {
+            onMatch: function (instance) {
+                log("Found instance of MainActivity")
+                var intent = SmsUtil.getSmsIntent("123", "test")
+                var Receiver = Java.use(
+                    "com.example.mysmsapp.SmsReceiver"
+                )
+                var onReceiveMethod = Receiver.onReceive
+                var receiverInstance = Receiver.$new()
+                var context = Java.use("android.app.ActivityThread")
+                    .currentApplication()
+                    .getApplicationContext()
+                onReceiveMethod.call(receiverInstance, context, intent)
+            },
+            onComplete: function () {
+                log("Completed")
+            }
+        })
+
+        var res = SmsUtil.createFakeSms("123", "11a1sdfasdftest")
+        log(res)
+        log(res.length)
+    })
+})

+ 3 - 0
agent/logger.ts

@@ -0,0 +1,3 @@
+export function log(message: string): void {
+    console.log(message);
+}

+ 512 - 0
package-lock.json

@@ -0,0 +1,512 @@
+{
+  "name": "frida-agent-example",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "frida-agent-example",
+      "version": "1.0.0",
+      "devDependencies": {
+        "@types/frida-gum": "^18.5.1",
+        "@types/node": "^18.19.3",
+        "frida-compile": "^16.4.1"
+      }
+    },
+    "node_modules/@frida/assert": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/assert/-/assert-3.0.2.tgz",
+      "integrity": "sha512-JXJq5SbXGrM5EkjrZKfRmB29zOoEOix02NC6A5TSJ+C1GE/X051EinJJsuOO2pEOx7KZwpvAHvS0WXW0+levKg==",
+      "dev": true
+    },
+    "node_modules/@frida/base64-js": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@frida/base64-js/-/base64-js-2.0.3.tgz",
+      "integrity": "sha512-2w0F+1TynOTCZ/v7du9LdHPWwq0lJhazjo2fF9upMyQmA1zHetT14fLuQ1v/6T0qPgyeEGkiSrybstU8EsgeUA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/@frida/buffer": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/@frida/buffer/-/buffer-7.0.4.tgz",
+      "integrity": "sha512-RxQ1lZRRiCJj7nhcCiD8xeJx0NsLpGGnjqsmTg7jShGmbnVFMN5W7+J+3gqdPSQhc/IxNBIWc6zRXVp4+qnYHg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.5.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "node_modules/@frida/crosspath": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/crosspath/-/crosspath-3.0.0.tgz",
+      "integrity": "sha512-bNdO1spIPD2P40XtK89N49oZpJhstdlnkJZcD4yJ17jrdkm9Ctu0sd9MIEX6Z8Tm8ydhVJBAOMEKl9/R27onAQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "^17.0.36"
+      },
+      "engines": {
+        "node": ">=14.9.0"
+      }
+    },
+    "node_modules/@frida/crosspath/node_modules/@types/node": {
+      "version": "17.0.45",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+      "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
+      "dev": true
+    },
+    "node_modules/@frida/crypto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@frida/crypto/-/crypto-1.0.1.tgz",
+      "integrity": "sha512-WXTkVjESvX8TIVXIynJJv9BKSIdQP0Iis04StIXknkDi1ULdMlrypA9p5C4KW1H6GCkNsVnKbybpzsulYCTvag==",
+      "dev": true
+    },
+    "node_modules/@frida/diagnostics_channel": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/diagnostics_channel/-/diagnostics_channel-1.0.0.tgz",
+      "integrity": "sha512-mYX1jp/5Bpk24tHArJNx65iCk7qSuV8YJkdU0gFNVtJUXxfV8BG5WuPa4mL+ynxsbWWpsg/cwKZbLAepYKTdQQ==",
+      "dev": true
+    },
+    "node_modules/@frida/events": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@frida/events/-/events-4.0.4.tgz",
+      "integrity": "sha512-qJVQ6VWHf9sjUKuiJzoCAC00frbpcwxeYfvQ+PP9LU/d70j+QvjWgYe98Qa3ekLaBU6r/AvWm8ThKCDUCLWrQQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/@frida/http": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/http/-/http-4.0.2.tgz",
+      "integrity": "sha512-cvkc7ex7GmVXVOWqtjXKBWUUbYEBgpNRKZbEEoMeI8KiIs8zejKwg+N7rx7296Ao+EP3+xcUr4wBVr3xLaUVfQ==",
+      "dev": true,
+      "dependencies": {
+        "http-parser-js": "^0.5.3"
+      }
+    },
+    "node_modules/@frida/http-parser-js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/http-parser-js/-/http-parser-js-1.0.0.tgz",
+      "integrity": "sha512-2nMrNXt/OeTlWbqnE8AH4Sfz4I2+BGoN206dzKEyC/g2svtn83Xu+zuv/V3TkwrA27s26Mcy84ZwsXeNlqNxUQ==",
+      "dev": true
+    },
+    "node_modules/@frida/https": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/https/-/https-1.0.0.tgz",
+      "integrity": "sha512-OiqQ6qsALcWOktRLq07oJ0i6sH8eX6MXb/MdZS1qVKDRf6wchH4Pjn6fiLB+pt/OlYbggk+DOfpHwSdjTwuHMQ==",
+      "dev": true
+    },
+    "node_modules/@frida/ieee754": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/ieee754/-/ieee754-2.0.2.tgz",
+      "integrity": "sha512-wlcUebnne4ENN7GDr5pTH598ZDLMVOsh0FjenxeVOe6u7ewZkz9gGRnLnZKJAm9kl5G6XhdxhI0cSXVQK/rQUw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/@frida/net": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/net/-/net-4.0.2.tgz",
+      "integrity": "sha512-qQRe7hQ+ZfCcG/SE3P1TRqQ9bmuK/T7wPCYaT4z56rBPWAxsaQbQHpX4fR6OrFaSDr7X0xJLsTbdIp9hGhhLZg==",
+      "dev": true
+    },
+    "node_modules/@frida/os": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/os/-/os-1.0.2.tgz",
+      "integrity": "sha512-3ISAiGNiyIya3QN2EHBCz1wqP0enTdSxP99wUeroeh8+AQRmgoOr/5TRnrVry8pe378anay3fmV/tdUMMSkehQ==",
+      "dev": true
+    },
+    "node_modules/@frida/path": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@frida/path/-/path-2.0.3.tgz",
+      "integrity": "sha512-2RQy36QatoC846fzBhBhV8sXMsSOBGoYvwTHeaE1zUdz7F4RNScP4QEekTTooBYWYX/XjiF36KQpYAzc9OYFtg==",
+      "dev": true
+    },
+    "node_modules/@frida/process": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@frida/process/-/process-1.2.1.tgz",
+      "integrity": "sha512-nvCu22DstFW2ttGFtOKekHM7vnjbZm+XgtvavOt427GNT6uV7k0JYK9tnMbcLMRWv57DG6udAmuJlWs8Paq1ag==",
+      "dev": true
+    },
+    "node_modules/@frida/punycode": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/punycode/-/punycode-3.0.0.tgz",
+      "integrity": "sha512-XVSDY2KamDs1D5/fTVgHcOSNxdU4kTboxzqJMBbTjcQC7XScIT9c0EfbwKCq7Kci6gWQdsHSCr7lU+9Oc4KAdg==",
+      "dev": true
+    },
+    "node_modules/@frida/querystring": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/querystring/-/querystring-1.0.0.tgz",
+      "integrity": "sha512-15m1fOZPmoO/vWlgPJrG/J9/BJDz6a2/JpVGpS8ynNzo+fBhTznaStX5nHxUs24mVTqh/OqLo0EiYJM5WWHXxg==",
+      "dev": true
+    },
+    "node_modules/@frida/readable-stream": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@frida/readable-stream/-/readable-stream-4.1.3.tgz",
+      "integrity": "sha512-ntGUFmi+CryRGRJIK13a/VST2Ad19uivbln8Xd92vKPAARq+6vMIASDyZIqyl5BLRccfiyCHdYgrgQ6RI5rUig==",
+      "dev": true
+    },
+    "node_modules/@frida/reserved-words": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/reserved-words/-/reserved-words-1.0.0.tgz",
+      "integrity": "sha512-2yG/XxJlsGlk/mm6eZTb4OAaQEhkTI2qaFfZFtAsrA/XuCpuMWkS4y/guyBlsRu4hAuhK2HPmNM8+OLLK1zM9Q==",
+      "dev": true
+    },
+    "node_modules/@frida/stream": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/stream/-/stream-1.0.2.tgz",
+      "integrity": "sha512-4OuaC1ztmEKgTq3WeBhsy8Oq+AwW9n9cYnvLklcC9jwD93AEwgbWpecLlxJCVuALvTMdhKPg0nQVfyGYP/i9Bw==",
+      "dev": true,
+      "dependencies": {
+        "@frida/readable-stream": "^4.1.3"
+      }
+    },
+    "node_modules/@frida/string_decoder": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/string_decoder/-/string_decoder-2.0.0.tgz",
+      "integrity": "sha512-in371tYZMHQiW9HF5MS3JDw6Ao6tyBoq34UWy2rzOswYyMG1rpizh85ofi/yVkxDiaqybEZefxzkVittpPGT6g==",
+      "dev": true
+    },
+    "node_modules/@frida/terser": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/terser/-/terser-1.0.0.tgz",
+      "integrity": "sha512-59h9WuNzD1Rx/zwoWqQ/FW/4Y/Q3R91Eng2hEwdHapqiTDvtKbZ08F6CynCR7ZVinrh4tLYsF46AtVPTz1ys9g==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.2",
+        "acorn": "^8.5.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@frida/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
+    },
+    "node_modules/@frida/timers": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/timers/-/timers-3.0.0.tgz",
+      "integrity": "sha512-3b+0igv10aT8TMxefrTAd06rActqbxJLY2Xkkq9vYcPBffB/yHszl0NYIp/5ko8WC3ecDYPU6bQiY6fjs72zTA==",
+      "dev": true
+    },
+    "node_modules/@frida/tty": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/tty/-/tty-1.0.0.tgz",
+      "integrity": "sha512-p/kjLnKYxEAB1MdYP8+5rKv9CsHzyA+0jg9BcGETzjQVKHHcroHDULRxDYUh+DC7qs6cpX8QdDQh9E+a6ydgsQ==",
+      "dev": true
+    },
+    "node_modules/@frida/url": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@frida/url/-/url-1.0.2.tgz",
+      "integrity": "sha512-ZKunbKJHMr8w2Eb/5K1avy0MzK1B998S17wYXNv3RmzBGxMm8S5T0F3qEpRxkU7/72P8m4izyQU87fWl+FjQsQ==",
+      "dev": true,
+      "dependencies": {
+        "@frida/punycode": "^3.0.0",
+        "@frida/querystring": "^1.0.0"
+      }
+    },
+    "node_modules/@frida/util": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@frida/util/-/util-1.0.3.tgz",
+      "integrity": "sha512-htcG3uDiRXv89ERVNNYhfase39kJ2X75ZARfrYcYEtJLFEsSk0nemM1YnEIR4CjrHvdvkWHrwgKkS+acOyoNEg==",
+      "dev": true
+    },
+    "node_modules/@frida/vm": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@frida/vm/-/vm-2.0.0.tgz",
+      "integrity": "sha512-7fsjLWscZT5odNIBtg6qbLNI+vAk1xmii6H5W2kaYkMYt0vRohQEcDSUWacA+eaWlu5SvMjZI82Yibj/3G9pJw==",
+      "dev": true
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+      "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+      "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+      "dev": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.20",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+      "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@types/frida-gum": {
+      "version": "18.5.1",
+      "resolved": "https://registry.npmjs.org/@types/frida-gum/-/frida-gum-18.5.1.tgz",
+      "integrity": "sha512-99geyCbWB+YBCqxcO+ue7dJUQJti7kQ5CHGQtKoz0ENtRswKULGMFKW6QgL657sMiztqhcDHWJjYSPv5GKT1ig==",
+      "dev": true
+    },
+    "node_modules/@types/node": {
+      "version": "18.19.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.3.tgz",
+      "integrity": "sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "8.11.2",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+      "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+      "dev": true
+    },
+    "node_modules/commander": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
+      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/frida-compile": {
+      "version": "16.4.1",
+      "resolved": "https://registry.npmjs.org/frida-compile/-/frida-compile-16.4.1.tgz",
+      "integrity": "sha512-xI9HNtUFpHxuKBGXaL6XJAYH1zWTvNJDrHRnz1hp0oS24iPHt6c01Jmm3qljZek3oQWn8HhvfNvrzfgbsKzoBQ==",
+      "dev": true,
+      "dependencies": {
+        "@frida/assert": "^3.0.1",
+        "@frida/base64-js": "^2.0.3",
+        "@frida/buffer": "^7.0.4",
+        "@frida/crosspath": "^3.0.0",
+        "@frida/crypto": "^1.0.1",
+        "@frida/diagnostics_channel": "^1.0.0",
+        "@frida/events": "^4.0.4",
+        "@frida/http": "^4.0.2",
+        "@frida/http-parser-js": "^1.0.0",
+        "@frida/https": "^1.0.0",
+        "@frida/ieee754": "^2.0.2",
+        "@frida/net": "^4.0.1",
+        "@frida/os": "^1.0.0",
+        "@frida/path": "^2.0.3",
+        "@frida/process": "^1.2.1",
+        "@frida/punycode": "^3.0.0",
+        "@frida/querystring": "^1.0.0",
+        "@frida/readable-stream": "^4.1.3",
+        "@frida/reserved-words": "^1.0.0",
+        "@frida/stream": "^1.0.2",
+        "@frida/string_decoder": "^2.0.0",
+        "@frida/terser": "^1.0.0",
+        "@frida/timers": "^3.0.0",
+        "@frida/tty": "^1.0.0",
+        "@frida/url": "^1.0.2",
+        "@frida/util": "^1.0.3",
+        "@frida/vm": "^2.0.0",
+        "commander": "^11.1.0",
+        "frida-fs": "^5.2.3",
+        "typed-emitter": "^2.1.0"
+      },
+      "bin": {
+        "frida-compile": "dist/cli.js"
+      }
+    },
+    "node_modules/frida-fs": {
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/frida-fs/-/frida-fs-5.2.5.tgz",
+      "integrity": "sha512-Eyb4OqUlcv1/Eq7Q+B9IZmYZIgIM2YjqDojrjmAGzPSSXBuUKwSkuObQcQ8Dup9JTOMIUcSII9/I8DaTe6LFKw==",
+      "dev": true
+    },
+    "node_modules/http-parser-js": {
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
+      "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
+      "dev": true
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/rxjs": {
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+      "dev": true,
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+      "dev": true,
+      "optional": true
+    },
+    "node_modules/typed-emitter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
+      "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
+      "dev": true,
+      "optionalDependencies": {
+        "rxjs": "*"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+      "dev": true
+    }
+  }
+}

+ 17 - 0
package.json

@@ -0,0 +1,17 @@
+{
+  "name": "frida-agent-example",
+  "version": "1.0.0",
+  "description": "Example Frida agent written in TypeScript",
+  "private": true,
+  "main": "agent/index.ts",
+  "scripts": {
+    "prepare": "npm run build",
+    "build": "frida-compile agent/index.ts -o _agent.js -c",
+    "watch": "frida-compile agent/index.ts -o _agent.js -w"
+  },
+  "devDependencies": {
+    "@types/frida-gum": "^18.5.1",
+    "@types/node": "^18.19.3",
+    "frida-compile": "^16.4.1"
+  }
+}

+ 10 - 0
tsconfig.json

@@ -0,0 +1,10 @@
+{
+  "compilerOptions": {
+    "target": "es2020",
+    "lib": ["es2020"],
+    "allowJs": true,
+    "noEmit": true,
+    "strict": true,
+    "esModuleInterop": true
+  }
+}

+ 325 - 0
yarn.lock

@@ -0,0 +1,325 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@frida/assert@^3.0.1":
+  version "3.0.2"
+  resolved "https://registry.npmmirror.com/@frida/assert/-/assert-3.0.2.tgz#ca7b8a45352270e8b7c775fc276f0635f8004d80"
+  integrity sha512-JXJq5SbXGrM5EkjrZKfRmB29zOoEOix02NC6A5TSJ+C1GE/X051EinJJsuOO2pEOx7KZwpvAHvS0WXW0+levKg==
+
+"@frida/base64-js@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/@frida/base64-js/-/base64-js-2.0.3.tgz#349f8df2eb4e2cc342758c0c9ebcd724fa9e0eb0"
+  integrity sha512-2w0F+1TynOTCZ/v7du9LdHPWwq0lJhazjo2fF9upMyQmA1zHetT14fLuQ1v/6T0qPgyeEGkiSrybstU8EsgeUA==
+
+"@frida/buffer@^7.0.4":
+  version "7.0.4"
+  resolved "https://registry.npmmirror.com/@frida/buffer/-/buffer-7.0.4.tgz#32323e121a1a2cf9f96ef2297daddfe09f558cbe"
+  integrity sha512-RxQ1lZRRiCJj7nhcCiD8xeJx0NsLpGGnjqsmTg7jShGmbnVFMN5W7+J+3gqdPSQhc/IxNBIWc6zRXVp4+qnYHg==
+  dependencies:
+    base64-js "^1.5.1"
+    ieee754 "^1.2.1"
+
+"@frida/crosspath@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@frida/crosspath/-/crosspath-3.0.0.tgz#65e243af84065f55c435925365aa72d447c26182"
+  integrity sha512-bNdO1spIPD2P40XtK89N49oZpJhstdlnkJZcD4yJ17jrdkm9Ctu0sd9MIEX6Z8Tm8ydhVJBAOMEKl9/R27onAQ==
+  dependencies:
+    "@types/node" "^17.0.36"
+
+"@frida/crypto@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/@frida/crypto/-/crypto-1.0.1.tgz#8625f3f4701bf7c27b63fe59b33fe809190962b2"
+  integrity sha512-WXTkVjESvX8TIVXIynJJv9BKSIdQP0Iis04StIXknkDi1ULdMlrypA9p5C4KW1H6GCkNsVnKbybpzsulYCTvag==
+
+"@frida/diagnostics_channel@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/diagnostics_channel/-/diagnostics_channel-1.0.0.tgz#e3c55b9927b34930dcb876fdbfb960d5badfb163"
+  integrity sha512-mYX1jp/5Bpk24tHArJNx65iCk7qSuV8YJkdU0gFNVtJUXxfV8BG5WuPa4mL+ynxsbWWpsg/cwKZbLAepYKTdQQ==
+
+"@frida/events@^4.0.4":
+  version "4.0.4"
+  resolved "https://registry.npmmirror.com/@frida/events/-/events-4.0.4.tgz#fb44467fc5ef89ce57a19b5e779f810168349b94"
+  integrity sha512-qJVQ6VWHf9sjUKuiJzoCAC00frbpcwxeYfvQ+PP9LU/d70j+QvjWgYe98Qa3ekLaBU6r/AvWm8ThKCDUCLWrQQ==
+
+"@frida/http-parser-js@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/http-parser-js/-/http-parser-js-1.0.0.tgz#c512eef6758587198a8d2f5f7202f9cf16b4f76f"
+  integrity sha512-2nMrNXt/OeTlWbqnE8AH4Sfz4I2+BGoN206dzKEyC/g2svtn83Xu+zuv/V3TkwrA27s26Mcy84ZwsXeNlqNxUQ==
+
+"@frida/http@^4.0.2":
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/@frida/http/-/http-4.0.2.tgz#d3c6467714478e67af9b88347c89d268f1f10d4d"
+  integrity sha512-cvkc7ex7GmVXVOWqtjXKBWUUbYEBgpNRKZbEEoMeI8KiIs8zejKwg+N7rx7296Ao+EP3+xcUr4wBVr3xLaUVfQ==
+  dependencies:
+    http-parser-js "^0.5.3"
+
+"@frida/https@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/https/-/https-1.0.0.tgz#a9d06352c830ac4df0bfcb5c0f557b76ca7331a3"
+  integrity sha512-OiqQ6qsALcWOktRLq07oJ0i6sH8eX6MXb/MdZS1qVKDRf6wchH4Pjn6fiLB+pt/OlYbggk+DOfpHwSdjTwuHMQ==
+
+"@frida/ieee754@^2.0.2":
+  version "2.0.2"
+  resolved "https://registry.npmmirror.com/@frida/ieee754/-/ieee754-2.0.2.tgz#47dc65d51a94fa7f6fda2b6d67bc2e8d5d4ebe5f"
+  integrity sha512-wlcUebnne4ENN7GDr5pTH598ZDLMVOsh0FjenxeVOe6u7ewZkz9gGRnLnZKJAm9kl5G6XhdxhI0cSXVQK/rQUw==
+
+"@frida/net@^4.0.1":
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/@frida/net/-/net-4.0.2.tgz#4886cae14db0d71bf67253015c3321eed0662af4"
+  integrity sha512-qQRe7hQ+ZfCcG/SE3P1TRqQ9bmuK/T7wPCYaT4z56rBPWAxsaQbQHpX4fR6OrFaSDr7X0xJLsTbdIp9hGhhLZg==
+
+"@frida/os@^1.0.0":
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/@frida/os/-/os-1.0.2.tgz#64419b11ea09e50d83d3304f1a6a804f92827fed"
+  integrity sha512-3ISAiGNiyIya3QN2EHBCz1wqP0enTdSxP99wUeroeh8+AQRmgoOr/5TRnrVry8pe378anay3fmV/tdUMMSkehQ==
+
+"@frida/path@^2.0.3":
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/@frida/path/-/path-2.0.3.tgz#a998d99aec56a3151831c16e9224df77a8fb8710"
+  integrity sha512-2RQy36QatoC846fzBhBhV8sXMsSOBGoYvwTHeaE1zUdz7F4RNScP4QEekTTooBYWYX/XjiF36KQpYAzc9OYFtg==
+
+"@frida/process@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@frida/process/-/process-1.2.1.tgz#3a587c0f75b59bf15fa32162f551bc5f4523ddad"
+  integrity sha512-nvCu22DstFW2ttGFtOKekHM7vnjbZm+XgtvavOt427GNT6uV7k0JYK9tnMbcLMRWv57DG6udAmuJlWs8Paq1ag==
+
+"@frida/punycode@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@frida/punycode/-/punycode-3.0.0.tgz#b841f24b57f4c08be8f6a7a0eb143259909a2a89"
+  integrity sha512-XVSDY2KamDs1D5/fTVgHcOSNxdU4kTboxzqJMBbTjcQC7XScIT9c0EfbwKCq7Kci6gWQdsHSCr7lU+9Oc4KAdg==
+
+"@frida/querystring@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/querystring/-/querystring-1.0.0.tgz#13ac4b6b2aabc996a75c44491c2b5db292af16de"
+  integrity sha512-15m1fOZPmoO/vWlgPJrG/J9/BJDz6a2/JpVGpS8ynNzo+fBhTznaStX5nHxUs24mVTqh/OqLo0EiYJM5WWHXxg==
+
+"@frida/readable-stream@^4.1.3":
+  version "4.1.3"
+  resolved "https://registry.npmmirror.com/@frida/readable-stream/-/readable-stream-4.1.3.tgz#9babc8cbca3f7e9e6feb2147361eea3c8bd5cf66"
+  integrity sha512-ntGUFmi+CryRGRJIK13a/VST2Ad19uivbln8Xd92vKPAARq+6vMIASDyZIqyl5BLRccfiyCHdYgrgQ6RI5rUig==
+
+"@frida/reserved-words@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/reserved-words/-/reserved-words-1.0.0.tgz#218ea9f816261e92323c8983e7a22c80c39b5c63"
+  integrity sha512-2yG/XxJlsGlk/mm6eZTb4OAaQEhkTI2qaFfZFtAsrA/XuCpuMWkS4y/guyBlsRu4hAuhK2HPmNM8+OLLK1zM9Q==
+
+"@frida/stream@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/@frida/stream/-/stream-1.0.2.tgz#41416d3bbb88d4c8b29351c4ac138b5a5b1e7fd8"
+  integrity sha512-4OuaC1ztmEKgTq3WeBhsy8Oq+AwW9n9cYnvLklcC9jwD93AEwgbWpecLlxJCVuALvTMdhKPg0nQVfyGYP/i9Bw==
+  dependencies:
+    "@frida/readable-stream" "^4.1.3"
+
+"@frida/string_decoder@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@frida/string_decoder/-/string_decoder-2.0.0.tgz#1c648b5c16c8d66f41483c8ada448624edff74dc"
+  integrity sha512-in371tYZMHQiW9HF5MS3JDw6Ao6tyBoq34UWy2rzOswYyMG1rpizh85ofi/yVkxDiaqybEZefxzkVittpPGT6g==
+
+"@frida/terser@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/terser/-/terser-1.0.0.tgz#5b56697e678fdb71f010ee272d24e8c9ceb72fa2"
+  integrity sha512-59h9WuNzD1Rx/zwoWqQ/FW/4Y/Q3R91Eng2hEwdHapqiTDvtKbZ08F6CynCR7ZVinrh4tLYsF46AtVPTz1ys9g==
+  dependencies:
+    "@jridgewell/source-map" "^0.3.2"
+    acorn "^8.5.0"
+    commander "^2.20.0"
+    source-map-support "~0.5.20"
+
+"@frida/timers@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/@frida/timers/-/timers-3.0.0.tgz#50736e93dc24930f0a105c2047ad166809594397"
+  integrity sha512-3b+0igv10aT8TMxefrTAd06rActqbxJLY2Xkkq9vYcPBffB/yHszl0NYIp/5ko8WC3ecDYPU6bQiY6fjs72zTA==
+
+"@frida/tty@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.npmmirror.com/@frida/tty/-/tty-1.0.0.tgz#1f5f5e17471bf41e28b20fbeca49ab5e13693cb6"
+  integrity sha512-p/kjLnKYxEAB1MdYP8+5rKv9CsHzyA+0jg9BcGETzjQVKHHcroHDULRxDYUh+DC7qs6cpX8QdDQh9E+a6ydgsQ==
+
+"@frida/url@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.npmmirror.com/@frida/url/-/url-1.0.2.tgz#1c5d802302b496bb5c6b8f8b40fbffed5ffacaa0"
+  integrity sha512-ZKunbKJHMr8w2Eb/5K1avy0MzK1B998S17wYXNv3RmzBGxMm8S5T0F3qEpRxkU7/72P8m4izyQU87fWl+FjQsQ==
+  dependencies:
+    "@frida/punycode" "^3.0.0"
+    "@frida/querystring" "^1.0.0"
+
+"@frida/util@^1.0.3":
+  version "1.0.3"
+  resolved "https://registry.npmmirror.com/@frida/util/-/util-1.0.3.tgz#b9273baaadead1a24d3619dd719fa109c210f7f0"
+  integrity sha512-htcG3uDiRXv89ERVNNYhfase39kJ2X75ZARfrYcYEtJLFEsSk0nemM1YnEIR4CjrHvdvkWHrwgKkS+acOyoNEg==
+
+"@frida/vm@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.npmmirror.com/@frida/vm/-/vm-2.0.0.tgz#c98012838f34b0bb7ca0509f03a644a2ada230ff"
+  integrity sha512-7fsjLWscZT5odNIBtg6qbLNI+vAk1xmii6H5W2kaYkMYt0vRohQEcDSUWacA+eaWlu5SvMjZI82Yibj/3G9pJw==
+
+"@jridgewell/gen-mapping@^0.3.5":
+  version "0.3.5"
+  resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+  integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+  dependencies:
+    "@jridgewell/set-array" "^1.2.1"
+    "@jridgewell/sourcemap-codec" "^1.4.10"
+    "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+  integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+  integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/source-map@^0.3.2":
+  version "0.3.6"
+  resolved "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
+  integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
+  dependencies:
+    "@jridgewell/gen-mapping" "^0.3.5"
+    "@jridgewell/trace-mapping" "^0.3.25"
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+  version "1.4.15"
+  resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
+  integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+  version "0.3.25"
+  resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+  integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+  dependencies:
+    "@jridgewell/resolve-uri" "^3.1.0"
+    "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@types/frida-gum@^18.5.1":
+  version "18.7.0"
+  resolved "https://registry.npmmirror.com/@types/frida-gum/-/frida-gum-18.7.0.tgz#4a530c9946a7cb53300d38a3aba878434f3b3e62"
+  integrity sha512-HhBomXE23fLDAWXEKi3BjJLrlH9wAv9IEQNfO/PaYHQNNbh0Bi06gx6JbXTspVpbqlbVqkWAuU7n6HaS9B6yXA==
+
+"@types/node@^17.0.36":
+  version "17.0.45"
+  resolved "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
+  integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+
+"@types/node@^18.19.3":
+  version "18.19.28"
+  resolved "https://registry.npmmirror.com/@types/node/-/node-18.19.28.tgz#c64a2c992c8ebbf61100a4570e4eebc1934ae030"
+  integrity sha512-J5cOGD9n4x3YGgVuaND6khm5x07MMdAKkRyXnjVR6KFhLMNh2yONGiP7Z+4+tBOt5mK+GvDTiacTOVGGpqiecw==
+  dependencies:
+    undici-types "~5.26.4"
+
+acorn@^8.5.0:
+  version "8.11.3"
+  resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+  integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+base64-js@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+commander@^11.1.0:
+  version "11.1.0"
+  resolved "https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
+  integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
+
+commander@^2.20.0:
+  version "2.20.3"
+  resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
+  integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+
+frida-compile@^16.4.1:
+  version "16.4.1"
+  resolved "https://registry.npmmirror.com/frida-compile/-/frida-compile-16.4.1.tgz#5a1d7cf946a28d375aa2c2eb4d507f6c8520e765"
+  integrity sha512-xI9HNtUFpHxuKBGXaL6XJAYH1zWTvNJDrHRnz1hp0oS24iPHt6c01Jmm3qljZek3oQWn8HhvfNvrzfgbsKzoBQ==
+  dependencies:
+    "@frida/assert" "^3.0.1"
+    "@frida/base64-js" "^2.0.3"
+    "@frida/buffer" "^7.0.4"
+    "@frida/crosspath" "^3.0.0"
+    "@frida/crypto" "^1.0.1"
+    "@frida/diagnostics_channel" "^1.0.0"
+    "@frida/events" "^4.0.4"
+    "@frida/http" "^4.0.2"
+    "@frida/http-parser-js" "^1.0.0"
+    "@frida/https" "^1.0.0"
+    "@frida/ieee754" "^2.0.2"
+    "@frida/net" "^4.0.1"
+    "@frida/os" "^1.0.0"
+    "@frida/path" "^2.0.3"
+    "@frida/process" "^1.2.1"
+    "@frida/punycode" "^3.0.0"
+    "@frida/querystring" "^1.0.0"
+    "@frida/readable-stream" "^4.1.3"
+    "@frida/reserved-words" "^1.0.0"
+    "@frida/stream" "^1.0.2"
+    "@frida/string_decoder" "^2.0.0"
+    "@frida/terser" "^1.0.0"
+    "@frida/timers" "^3.0.0"
+    "@frida/tty" "^1.0.0"
+    "@frida/url" "^1.0.2"
+    "@frida/util" "^1.0.3"
+    "@frida/vm" "^2.0.0"
+    commander "^11.1.0"
+    frida-fs "^5.2.3"
+    typed-emitter "^2.1.0"
+
+frida-fs@^5.2.3:
+  version "5.2.5"
+  resolved "https://registry.npmmirror.com/frida-fs/-/frida-fs-5.2.5.tgz#c2623d61f00fed534e43281fa859334990e94300"
+  integrity sha512-Eyb4OqUlcv1/Eq7Q+B9IZmYZIgIM2YjqDojrjmAGzPSSXBuUKwSkuObQcQ8Dup9JTOMIUcSII9/I8DaTe6LFKw==
+
+http-parser-js@^0.5.3:
+  version "0.5.8"
+  resolved "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3"
+  integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==
+
+ieee754@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+rxjs@^7.5.2:
+  version "7.8.1"
+  resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543"
+  integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==
+  dependencies:
+    tslib "^2.1.0"
+
+source-map-support@~0.5.20:
+  version "0.5.21"
+  resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0:
+  version "0.6.1"
+  resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+tslib@^2.1.0:
+  version "2.6.2"
+  resolved "https://registry.npmmirror.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
+  integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
+
+typed-emitter@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.npmmirror.com/typed-emitter/-/typed-emitter-2.1.0.tgz#ca78e3d8ef1476f228f548d62e04e3d4d3fd77fb"
+  integrity sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==
+  optionalDependencies:
+    rxjs "^7.5.2"
+
+undici-types@~5.26.4:
+  version "5.26.5"
+  resolved "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+  integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==