diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml
index 4e1ef42..ac0b06a 100644
--- a/.github/workflows/python-publish.yml
+++ b/.github/workflows/python-publish.yml
@@ -22,10 +22,11 @@ jobs:
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
+ sudo apt-get update && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y make
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
- python setup.py sdist bdist_wheel
- twine upload dist/*
+ make
+ twine upload dist/*
\ No newline at end of file
diff --git a/README.md b/README.md
index fc85c0d..b10f107 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,8 @@
# FRIDA-DEXDump
-![screenshot](screenshot.png)
+`frida-dexdump` is a frida tool to find and dump dex in memory to support security engineers in analyzing malware.
-## Make JetBrains Great Again
+## Make Jetbrains Great Again
@@ -10,64 +10,53 @@
## Features
-1. support fuzzy search broken header dex.
-2. fix struct data of dex-header.
-3. compatible with all android version(frida supported).
-4. support loading as objection plugin ~
-5. pypi package has been released ~
-
-## Requires
-- [frida](https://www.github.com/frida/frida): `pip install frida`
-- [optional] [click](https://pypi.org/project/click/) `pip install click`
+1. Support fuzzy search broken header dex(deep search mode).
+2. Compatible with all android version(frida supported).
+3. One click installation, without modifying the system, easy to deploy and use.
## Installation
-### From pypi
+```
+pip3 install frida-dexdump
+```
+
+## Usage
- pip3 install frida-dexdump
- frida-dexdump -h
+CLI arguments base on [frida-tools](https://github.com/frida/frida-tools), you can quickly dump the foreground application like this:
-### From source
+```
+frida-dexdump -FU
+```
- git clone https://github.com/hluwa/FRIDA-DEXDump
- cd FRIDA-DEXDump/frida-dexdump
- python3 main.py -h
+Or specify and spawn app like this:
-## Usage
+```
+frida-dexdump -U -f com.app.pkgname
+```
-- Run `frida-dexdump` or `python3 main.py` to attach current frontmost application and dump dexs.
+Additionally, you can see in `-h` that the new options provided by frida-dexdump are:
-- Or, use command arguments:
- ```
- -n: [Optional] Specify target process name, when spawn mode, it requires an application package name. If not specified, use frontmost application.
- -p: [Optional] Specify pid when multiprocess. If not specified, dump all.
- -f: [Optional] Use spawn mode, default is disable.
- -s: [Optional] When spawn mode, start dump work after sleep few seconds. default is 10s.
- -d: [Optional] Enable deep search maybe detected more dex, but speed will be slower.
- -h: show help.
- ```
-
-- Or, loading as objection plugin
+```
+-o OUTPUT, --output OUTPUT Output folder path, default is './/'.
+-d, --deep-search Enable deep search mode.
+--sleep SLEEP Waiting times for start, spawn mode default is 5s.
+```
- 1. clone this repo and move `frida_dexdump` into your plugins folder, eg:
+When using, I suggest using the `-d, --deep-search` option, which may take more time, but the results will be more complete.
- ```
- git clone https://github.com/hluwa/FRIDA-DEXDump ~/Downloads/FRIDA-DEXDump;
- mv ~/Downloads/FRIDA-DEXDump/frida_dexdump ~/.objection/plugins/dexdump
- ```
+![screenshot](screenshot.png)
- 2. start objection with `-P` or `--plugin-folder` your plugins folder, eg:
+## Build and develop
- ```
- objection -g com.app.name explore -P ~/.objection/plugins
- ```
+```
+make
+```
- 3. run command:
+### Requires
- 1. ` plugin dexdump search ` to search and print all dex
- 2. ` plugin dexdump dump ` to dump all found dex.
+See [requirements.txt](https://github.com/hluwa/FRIDA-DEXDump/blob/master/requirements.txt)
## Internals
-[《深入 FRIDA-DEXDump 中的矛与盾》](https://mp.weixin.qq.com/s/n2XHGhshTmvt2FhxyFfoMA)
+[《深入 FRIDA-DEXDump 中的矛与盾》](https://mp.weixin.qq.com/s/n2XHGhshTmvt2FhxyFfoMA)
\ No newline at end of file
diff --git a/agent/.gitignore b/agent/.gitignore
new file mode 100644
index 0000000..07e6e47
--- /dev/null
+++ b/agent/.gitignore
@@ -0,0 +1 @@
+/node_modules
diff --git a/agent/package-lock.json b/agent/package-lock.json
new file mode 100644
index 0000000..b3900f8
--- /dev/null
+++ b/agent/package-lock.json
@@ -0,0 +1,3335 @@
+{
+ "name": "frida-dexdump-agent",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz",
+ "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.8.3"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.12.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz",
+ "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw=="
+ },
+ "@babel/core": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.8.7.tgz?cache=0&sync_timestamp=1583373432119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.8.7.tgz",
+ "integrity": "sha1-tpAX0iHM3rIDFFrp2iadcs8QLzs=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.7",
+ "@babel/helpers": "^7.8.4",
+ "@babel/parser": "^7.8.7",
+ "@babel/template": "^7.8.6",
+ "@babel/traverse": "^7.8.6",
+ "@babel/types": "^7.8.7",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.8.tgz",
+ "integrity": "sha1-zc1YyqtzCDTO6e6ttynoM7Yl2j4=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.7",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.8.3.tgz",
+ "integrity": "sha1-YLwLxlf2Ogkk/5pLSgskoTz03u4=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
+ "integrity": "sha1-yECXpCegYaxWocMOv1S3si0kFQM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.8.7.tgz?cache=0&sync_timestamp=1583373419235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-call-delegate%2Fdownload%2F%40babel%2Fhelper-call-delegate-7.8.7.tgz",
+ "integrity": "sha1-KKJ5wubGIqYjPaVIEn+YB1EyTKs=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.7"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.8.7.tgz?cache=0&sync_timestamp=1583373434753&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-compilation-targets%2Fdownload%2F%40babel%2Fhelper-compilation-targets-7.8.7.tgz",
+ "integrity": "sha1-2sHuoVnA5L1G4wm1obBKZrU8Hd4=",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.8.6",
+ "browserslist": "^4.9.1",
+ "invariant": "^2.2.4",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.8.tgz",
+ "integrity": "sha1-XYQYC1iPVgt4ZO+u6okkPlgxIIc=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-regex": "^7.8.3",
+ "regexpu-core": "^4.7.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.8.3.tgz",
+ "integrity": "sha1-oGVcrVRRw3YLcm66h18c2PqgLBU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/types": "^7.8.3",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.8.3.tgz",
+ "integrity": "sha1-pyjcW06J4w/C38fQT6KKkwZT+YI=",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz",
+ "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz",
+ "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.8.3.tgz",
+ "integrity": "sha1-Hb6ba1XXjJtBg/yM3G4wzrg7cTQ=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz",
+ "integrity": "sha1-ZZtxBJjqbB2ZB+DHPyBu7n2twkw=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.8.3.tgz",
+ "integrity": "sha1-f+OVibOcAWMxtrjD9EHo8LFBlJg=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.8.6.tgz",
+ "integrity": "sha1-ahO17srcNWkgRwc6ZOQpd7l2VKQ=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.6",
+ "@babel/helper-simple-access": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/template": "^7.8.6",
+ "@babel/types": "^7.8.6",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.8.3.tgz",
+ "integrity": "sha1-ftBxgT0Jx1KY708giVYAa2ER7Lk=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz",
+ "integrity": "sha1-nqKTvhm6vA9S/4yoizTDYRsghnA=",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz",
+ "integrity": "sha1-E5dyYH1RuT8j7/5yEFsxnSpMaWU=",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.8.3.tgz",
+ "integrity": "sha1-JzxgDYub9QBhQsHjWIfVVcEu3YY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-wrap-function": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.8.6.tgz",
+ "integrity": "sha1-Wtp0T9WtcyA78dZ0WaJ9y6Z+/8g=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.8.3",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/traverse": "^7.8.6",
+ "@babel/types": "^7.8.6"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.8.3.tgz",
+ "integrity": "sha1-f4EJkotNq0ZUB2mGr1dSMd62Oa4=",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz",
+ "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.8.3.tgz",
+ "integrity": "sha1-nb2yu1XvFKqgH+jJm2Kb1TUthhA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.3",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.8.4.tgz?cache=0&sync_timestamp=1580388904320&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelpers%2Fdownload%2F%40babel%2Fhelpers-7.8.4.tgz",
+ "integrity": "sha1-dU6z7nJ8Fl4KJA1sIH3nxFXzb3M=",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.8.3",
+ "@babel/traverse": "^7.8.4",
+ "@babel/types": "^7.8.3"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz",
+ "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.8.tgz",
+ "integrity": "sha1-TDt8422zfgYpvh8NUKVx0vhvbNQ=",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.8.3.tgz",
+ "integrity": "sha1-utMpxnCzgliXIbJ1QMfSiGAcbm8=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.8.3.tgz",
+ "integrity": "sha1-OMT+VVdEgm6X4q6TCw+0zAfmYFQ=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz",
+ "integrity": "sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha1-5FciU/3u1lzd7s/as/kor+sv1dI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha1-61rjZhGN3KZ77Vg7U9dVTK2ZUbs=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha1-ne6WqxZQ7tiGRq6XNMoWesSpxck=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.8.3.tgz",
+ "integrity": "sha1-rhCzIUyyX3rbHzvIe6QsoQt+JUM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.8.tgz",
+ "integrity": "sha1-7jqV6QzcBP6M2S7DJ5+gF9aKDR0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.8",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz?cache=0&sync_timestamp=1578951050490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-json-strings%2Fdownload%2F%40babel%2Fplugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578951050894&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.8.3.tgz",
+ "integrity": "sha1-Os3s5pXmsTqvV/wpHRqACVDHE5E=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.8.3.tgz",
+ "integrity": "sha1-gndsLtDNnhpJlW2uuJYCTJRzuLY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.8.3.tgz",
+ "integrity": "sha1-Qwj60NlAnXHq+5sabuNfnWS2QIY=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-remap-async-to-generator": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.8.3.tgz",
+ "integrity": "sha1-Q37sW3mbWFIHIISzrl72boNJ6KM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.8.3.tgz",
+ "integrity": "sha1-l9Ndq2aFekN8FmNYuR0JBQyGjzo=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.8.6.tgz",
+ "integrity": "sha1-d1NER6R3y+WZWuSu4+OfvICQxG0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-define-map": "^7.8.3",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-optimise-call-expression": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.6",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.8.3.tgz",
+ "integrity": "sha1-ltDSi3985OtbEguy4OlDNDyG+Bs=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.8.8.tgz",
+ "integrity": "sha1-+tsryOkMyvVljeb41NIv9icqL0s=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.8.3.tgz",
+ "integrity": "sha1-w8bsXuYSXGmTxcvKINyGIanqem4=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.8.3.tgz",
+ "integrity": "sha1-jRLfMJqlN/JyiZxWXqF2jihuIfE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.8.3.tgz",
+ "integrity": "sha1-WBptf1aXDga/UVYM1k9elHtw17c=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.8.6.tgz?cache=0&sync_timestamp=1582806103923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.8.6.tgz",
+ "integrity": "sha1-oFG9G0AsYa+Xon/1G0aDIcfCoIU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.8.3.tgz",
+ "integrity": "sha1-J5NzyycyKqrWfCaD53bfxHGW7Ys=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.8.3.tgz",
+ "integrity": "sha1-rvI5gj2RmU7Hto5VGTUl1229XcE=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.8.3.tgz",
+ "integrity": "sha1-lj/tS2IKx8v2Apx1VCQCn6OkBBA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.8.3.tgz",
+ "integrity": "sha1-ZWBtRGFrUCJedvVXjzPFaKC4dqU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.8.3.tgz",
+ "integrity": "sha1-3yUXBuwzG9BYo0vdcmE5FfgpKKU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-simple-access": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.8.3.tgz",
+ "integrity": "sha1-2LvyIsHb42YfRA8vAMFum7fQ1CA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.8.3",
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.8.3.tgz",
+ "integrity": "sha1-WS1XjOBsUvW5iwL5E9ZT/+lyZho=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
+ "integrity": "sha1-oqcr/6ICrA4tBQav0JOcXsvEjGw=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.8.3.tgz",
+ "integrity": "sha1-YMwq5m2FyVq1QOs0urtkNNTHDEM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz",
+ "integrity": "sha1-67ah56hv+paFi9asAQLWWUQmFyU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-replace-supers": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.8.8",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.8.8.tgz",
+ "integrity": "sha1-A4HeRmyF1UBFZSQ2YMRJZFlSXa8=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.8.7",
+ "@babel/helper-get-function-arity": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.8.3.tgz",
+ "integrity": "sha1-MxlDANhTnB7SjGKtUIe6OAe5gmM=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.8.7.tgz?cache=0&sync_timestamp=1583373435237&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-regenerator%2Fdownload%2F%40babel%2Fplugin-transform-regenerator-7.8.7.tgz",
+ "integrity": "sha1-Xkag3KK+4a2ChesFJ+arycN2cvg=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.2"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.8.3.tgz",
+ "integrity": "sha1-mgY1rE5mXSmxYoN908xQdF398fU=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.8.3.tgz",
+ "integrity": "sha1-wBU7wKU3XrwfFZHLfuoiOt6p8Wk=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "resolve": "^1.8.1",
+ "semver": "^5.5.1"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.8.3.tgz",
+ "integrity": "sha1-KFRSFuAjqDLU06EYXtSSvP6sCMg=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.8.3.tgz",
+ "integrity": "sha1-nI/+gXD9+4ixFOy5ILgvtulf5eg=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.8.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-sticky-regex%2Fdownload%2F%40babel%2Fplugin-transform-sticky-regex-7.8.3.tgz",
+ "integrity": "sha1-vnoSkPgdrnZ0dUUhmeH3bWF1sQA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-regex": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.8.3.tgz",
+ "integrity": "sha1-e/pHMrRV6mpDEwrcC6dn7A5AKoA=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.8.4",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.8.4.tgz?cache=0&sync_timestamp=1580388896170&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.8.4.tgz",
+ "integrity": "sha1-7eQGIxXOCq+KZXqSCFjxovNfxBI=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.8.3.tgz",
+ "integrity": "sha1-DO8247pz5cVyc+/7GC9GuRoeyq0=",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.8.7.tgz?cache=0&sync_timestamp=1583373434080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.8.7.tgz",
+ "integrity": "sha1-H8fYnH910tcMK2do3mwuBJs8uds=",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.8.6",
+ "@babel/helper-compilation-targets": "^7.8.7",
+ "@babel/helper-module-imports": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
+ "@babel/plugin-proposal-dynamic-import": "^7.8.3",
+ "@babel/plugin-proposal-json-strings": "^7.8.3",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-proposal-object-rest-spread": "^7.8.3",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-proposal-optional-chaining": "^7.8.3",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
+ "@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+ "@babel/plugin-syntax-json-strings": "^7.8.0",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3",
+ "@babel/plugin-transform-arrow-functions": "^7.8.3",
+ "@babel/plugin-transform-async-to-generator": "^7.8.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
+ "@babel/plugin-transform-block-scoping": "^7.8.3",
+ "@babel/plugin-transform-classes": "^7.8.6",
+ "@babel/plugin-transform-computed-properties": "^7.8.3",
+ "@babel/plugin-transform-destructuring": "^7.8.3",
+ "@babel/plugin-transform-dotall-regex": "^7.8.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.8.3",
+ "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
+ "@babel/plugin-transform-for-of": "^7.8.6",
+ "@babel/plugin-transform-function-name": "^7.8.3",
+ "@babel/plugin-transform-literals": "^7.8.3",
+ "@babel/plugin-transform-member-expression-literals": "^7.8.3",
+ "@babel/plugin-transform-modules-amd": "^7.8.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.8.3",
+ "@babel/plugin-transform-modules-systemjs": "^7.8.3",
+ "@babel/plugin-transform-modules-umd": "^7.8.3",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
+ "@babel/plugin-transform-new-target": "^7.8.3",
+ "@babel/plugin-transform-object-super": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.8.7",
+ "@babel/plugin-transform-property-literals": "^7.8.3",
+ "@babel/plugin-transform-regenerator": "^7.8.7",
+ "@babel/plugin-transform-reserved-words": "^7.8.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.8.3",
+ "@babel/plugin-transform-spread": "^7.8.3",
+ "@babel/plugin-transform-sticky-regex": "^7.8.3",
+ "@babel/plugin-transform-template-literals": "^7.8.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.8.4",
+ "@babel/plugin-transform-unicode-regex": "^7.8.3",
+ "@babel/types": "^7.8.7",
+ "browserslist": "^4.8.5",
+ "core-js-compat": "^3.6.2",
+ "invariant": "^2.2.2",
+ "levenary": "^1.1.1",
+ "semver": "^5.5.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.8.7.tgz",
+ "integrity": "sha1-j+/OmALbVIgbpZ+Quyhxm0mWMk0=",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/runtime-corejs2": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.8.7.tgz?cache=0&sync_timestamp=1583374005684&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs2%2Fdownload%2F%40babel%2Fruntime-corejs2-7.8.7.tgz",
+ "integrity": "sha1-XGr8sz7xL6H422uRX/a17K9q+xE=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.6.5",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz",
+ "integrity": "sha1-hrIq8V+CjfsIZHT5ZNzD45xDzis=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/parser": "^7.8.6",
+ "@babel/types": "^7.8.6"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.8.6",
+ "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz",
+ "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.8.3",
+ "@babel/generator": "^7.8.6",
+ "@babel/helper-function-name": "^7.8.3",
+ "@babel/helper-split-export-declaration": "^7.8.3",
+ "@babel/parser": "^7.8.6",
+ "@babel/types": "^7.8.6",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.7",
+ "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373407005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz",
+ "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@frida/uglifyify": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npm.taobao.org/@frida/uglifyify/download/@frida/uglifyify-6.0.1.tgz",
+ "integrity": "sha1-wSDUMbFXSr/ox856mDc2gtL+sv8=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "^1.6.0",
+ "minimatch": "^3.0.4",
+ "terser": "^3.17.0",
+ "through": "^2.3.8"
+ }
+ },
+ "@types/frida-gum": {
+ "version": "14.5.0",
+ "resolved": "https://registry.npm.taobao.org/@types/frida-gum/download/@types/frida-gum-14.5.0.tgz",
+ "integrity": "sha1-6aKT8Ds5eJeY65FgbxGY2pWp24k=",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "12.12.34",
+ "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.34.tgz",
+ "integrity": "sha1-Cl1q5dImEvDPXxAyDh/F0qdF3Lg=",
+ "dev": true
+ },
+ "JSONStream": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npm.taobao.org/JSONStream/download/JSONStream-1.3.5.tgz",
+ "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "acorn": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.1.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.1.1.tgz",
+ "integrity": "sha1-41Zo3gtALzWd5RXFSCoaufiaab8=",
+ "dev": true
+ },
+ "acorn-node": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npm.taobao.org/acorn-node/download/acorn-node-1.8.2.tgz",
+ "integrity": "sha1-EUyV1kU55T3t4j3oudlt98euKvg=",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.0.0",
+ "acorn-walk": "^7.0.0",
+ "xtend": "^4.0.2"
+ }
+ },
+ "acorn-walk": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-walk%2Fdownload%2Facorn-walk-7.1.1.tgz",
+ "integrity": "sha1-NF8N/61cc15zc9L+yaECPmpEuD4=",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz",
+ "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz",
+ "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "asn1.js": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz",
+ "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npm.taobao.org/assert/download/assert-1.5.0.tgz",
+ "integrity": "sha1-VcEJqvbgrv2z3EtxJAxwv1dLGOs=",
+ "dev": true,
+ "requires": {
+ "object-assign": "^4.1.1",
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1582562111943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.0.tgz",
+ "integrity": "sha1-8A9Qe9qjw+P/bn5emNkKesq5b38=",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-import-to-require": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/babel-plugin-import-to-require/download/babel-plugin-import-to-require-1.0.0.tgz",
+ "integrity": "sha1-Qyue5/6dd94D6EkkfHim5R+xgAk=",
+ "dev": true,
+ "requires": {
+ "babel-template": "^6.26.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052392667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
+ "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=",
+ "dev": true
+ }
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
+ "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz",
+ "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ }
+ }
+ },
+ "babelify": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npm.taobao.org/babelify/download/babelify-10.0.0.tgz",
+ "integrity": "sha1-/nOxoiWD8GaA2NBy4loeDR0df7U=",
+ "dev": true
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz",
+ "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz",
+ "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=",
+ "dev": true
+ },
+ "bignumber.js": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npm.taobao.org/bignumber.js/download/bignumber.js-9.0.0.tgz",
+ "integrity": "sha1-gFiA+Eoym16sbny2+CdLbYK98HU=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.0.0.tgz",
+ "integrity": "sha1-I8DfFPaogHf1+YbA0WfsA8PVU3w=",
+ "dev": true
+ },
+ "bn.js": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz",
+ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
+ "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+ "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npm.taobao.org/browser-pack/download/browser-pack-6.1.0.tgz",
+ "integrity": "sha1-w0uhDQuc4WK1ryJ8cTHJLC7NV3Q=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "browser-resolve": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz",
+ "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1580944411686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npm.taobao.org/browserify/download/browserify-16.5.0.tgz",
+ "integrity": "sha1-ocK8BDG+wR/SkVGUFYLj9kXt6IE=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^3.0.0",
+ "string_decoder": "^1.1.1",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
+ "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/browserify-cipher/download/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/browserify-des/download/browserify-des-1.0.2.tgz",
+ "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "browserify-rsa": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npm.taobao.org/browserify-zlib/download/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "browserslist": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.9.1.tgz?cache=0&sync_timestamp=1582936905451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.9.1.tgz",
+ "integrity": "sha1-Af+5yjGhrvdngSj8aiJTMWqnKHw=",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001030",
+ "electron-to-chromium": "^1.3.363",
+ "node-releases": "^1.1.50"
+ }
+ },
+ "buffer": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-5.5.0.tgz",
+ "integrity": "sha1-nDyqPWI8M90cfvWEuJuIv5ybwc4=",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
+ "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-status-codes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "cached-path-relative": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npm.taobao.org/cached-path-relative/download/cached-path-relative-1.0.2.tgz",
+ "integrity": "sha1-oT30GW0md2IgzDNW6xR6Utuixts=",
+ "dev": true
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001035",
+ "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001035.tgz",
+ "integrity": "sha1-K7U7iqRxay7QjgiNTcgWpf4Imh4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz",
+ "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.3.1.tgz",
+ "integrity": "sha1-yE5bPRjZpNd1WP70ZrG/FrvrNFA=",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.3.0"
+ }
+ },
+ "cipher-base": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/cipher-base/download/cipher-base-1.0.4.tgz",
+ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
+ "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ }
+ }
+ },
+ "commander": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npm.taobao.org/commander/download/commander-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-3.0.2.tgz",
+ "integrity": "sha1-aDfD+2d62ZM9HPukLdFNURfWs54=",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-2.0.0.tgz",
+ "integrity": "sha1-QUz1r3kKSMYKub5FJ9VtXkETPLE=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
+ "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
+ "dev": true
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npm.taobao.org/convert-source-map/download/convert-source-map-1.7.0.tgz?cache=0&sync_timestamp=1573003917976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.7.0.tgz",
+ "integrity": "sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&sync_timestamp=1578957241717&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz",
+ "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.6.4.tgz",
+ "integrity": "sha1-k4R2Vp67bNqA0zm88Zn65PFv/xc=",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.8.3",
+ "semver": "7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz",
+ "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz",
+ "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/create-hash/download/create-hash-1.2.0.tgz",
+ "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ }
+ },
+ "create-hmac": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/create-hmac/download/create-hmac-1.1.7.tgz",
+ "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "crypto-browserify": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npm.taobao.org/crypto-browserify/download/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "dash-ast": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/dash-ast/download/dash-ast-1.0.0.tgz",
+ "integrity": "sha1-EgKbpfsviqbwqGF5WyPBtLbCfTc=",
+ "dev": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.1.1.tgz",
+ "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/define-properties/download/define-properties-1.1.3.tgz",
+ "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "deps-sort": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/deps-sort/download/deps-sort-2.0.1.tgz",
+ "integrity": "sha1-nf3IdtK87DOGtoKaxSFizan6II0=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum-object": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "des.js": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/des.js/download/des.js-1.0.1.tgz",
+ "integrity": "sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "detective": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/detective/download/detective-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdetective%2Fdownload%2Fdetective-5.2.0.tgz",
+ "integrity": "sha1-/rKnfoW5BOzepFmtiXzJCpm9Kns=",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.6.1",
+ "defined": "^1.0.0",
+ "minimist": "^1.1.1"
+ }
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1575879298649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz",
+ "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.376",
+ "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.376.tgz",
+ "integrity": "sha1-fLe1IFVkoGyPjs++gyy9R6EiS7E=",
+ "dev": true
+ },
+ "elliptic": {
+ "version": "6.5.4",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
+ "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.11.9",
+ "brorand": "^1.1.0",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.1",
+ "inherits": "^2.0.4",
+ "minimalistic-assert": "^1.0.1",
+ "minimalistic-crypto-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
+ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "dev": true
+ }
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
+ "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esmify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/esmify/download/esmify-2.1.1.tgz",
+ "integrity": "sha1-u3iKizR3OdADyHPZ7d+XJLvwMrM=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.2.2",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+ "babel-plugin-import-to-require": "^1.0.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "^1.6.2",
+ "duplexer2": "^0.1.4",
+ "through2": "^2.0.5"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz?cache=0&sync_timestamp=1564535520945&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesutils%2Fdownload%2Fesutils-2.0.3.tgz",
+ "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+ "dev": true
+ },
+ "events": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/events/download/events-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevents%2Fdownload%2Fevents-2.1.0.tgz",
+ "integrity": "sha1-KpoeGOYQbg6BKqnr1KgZs8KcC6U=",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "fast-safe-stringify": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npm.taobao.org/fast-safe-stringify/download/fast-safe-stringify-2.0.7.tgz",
+ "integrity": "sha1-EkqohYmSYfaK7bQqfAgN6dpgh0M=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+ "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "frida-any-promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npm.taobao.org/frida-any-promise/download/frida-any-promise-2.0.0.tgz",
+ "integrity": "sha1-b45yyL4pBi/QHVA2Vs7oroL9TrE=",
+ "dev": true
+ },
+ "frida-buffer": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npm.taobao.org/frida-buffer/download/frida-buffer-1.0.7.tgz",
+ "integrity": "sha1-ncUj4VBRbtC2IdORwcQqckc0JoU=",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.3.0"
+ }
+ },
+ "frida-compile": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npm.taobao.org/frida-compile/download/frida-compile-9.3.0.tgz",
+ "integrity": "sha1-8ST+87Xy487nsfi4inC2AJ/OMGI=",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.5.5",
+ "@babel/plugin-transform-runtime": "^7.5.5",
+ "@babel/preset-env": "^7.5.5",
+ "@babel/runtime-corejs2": "^7.5.5",
+ "@frida/uglifyify": "^6.0.1",
+ "babelify": "^10.0.0",
+ "bignumber.js": "^9.0.0",
+ "browserify": "^16.2.3",
+ "chalk": "^2.4.1",
+ "chokidar": "^3.0.0",
+ "commander": "^3.0.0",
+ "concat-stream": "^2.0.0",
+ "esmify": "^2.1.1",
+ "frida-any-promise": "^2.0.0",
+ "frida-buffer": "^1.0.7",
+ "frida-fs": "^3.0.0",
+ "frida-http": "^3.0.0",
+ "frida-net": "^3.0.1",
+ "frida-process": "^3.0.1",
+ "mkdirp": "^0.5.1",
+ "mold-source-map": "^0.4.0",
+ "node-notifier": "^5.1.2",
+ "through2": "^3.0.1",
+ "tsify": "^4.0.0",
+ "typescript": "^3.5.1"
+ }
+ },
+ "frida-fs": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/frida-fs/download/frida-fs-3.0.1.tgz",
+ "integrity": "sha1-p5/3kRKWt0kb9gfmTNNwvWBhe4c=",
+ "dev": true
+ },
+ "frida-http": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/frida-http/download/frida-http-3.0.0.tgz",
+ "integrity": "sha1-MI/xMvjl/rCBfEczX7HE+JJ9erA=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": "^0.5.1"
+ }
+ },
+ "frida-net": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/frida-net/download/frida-net-3.0.1.tgz",
+ "integrity": "sha1-YkPrgO2GblZEyTQY6NQqoIE37jc=",
+ "dev": true,
+ "requires": {
+ "ipaddr.js": "^1.9.1"
+ }
+ },
+ "frida-process": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/frida-process/download/frida-process-3.0.1.tgz",
+ "integrity": "sha1-3lfYsuKedZXXnMgf6Bnh1C1JJp4=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.1.2.tgz?cache=0&sync_timestamp=1580708699417&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.1.2.tgz",
+ "integrity": "sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU=",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
+ "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha1-WPQ2H/mH5f9uHnohCCeqNx6qwmk=",
+ "dev": true
+ },
+ "get-assigned-identifiers": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/get-assigned-identifiers/download/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha1-bb9BHeZIy6+NkWnrsNLVdhkeL/E=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz",
+ "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.0.tgz",
+ "integrity": "sha1-X0wdHnSNMM1zrSlEs1d6gbCB6MI=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz",
+ "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+ "dev": true
+ },
+ "growly": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
+ "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz",
+ "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=",
+ "dev": true
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+ "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "htmlescape": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "http-parser-js": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.5.2.tgz?cache=0&sync_timestamp=1572715496014&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.5.2.tgz",
+ "integrity": "sha1-2i4x0jezk6rnKs5DiC3X4nCo/3c=",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
+ "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz",
+ "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "insert-module-globals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npm.taobao.org/insert-module-globals/download/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha1-7IfltCcoR54ye9XFxxYR3ftHUro=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz",
+ "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
+ "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1569905349018&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+ "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+ "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz",
+ "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz",
+ "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "json5": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.1.tgz",
+ "integrity": "sha1-gbbLBOm6SW8ccAXQe0NoomOPkLY=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/labeled-stream-splicer/download/labeled-stream-splicer-2.0.2.tgz",
+ "integrity": "sha1-QqQaFqvNRv0EYwbPTyw1dv/7HCE=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "stream-splicer": "^2.0.0"
+ }
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/leven/download/leven-3.1.0.tgz",
+ "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=",
+ "dev": true
+ },
+ "levenary": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/levenary/download/levenary-1.1.1.tgz",
+ "integrity": "sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c=",
+ "dev": true,
+ "requires": {
+ "leven": "^3.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.memoize": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
+ "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
+ "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/miller-rabin/download/miller-rabin-4.0.1.tgz",
+ "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npm.taobao.org/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npm.taobao.org/minimatch/download/minimatch-3.0.4.tgz",
+ "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz?cache=0&sync_timestamp=1584051509720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-1.2.5.tgz",
+ "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz?cache=0&sync_timestamp=1579899671093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmkdirp%2Fdownload%2Fmkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz?cache=0&sync_timestamp=1584051509720&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminimist%2Fdownload%2Fminimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "module-deps": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npm.taobao.org/module-deps/download/module-deps-6.2.2.tgz",
+ "integrity": "sha1-2KFcImXfwRkVPCm7Rzhph9DuQjs=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.2",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.2.0",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npm.taobao.org/concat-stream/download/concat-stream-1.6.2.tgz",
+ "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "mold-source-map": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/mold-source-map/-/mold-source-map-0.4.0.tgz",
+ "integrity": "sha1-z2fgsxxHq5uttcnCVlGGISe7gxc=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "^1.1.0",
+ "through": "~2.2.7"
+ },
+ "dependencies": {
+ "through": {
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz",
+ "integrity": "sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
+ "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+ "dev": true
+ },
+ "node-notifier": {
+ "version": "5.4.3",
+ "resolved": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz",
+ "integrity": "sha1-y3La+UyTkECY4oucWQ/YZuRkvVA=",
+ "dev": true,
+ "requires": {
+ "growly": "^1.3.0",
+ "is-wsl": "^1.1.0",
+ "semver": "^5.5.0",
+ "shellwords": "^0.1.1",
+ "which": "^1.3.0"
+ }
+ },
+ "node-releases": {
+ "version": "1.1.52",
+ "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.52.tgz?cache=0&sync_timestamp=1584070522266&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.52.tgz",
+ "integrity": "sha1-vP/uPgp1jpLkTs+uzQpHVUsLy6k=",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+ "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+ "dev": true
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
+ "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
+ "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz",
+ "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
+ "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz",
+ "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "path-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/path-browserify/download/path-browserify-0.0.1.tgz",
+ "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz",
+ "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
+ "dev": true
+ },
+ "path-platform": {
+ "version": "0.11.15",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz",
+ "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "picomatch": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.1.tgz",
+ "integrity": "sha1-IbrIiLbthgH4Mc54FuM1vHefCko=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
+ "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
+ "dev": true
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprocess-nextick-args%2Fdownload%2Fprocess-nextick-args-2.0.1.tgz",
+ "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npm.taobao.org/public-encrypt/download/public-encrypt-4.0.3.tgz",
+ "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
+ "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "randomfill": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/randomfill/download/randomfill-1.0.4.tgz",
+ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "read-only-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz",
+ "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
+ "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.3.0.tgz?cache=0&sync_timestamp=1575630040557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.3.0.tgz",
+ "integrity": "sha1-mERY0ToeQuLp9YQbEp4WLzaa/xc=",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.0.7"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz",
+ "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-8.2.0.tgz",
+ "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.5.tgz?cache=0&sync_timestamp=1584052392667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.5.tgz",
+ "integrity": "sha1-2Hih0JS0MG0QuQlkhLM+vVXiZpc=",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.3.tgz?cache=0&sync_timestamp=1584052604265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.3.tgz",
+ "integrity": "sha1-VK6/8u9YwK5h5pWtG5qdZZlf/3g=",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4",
+ "private": "^0.1.8"
+ }
+ },
+ "regexpu-core": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.0.tgz",
+ "integrity": "sha1-/L9FjFBDGwu3tF1pZ7gZLZHz2Tg=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.2.0",
+ "regjsgen": "^0.5.1",
+ "regjsparser": "^0.6.4",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.2.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz",
+ "integrity": "sha1-SPC/Gl6iBRlpKcDZeYtC0e2YRDw=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz",
+ "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580944411686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz",
+ "integrity": "sha1-J73N7/6vLWJEuVuw+fS0ZTRR8+g=",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/ripemd160/download/ripemd160-2.0.2.tgz",
+ "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1562349888578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+ "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
+ "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "https://registry.npm.taobao.org/sha.js/download/sha.js-2.4.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsha.js%2Fdownload%2Fsha.js-2.4.11.tgz",
+ "integrity": "sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shasum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ }
+ },
+ "shasum-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/shasum-object/download/shasum-object-1.0.0.tgz?cache=0&sync_timestamp=1572352872970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fshasum-object%2Fdownload%2Fshasum-object-1.0.0.tgz",
+ "integrity": "sha1-C3t0/1tm7PkDVHVSL6BQkKxH4p4=",
+ "dev": true,
+ "requires": {
+ "fast-safe-stringify": "^2.0.7"
+ }
+ },
+ "shell-quote": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npm.taobao.org/shell-quote/download/shell-quote-1.7.2.tgz",
+ "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=",
+ "dev": true
+ },
+ "shellwords": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz",
+ "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
+ "dev": true
+ },
+ "simple-concat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npm.taobao.org/simple-concat/download/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz?cache=0&sync_timestamp=1572390697943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.16.tgz",
+ "integrity": "sha1-CuBp5/47p1OMZMmFFeNTOerFoEI=",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ }
+ }
+ },
+ "stream-browserify": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
+ "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-http": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npm.taobao.org/stream-http/download/stream-http-3.1.0.tgz",
+ "integrity": "sha1-Ivsz/ptAVrTsz1i9j0AMS5k//lc=",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^3.0.6",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz",
+ "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "stream-splicer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npm.taobao.org/stream-splicer/download/stream-splicer-2.0.1.tgz",
+ "integrity": "sha1-CxO37itax+BgmnRj2DiZWJo2P80=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.3.0.tgz",
+ "integrity": "sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.0.tgz?cache=0&sync_timestamp=1562349888578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.0.tgz",
+ "integrity": "sha1-t02uxJsRSPiMZLaNSbHoFcHy9Rk=",
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "subarg": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz",
+ "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "syntax-error": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npm.taobao.org/syntax-error/download/syntax-error-1.4.0.tgz",
+ "integrity": "sha1-LZ1P9cBkrLcRWUo+O5UFStUdkHw=",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "terser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npm.taobao.org/terser/download/terser-3.17.0.tgz?cache=0&sync_timestamp=1583252189467&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-3.17.0.tgz",
+ "integrity": "sha1-+I/77aDetWN/nSSw2mb04VqxDLI=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.19.0",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.10"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
+ "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+ "dev": true
+ }
+ }
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "through2": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-3.0.1.tgz",
+ "integrity": "sha1-OSducTwzAu3544jdnIEt07glvVo=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "2 || 3"
+ }
+ },
+ "timers-browserify": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+ "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tsconfig": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-5.0.3.tgz",
+ "integrity": "sha1-X0J45wGACWeo/Dg/0ZZIh48qbjo=",
+ "dev": true,
+ "requires": {
+ "any-promise": "^1.3.0",
+ "parse-json": "^2.2.0",
+ "strip-bom": "^2.0.0",
+ "strip-json-comments": "^2.0.0"
+ }
+ },
+ "tsify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npm.taobao.org/tsify/download/tsify-4.0.1.tgz",
+ "integrity": "sha1-sZsN338YQ2jb9lg5KT0sWm1IRT0=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "^1.1.0",
+ "fs.realpath": "^1.0.0",
+ "object-assign": "^4.1.0",
+ "semver": "^5.6.0",
+ "through2": "^2.0.0",
+ "tsconfig": "^5.0.3"
+ },
+ "dependencies": {
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npm.taobao.org/through2/download/through2-2.0.5.tgz",
+ "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ }
+ }
+ },
+ "tty-browserify": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npm.taobao.org/tty-browserify/download/tty-browserify-0.0.1.tgz",
+ "integrity": "sha1-PwUlHuF5BN/QZ3VGZw25ZRaCuBE=",
+ "dev": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npm.taobao.org/typescript/download/typescript-3.8.3.tgz?cache=0&sync_timestamp=1583997231490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-3.8.3.tgz",
+ "integrity": "sha1-QJ64VE6gM1cRIFhp7EWKsQnuEGE=",
+ "dev": true
+ },
+ "umd": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npm.taobao.org/umd/download/umd-3.0.3.tgz",
+ "integrity": "sha1-qp/mU8QrkJdnhInAEACstp8LJs8=",
+ "dev": true
+ },
+ "undeclared-identifiers": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npm.taobao.org/undeclared-identifiers/download/undeclared-identifiers-1.1.3.tgz",
+ "integrity": "sha1-klTB03vawKwrUt5LZyJ5LSqR4w8=",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "dash-ast": "^1.0.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npm.taobao.org/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz?cache=0&sync_timestamp=1583949910462&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-1.2.0.tgz",
+ "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583946096584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz",
+ "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=",
+ "dev": true
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.4.tgz?cache=0&sync_timestamp=1582562111943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.4.tgz",
+ "integrity": "sha1-OqASW/5mikZy3liFfTrOJ+y3aQE=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vm-browserify": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870717730&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz",
+ "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&sync_timestamp=1574116230888&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz",
+ "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz",
+ "integrity": "sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q=",
+ "dev": true
+ }
+ }
+}
diff --git a/agent/package.json b/agent/package.json
new file mode 100644
index 0000000..8dbb6ae
--- /dev/null
+++ b/agent/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "frida-dexdump-agent",
+ "version": "1.0.0",
+ "description": "frida-dexdump Agent",
+ "private": true,
+ "main": "src/index.ts",
+ "scripts": {
+ "prepare": "npm run build",
+ "build": "frida-compile src/index.ts -o ../frida_dexdump/agent/agent.js"
+ },
+ "devDependencies": {
+ "@types/frida-gum": "^14.5.0",
+ "@types/node": "^12.12.34",
+ "frida-compile": "^9.3.0"
+ },
+ "dependencies": {
+ "@babel/compat-data": "^7.12.7"
+ }
+}
diff --git a/agent/src/index.ts b/agent/src/index.ts
new file mode 100644
index 0000000..9cf879b
--- /dev/null
+++ b/agent/src/index.ts
@@ -0,0 +1,21 @@
+/*
+* Author: hluwa
+* HomePage: https://github.com/hluwa
+* CreateTime: 2021/6/2
+* */
+
+import {searchDex} from "./search";
+
+rpc.exports = {
+ memorydump: function (address, size) {
+ return new NativePointer(address).readByteArray(size);
+ },
+ searchdex: function (enableDeepSearch: boolean) {
+ return searchDex(enableDeepSearch);
+ },
+ stopthreads: function(){
+ Process.enumerateThreads().forEach(function (thread) {
+
+ })
+ }
+};
\ No newline at end of file
diff --git a/agent/src/search.ts b/agent/src/search.ts
new file mode 100644
index 0000000..4db344d
--- /dev/null
+++ b/agent/src/search.ts
@@ -0,0 +1,170 @@
+/*
+* Author: hluwa
+* HomePage: https://github.com/hluwa
+* CreateTime: 2021/6/3
+* */
+
+
+function verify_by_maps(dexptr: NativePointer, mapsptr: NativePointer): boolean {
+ const maps_offset = dexptr.add(0x34).readUInt();
+ const maps_size = mapsptr.readUInt();
+ for (let i = 0; i < maps_size; i++) {
+ const item_type = mapsptr.add(4 + i * 0xC).readU16();
+ if (item_type === 4096) {
+ const map_offset = mapsptr.add(4 + i * 0xC + 8).readUInt();
+ if (maps_offset === map_offset) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+function get_dex_real_size(dexptr: NativePointer, range_base: NativePointer, range_end: NativePointer): Number {
+ const dex_size = dexptr.add(0x20).readUInt();
+
+ const maps_address = get_maps_address(dexptr, range_base, range_end);
+ if (!maps_address) {
+ return dex_size;
+ }
+
+ const maps_end = get_maps_end(maps_address, range_base, range_end);
+ if (!maps_end) {
+ return dex_size;
+ }
+
+ return maps_end.sub(dexptr).toInt32();
+}
+
+function get_maps_address(dexptr: NativePointer, range_base: NativePointer, range_end: NativePointer): NativePointer | null {
+ const maps_offset = dexptr.add(0x34).readUInt();
+ if (maps_offset === 0) {
+ return null;
+ }
+
+ const maps_address = dexptr.add(maps_offset);
+ if (maps_address < range_base || maps_address > range_end) {
+ return null;
+ }
+
+ return maps_address;
+}
+
+function get_maps_end(maps: NativePointer, range_base: NativePointer, range_end: NativePointer): NativePointer | null {
+ const maps_size = maps.readUInt();
+ if (maps_size < 2 || maps_size > 50) {
+ return null;
+ }
+ const maps_end = maps.add(maps_size * 0xC + 4);
+ if (maps_end < range_base || maps_end > range_end) {
+ return null;
+ }
+
+ return maps_end;
+}
+
+function verify(dexptr: NativePointer, range: RangeDetails, enable_verify_maps: boolean): boolean {
+
+ if (range != null) {
+ var range_end = range.base.add(range.size);
+ // verify header_size
+ if (dexptr.add(0x70) > range_end) {
+ return false;
+ }
+
+ if (enable_verify_maps) {
+
+ var maps_address = get_maps_address(dexptr, range.base, range_end);
+ if (!maps_address) {
+ return false;
+ }
+
+ var maps_end = get_maps_end(maps_address, range.base, range_end);
+ if (!maps_end) {
+ return false;
+ }
+ return verify_by_maps(dexptr, maps_address)
+ } else {
+ return dexptr.add(0x3C).readUInt() === 0x70;
+ }
+ }
+
+ return false;
+
+}
+
+function verify_ids_off(dexptr: NativePointer, dex_size: Number) {
+ const string_ids_off = dexptr.add(0x2C).readUInt();
+ return string_ids_off < dex_size;
+}
+
+export function searchDex(deepSearch: boolean) {
+ const result: any = [];
+ Process.enumerateRanges('r--').forEach(function (range: RangeDetails) {
+ try {
+ Memory.scanSync(range.base, range.size, "64 65 78 0a 30 ?? ?? 00").forEach(function (match) {
+
+ if (range.file && range.file.path
+ && (range.file.path.startsWith("/data/dalvik-cache/") ||
+ range.file.path.startsWith("/system/"))) {
+ return;
+ }
+
+ if (verify(match.address, range, false)) {
+ const dex_size = get_dex_real_size(match.address, range.base, range.base.add(range.size));
+ result.push({
+ "addr": match.address,
+ "size": dex_size
+ });
+
+ const max_size = range.size - match.address.sub(range.base).toInt32();
+ if (deepSearch && max_size != dex_size) {
+ result.push({
+ "addr": match.address,
+ "size": max_size
+ });
+ }
+ }
+ });
+
+ if (deepSearch) {
+ Memory.scanSync(range.base, range.size, "70 00 00 00").forEach(function (match) {
+ const dex_base = match.address.sub(0x3C);
+ if (dex_base < range.base) {
+ return;
+ }
+ if (dex_base.readCString(4) != "dex\n" && verify(dex_base, range, true)) {
+ const real_dex_size = get_dex_real_size(dex_base, range.base, range.base.add(range.size));
+ if (!verify_ids_off(dex_base, real_dex_size)) {
+ return;
+ }
+ result.push({
+ "addr": dex_base,
+ "size": real_dex_size
+ });
+ const max_size = range.size - dex_base.sub(range.base).toInt32();
+ if (max_size != real_dex_size) {
+ result.push({
+ "addr": match.address,
+ "size": max_size
+ });
+ }
+ }
+ })
+ } else {
+ if (range.base.readCString(4) != "dex\n" && verify(range.base, range, true)) {
+ const real_dex_size = get_dex_real_size(range.base, range.base, range.base.add(range.size));
+ result.push({
+ "addr": range.base,
+ "size": real_dex_size
+ });
+ }
+ }
+
+ } catch (e) {
+ }
+ });
+
+ return result;
+}
\ No newline at end of file
diff --git a/agent/tsconfig.json b/agent/tsconfig.json
new file mode 100644
index 0000000..85c5292
--- /dev/null
+++ b/agent/tsconfig.json
@@ -0,0 +1,12 @@
+{
+ "compilerOptions": {
+ "target": "esnext",
+ "lib": [
+ "esnext"
+ ],
+ "allowJs": true,
+ "noEmit": true,
+ "strict": true,
+ "esModuleInterop": true
+ }
+}
diff --git a/frida_dexdump/__init__.py b/frida_dexdump/__init__.py
index 98fc1f1..e69de29 100644
--- a/frida_dexdump/__init__.py
+++ b/frida_dexdump/__init__.py
@@ -1,59 +0,0 @@
-# Author: hluwa
-# HomePage: https://github.com/hluwa
-# CreatedTime: 2020/3/5 19:14
-
-def in_objection():
- try:
- import objection
- return objection.state.connection.state_connection.get_api()
- except:
- return False
-
-
-if in_objection():
- __description__ = "a objection plugin to fast search and dump dex on memory."
-
- from .main import *
- from objection.state.connection import state_connection
- from objection.utils.plugin import Plugin
-
-
- class DEXDump(Plugin):
-
- def __init__(self, ns):
- """
- Creates a new instance of the plugin
- :param ns:
- """
-
- self.script_path = os.path.join(os.path.dirname(__file__), "agent.js")
-
- implementation = {
- 'meta': 'fast search and dump dex on memory.',
- 'commands': {
- 'search': {
- 'meta': 'search all dex',
- 'exec': self.search
- },
- 'dump': {
- 'meta': 'dump all dex',
- 'exec': self.dump
- }
- }
- }
-
- super().__init__(__file__, ns, implementation)
-
- self.inject()
-
- def search(self, args=None):
- main.search(self.api)
-
- def dump(self, args=None):
- """
- """
- main.dump(state_connection.gadget_name, self.api)
-
-
- namespace = 'dexdump'
- plugin = DEXDump
diff --git a/frida_dexdump/__main__.py b/frida_dexdump/__main__.py
new file mode 100644
index 0000000..5cf3a1c
--- /dev/null
+++ b/frida_dexdump/__main__.py
@@ -0,0 +1,131 @@
+# Author: hluwa
+# HomePage: https://github.com/hluwa
+# CreateTime: 2021/6/3
+import hashlib
+import json
+import logging
+import os.path
+import re
+import time
+from frida_dexdump.agent import DexDumpAgent
+from frida_tools.application import ConsoleApplication
+from wallbreaker.connection import Connection
+
+from frida_dexdump.banner import show_banner
+
+logger = logging.getLogger("frida-dexdump")
+md5 = lambda bs: hashlib.md5(bs).hexdigest()
+
+
+class SessionConnection(Connection):
+
+ def __init__(self, device, session):
+ self.device = device
+ self.session = session
+ self.process = str(self.session)
+
+
+class DexDumpApplication(ConsoleApplication):
+ agent = None
+
+ def _needs_target(self):
+ return True
+
+ def _usage(self):
+ return "Usage see: frida-dexdump -h"
+
+ def _add_options(self, parser):
+ parser.add_argument("-o", "--output", help="Output folder path, default is './/'.",
+ type=str, action='store')
+ parser.add_argument("-d", "--deep-search", help="Enable deep search mode.",
+ action='store_true', dest="enable_deep", default=False)
+ parser.add_argument("--sleep", help="Waiting times for start, spawn mode default is 5s.",
+ type=int, action='store', default=None)
+
+ def _initialize(self, parser, options, args):
+ self.mds = set()
+ self.output = options.output
+ self.enable_deep = options.enable_deep
+ self.sleep = options.sleep
+ # spawn mode
+ if self.sleep is None and self._target[0] == "file":
+ self.sleep = 5
+
+ def _start(self):
+ self.connection = SessionConnection(self._device, self._session)
+ self.agent = DexDumpAgent(self.connection)
+ self.package_name = self.get_package_name()
+ if not self.output:
+ self.output = os.path.join(os.getcwd(), self.package_name.replace(":", "-"))
+ os.makedirs(self.output, exist_ok=True)
+ self._resume()
+ if self.sleep:
+ logger.info("Waiting {}s...".format(self.sleep))
+ time.sleep(self.sleep)
+ self.dump()
+ self._exit(0)
+
+ def dump(self):
+ logger.info("[+] Searching...")
+ st = time.time()
+ ranges = self.agent.search_dex(enable_deep_search=self.enable_deep)
+ et = time.time()
+ logger.info("[*] Successful found {} dex, used {} time.".format(len(ranges), int(et - st)))
+ logger.info("[+] Starting dump to '{}'...".format(self.output))
+ idx = 0
+ for dex in ranges:
+ try:
+ idx += 1
+ bs = self.agent.memory_dump(dex['addr'], dex['size'])
+ md = md5(bs)
+ if md in self.mds:
+ continue
+ self.mds.add(md)
+ bs = fix_header(bs)
+ out_path = os.path.join(self.output, "classes{}.dex".format('%02d' % idx if idx != 1 else ''))
+ with open(out_path, 'wb') as out:
+ out.write(bs)
+ logger.info("[+] DexMd5={}, SavePath={}, DexSize={}"
+ .format(md, out_path, hex(dex['size'])))
+ except Exception as e:
+ logger.exception("[-] {}: {}".format(e, dex))
+ logger.info("[*] All done...")
+
+ def get_package_name(self):
+ try:
+ pid = self._session._impl.pid
+ for process in self._device.enumerate_processes():
+ if process.pid == pid:
+ return process.name
+ return "dexdump.unnamed.{}".format(pid)
+ except:
+ return "dexdump.unnamed"
+
+
+def fix_header(dex_bytes):
+ import struct
+ dex_size = len(dex_bytes)
+
+ if dex_bytes[:4] != b"dex\n":
+ dex_bytes = b"dex\n035\x00" + dex_bytes[8:]
+
+ if dex_size >= 0x24:
+ dex_bytes = dex_bytes[:0x20] + struct.Struct("= 0x28:
+ dex_bytes = dex_bytes[:0x24] + struct.Struct("= 0x2C and dex_bytes[0x28:0x2C] not in [b'\x78\x56\x34\x12', b'\x12\x34\x56\x78']:
+ dex_bytes = dex_bytes[:0x28] + b'\x78\x56\x34\x12' + dex_bytes[0x2C:]
+
+ return dex_bytes
+
+
+def main():
+ show_banner()
+ logging.basicConfig(level=logging.INFO)
+ DexDumpApplication().run()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/frida_dexdump/agent.js b/frida_dexdump/agent.js
deleted file mode 100644
index 373bd69..0000000
--- a/frida_dexdump/agent.js
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-* Author: hluwa
-* HomePage: https://github.com/hluwa
-* CreatedTime: 2020/1/7 20:44
-* */
-
-
-var enable_deep_search = false;
-
-function verify_by_maps(dexptr, mapsptr) {
- var maps_offset = dexptr.add(0x34).readUInt();
- var maps_size = mapsptr.readUInt();
- for (var i = 0; i < maps_size; i++) {
- var item_type = mapsptr.add(4 + i * 0xC).readU16();
- if (item_type === 4096) {
- var map_offset = mapsptr.add(4 + i * 0xC + 8).readUInt();
- if (maps_offset === map_offset) {
- return true;
- }
- }
- }
- return false;
-}
-
-
-function get_dex_real_size(dexptr, range_base, range_end) {
- var dex_size = dexptr.add(0x20).readUInt();
-
- var maps_address = get_maps_address(dexptr, range_base, range_end);
- if (!maps_address) {
- return dex_size;
- }
-
- var maps_end = get_maps_end(maps_address, range_base, range_end);
- if (!maps_end) {
- return dex_size;
- }
-
- return maps_end - dexptr
-}
-
-function get_maps_address(dexptr, range_base, range_end) {
- var maps_offset = dexptr.add(0x34).readUInt();
- if (maps_offset === 0) {
- return null;
- }
-
- var maps_address = dexptr.add(maps_offset);
- if (maps_address < range_base || maps_address > range_end) {
- return null;
- }
-
- return maps_address;
-}
-
-function get_maps_end(maps, range_base, range_end) {
- var maps_size = maps.readUInt();
- if (maps_size < 2 || maps_size > 50) {
- return null;
- }
- var maps_end = maps.add(maps_size * 0xC + 4);
- if (maps_end < range_base || maps_end > range_end) {
- return null;
- }
-
- return maps_end;
-}
-
-
-function verify(dexptr, range, enable_verify_maps) {
-
- if (range != null) {
- var range_end = range.base.add(range.size);
- // verify header_size
- if (dexptr.add(0x70) > range_end) {
- return false;
- }
-
- // In runtime, the fileSize is can to be clean, so it's not trust.
- // verify file_size
- // var dex_size = dexptr.add(0x20).readUInt();
- // if (dexptr.add(dex_size) > range_end) {
- // return false;
- // }
-
- if (enable_verify_maps) {
-
- var maps_address = get_maps_address(dexptr, range.base, range_end);
- if (!maps_address) {
- return false;
- }
-
- var maps_end = get_maps_end(maps_address, range.base, range_end);
- if (!maps_end) {
- return false;
- }
- return verify_by_maps(dexptr, maps_address)
- } else {
- return dexptr.add(0x3C).readUInt() === 0x70;
- }
- }
-
- return false;
-
-
-}
-
-rpc.exports = {
- memorydump: function memorydump(address, size) {
- return new NativePointer(address).readByteArray(size);
- },
- switchmode: function switchmode(bool) {
- enable_deep_search = bool;
- },
- scandex: function scandex() {
- var result = [];
- Process.enumerateRanges('r--').forEach(function (range) {
- try {
- Memory.scanSync(range.base, range.size, "64 65 78 0a 30 ?? ?? 00").forEach(function (match) {
-
- if (range.file && range.file.path
- && (// range.file.path.startsWith("/data/app/") ||
- range.file.path.startsWith("/data/dalvik-cache/") ||
- range.file.path.startsWith("/system/"))) {
- return;
- }
-
- if (verify(match.address, range, false)) {
- var dex_size = get_dex_real_size(match.address, range.base, range.base.add(range.size));
- result.push({
- "addr": match.address,
- "size": dex_size
- });
-
- var max_size = range.size - match.address.sub(range.base);
- if (enable_deep_search && max_size != dex_size) {
- result.push({
- "addr": match.address,
- "size": max_size
- });
- }
- }
- });
-
- if (enable_deep_search) {
- Memory.scanSync(range.base, range.size, "70 00 00 00").forEach(function (match) {
- var dex_base = match.address.sub(0x3C);
- if (dex_base < range.base) {
- return
- }
- if (dex_base.readCString(4) != "dex\n" && verify(dex_base, range, true)) {
- var real_dex_size = get_dex_real_size(dex_base, range.base, range.base.add(range.size));
- result.push({
- "addr": dex_base,
- "size": real_dex_size
- });
- var max_size = range.size - dex_base.sub(range.base);
- if (max_size != real_dex_size) {
- result.push({
- "addr": match.address,
- "size": max_size
- });
- }
- }
- })
- } else {
- if (range.base.readCString(4) != "dex\n" && verify(range.base, range, true)) {
- var real_dex_size = get_dex_real_size(range.base, range.base, range.base.add(range.size));
- result.push({
- "addr": range.base,
- "size": real_dex_size
- });
- }
- }
-
- } catch (e) {
- }
- });
-
- return result;
- }
-};
diff --git a/frida_dexdump/agent/__init__.py b/frida_dexdump/agent/__init__.py
new file mode 100644
index 0000000..5937dce
--- /dev/null
+++ b/frida_dexdump/agent/__init__.py
@@ -0,0 +1,27 @@
+# Author: hluwa
+# HomePage: https://github.com/hluwa
+# CreateTime: 2021/6/3
+import os
+
+from wallbreaker.agent import Agent
+
+
+class DexDumpAgent(Agent):
+
+ def __init__(self, connection=None):
+ super().__init__(connection=connection, script_file=os.path.join(os.path.dirname(__file__), "agent.js"))
+
+ def on_message(self, message, data):
+ if message['type'] == 'send':
+ print("[*] {0}".format(message))
+ else:
+ print(message)
+
+ def search_dex(self, enable_deep_search=True):
+ return self._rpc.searchdex(enable_deep_search)
+
+ def memory_dump(self, base, size):
+ return self._rpc.memorydump(base, size)
+
+ def read_code(self, buffer_size, class_name, method_name, *overload):
+ return self._rpc.readcode(buffer_size, class_name, method_name, *overload)
diff --git a/frida_dexdump/agent/agent.js b/frida_dexdump/agent/agent.js
new file mode 100644
index 0000000..7c68853
--- /dev/null
+++ b/frida_dexdump/agent/agent.js
@@ -0,0 +1,447 @@
+(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i
+* HomePage: https://github.com/hluwa
+* CreateTime: 2021/6/2
+* */
+
+var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
+
+var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
+
+(0, _defineProperty["default"])(exports, "__esModule", {
+ value: true
+});
+
+var search_1 = require("./search");
+
+rpc.exports = {
+ memorydump: function memorydump(address, size) {
+ return new NativePointer(address).readByteArray(size);
+ },
+ searchdex: function searchdex(enableDeepSearch) {
+ return search_1.searchDex(enableDeepSearch);
+ },
+ stopthreads: function stopthreads() {
+ Process.enumerateThreads().forEach(function (thread) {});
+ }
+};
+
+},{"./search":22,"@babel/runtime-corejs2/core-js/object/define-property":1,"@babel/runtime-corejs2/helpers/interopRequireDefault":2}],22:[function(require,module,exports){
+"use strict";
+/*
+* Author: hluwa
+* HomePage: https://github.com/hluwa
+* CreateTime: 2021/6/3
+* */
+
+var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
+
+var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
+
+(0, _defineProperty["default"])(exports, "__esModule", {
+ value: true
+});
+
+function verify_by_maps(dexptr, mapsptr) {
+ var maps_offset = dexptr.add(0x34).readUInt();
+ var maps_size = mapsptr.readUInt();
+
+ for (var i = 0; i < maps_size; i++) {
+ var item_type = mapsptr.add(4 + i * 0xC).readU16();
+
+ if (item_type === 4096) {
+ var map_offset = mapsptr.add(4 + i * 0xC + 8).readUInt();
+
+ if (maps_offset === map_offset) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+function get_dex_real_size(dexptr, range_base, range_end) {
+ var dex_size = dexptr.add(0x20).readUInt();
+ var maps_address = get_maps_address(dexptr, range_base, range_end);
+
+ if (!maps_address) {
+ return dex_size;
+ }
+
+ var maps_end = get_maps_end(maps_address, range_base, range_end);
+
+ if (!maps_end) {
+ return dex_size;
+ }
+
+ return maps_end.sub(dexptr).toInt32();
+}
+
+function get_maps_address(dexptr, range_base, range_end) {
+ var maps_offset = dexptr.add(0x34).readUInt();
+
+ if (maps_offset === 0) {
+ return null;
+ }
+
+ var maps_address = dexptr.add(maps_offset);
+
+ if (maps_address < range_base || maps_address > range_end) {
+ return null;
+ }
+
+ return maps_address;
+}
+
+function get_maps_end(maps, range_base, range_end) {
+ var maps_size = maps.readUInt();
+
+ if (maps_size < 2 || maps_size > 50) {
+ return null;
+ }
+
+ var maps_end = maps.add(maps_size * 0xC + 4);
+
+ if (maps_end < range_base || maps_end > range_end) {
+ return null;
+ }
+
+ return maps_end;
+}
+
+function verify(dexptr, range, enable_verify_maps) {
+ if (range != null) {
+ var range_end = range.base.add(range.size); // verify header_size
+
+ if (dexptr.add(0x70) > range_end) {
+ return false;
+ }
+
+ if (enable_verify_maps) {
+ var maps_address = get_maps_address(dexptr, range.base, range_end);
+
+ if (!maps_address) {
+ return false;
+ }
+
+ var maps_end = get_maps_end(maps_address, range.base, range_end);
+
+ if (!maps_end) {
+ return false;
+ }
+
+ return verify_by_maps(dexptr, maps_address);
+ } else {
+ return dexptr.add(0x3C).readUInt() === 0x70;
+ }
+ }
+
+ return false;
+}
+
+function verify_ids_off(dexptr, dex_size) {
+ var string_ids_off = dexptr.add(0x2C).readUInt();
+ return string_ids_off < dex_size;
+}
+
+function searchDex(deepSearch) {
+ var result = [];
+ Process.enumerateRanges('r--').forEach(function (range) {
+ try {
+ Memory.scanSync(range.base, range.size, "64 65 78 0a 30 ?? ?? 00").forEach(function (match) {
+ if (range.file && range.file.path && (range.file.path.startsWith("/data/dalvik-cache/") || range.file.path.startsWith("/system/"))) {
+ return;
+ }
+
+ if (verify(match.address, range, false)) {
+ var dex_size = get_dex_real_size(match.address, range.base, range.base.add(range.size));
+ result.push({
+ "addr": match.address,
+ "size": dex_size
+ });
+ var max_size = range.size - match.address.sub(range.base).toInt32();
+
+ if (deepSearch && max_size != dex_size) {
+ result.push({
+ "addr": match.address,
+ "size": max_size
+ });
+ }
+ }
+ });
+
+ if (deepSearch) {
+ Memory.scanSync(range.base, range.size, "70 00 00 00").forEach(function (match) {
+ var dex_base = match.address.sub(0x3C);
+
+ if (dex_base < range.base) {
+ return;
+ }
+
+ if (dex_base.readCString(4) != "dex\n" && verify(dex_base, range, true)) {
+ var real_dex_size = get_dex_real_size(dex_base, range.base, range.base.add(range.size));
+
+ if (!verify_ids_off(dex_base, real_dex_size)) {
+ return;
+ }
+
+ result.push({
+ "addr": dex_base,
+ "size": real_dex_size
+ });
+ var max_size = range.size - dex_base.sub(range.base).toInt32();
+
+ if (max_size != real_dex_size) {
+ result.push({
+ "addr": match.address,
+ "size": max_size
+ });
+ }
+ }
+ });
+ } else {
+ if (range.base.readCString(4) != "dex\n" && verify(range.base, range, true)) {
+ var real_dex_size = get_dex_real_size(range.base, range.base, range.base.add(range.size));
+ result.push({
+ "addr": range.base,
+ "size": real_dex_size
+ });
+ }
+ }
+ } catch (e) {}
+ });
+ return result;
+}
+
+exports.searchDex = searchDex;
+
+},{"@babel/runtime-corejs2/core-js/object/define-property":1,"@babel/runtime-corejs2/helpers/interopRequireDefault":2}]},{},[21])
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUtY29yZWpzMi9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hhcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJzcmMvaW5kZXgudHMiLCJzcmMvc2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7O0FDSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBOzs7QUNIQTs7Ozs7Ozs7Ozs7Ozs7QUFNQSxJQUFBLFFBQUEsR0FBQSxPQUFBLENBQUEsVUFBQSxDQUFBOztBQUVBLEdBQUcsQ0FBQyxPQUFKLEdBQWM7QUFDVixFQUFBLFVBQVUsRUFBRSxvQkFBVSxPQUFWLEVBQW1CLElBQW5CLEVBQXVCO0FBQy9CLFdBQU8sSUFBSSxhQUFKLENBQWtCLE9BQWxCLEVBQTJCLGFBQTNCLENBQXlDLElBQXpDLENBQVA7QUFDSCxHQUhTO0FBSVYsRUFBQSxTQUFTLEVBQUUsbUJBQVUsZ0JBQVYsRUFBbUM7QUFDMUMsV0FBTyxRQUFBLENBQUEsU0FBQSxDQUFVLGdCQUFWLENBQVA7QUFDSCxHQU5TO0FBT1YsRUFBQSxXQUFXLEVBQUUsdUJBQUE7QUFDVCxJQUFBLE9BQU8sQ0FBQyxnQkFBUixHQUEyQixPQUEzQixDQUFtQyxVQUFVLE1BQVYsRUFBZ0IsQ0FFbEQsQ0FGRDtBQUdIO0FBWFMsQ0FBZDs7OztBQ1JBOzs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsY0FBVCxDQUF3QixNQUF4QixFQUErQyxPQUEvQyxFQUFxRTtBQUNqRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBUCxDQUFXLElBQVgsRUFBaUIsUUFBakIsRUFBcEI7QUFDQSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsUUFBUixFQUFsQjs7QUFDQSxPQUFLLElBQUksQ0FBQyxHQUFHLENBQWIsRUFBZ0IsQ0FBQyxHQUFHLFNBQXBCLEVBQStCLENBQUMsRUFBaEMsRUFBb0M7QUFDaEMsUUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQVIsQ0FBWSxJQUFJLENBQUMsR0FBRyxHQUFwQixFQUF5QixPQUF6QixFQUFsQjs7QUFDQSxRQUFJLFNBQVMsS0FBSyxJQUFsQixFQUF3QjtBQUNwQixVQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBUixDQUFZLElBQUksQ0FBQyxHQUFHLEdBQVIsR0FBYyxDQUExQixFQUE2QixRQUE3QixFQUFuQjs7QUFDQSxVQUFJLFdBQVcsS0FBSyxVQUFwQixFQUFnQztBQUM1QixlQUFPLElBQVA7QUFDSDtBQUNKO0FBQ0o7O0FBQ0QsU0FBTyxLQUFQO0FBQ0g7O0FBR0QsU0FBUyxpQkFBVCxDQUEyQixNQUEzQixFQUFrRCxVQUFsRCxFQUE2RSxTQUE3RSxFQUFxRztBQUNqRyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBUCxDQUFXLElBQVgsRUFBaUIsUUFBakIsRUFBakI7QUFFQSxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFELEVBQVMsVUFBVCxFQUFxQixTQUFyQixDQUFyQzs7QUFDQSxNQUFJLENBQUMsWUFBTCxFQUFtQjtBQUNmLFdBQU8sUUFBUDtBQUNIOztBQUVELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxZQUFELEVBQWUsVUFBZixFQUEyQixTQUEzQixDQUE3Qjs7QUFDQSxNQUFJLENBQUMsUUFBTCxFQUFlO0FBQ1gsV0FBTyxRQUFQO0FBQ0g7O0FBRUQsU0FBTyxRQUFRLENBQUMsR0FBVCxDQUFhLE1BQWIsRUFBcUIsT0FBckIsRUFBUDtBQUNIOztBQUVELFNBQVMsZ0JBQVQsQ0FBMEIsTUFBMUIsRUFBaUQsVUFBakQsRUFBNEUsU0FBNUUsRUFBb0c7QUFDaEcsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQVAsQ0FBVyxJQUFYLEVBQWlCLFFBQWpCLEVBQXBCOztBQUNBLE1BQUksV0FBVyxLQUFLLENBQXBCLEVBQXVCO0FBQ25CLFdBQU8sSUFBUDtBQUNIOztBQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFQLENBQVcsV0FBWCxDQUFyQjs7QUFDQSxNQUFJLFlBQVksR0FBRyxVQUFmLElBQTZCLFlBQVksR0FBRyxTQUFoRCxFQUEyRDtBQUN2RCxXQUFPLElBQVA7QUFDSDs7QUFFRCxTQUFPLFlBQVA7QUFDSDs7QUFFRCxTQUFTLFlBQVQsQ0FBc0IsSUFBdEIsRUFBMkMsVUFBM0MsRUFBc0UsU0FBdEUsRUFBOEY7QUFDMUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQUwsRUFBbEI7O0FBQ0EsTUFBSSxTQUFTLEdBQUcsQ0FBWixJQUFpQixTQUFTLEdBQUcsRUFBakMsRUFBcUM7QUFDakMsV0FBTyxJQUFQO0FBQ0g7O0FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUwsQ0FBUyxTQUFTLEdBQUcsR0FBWixHQUFrQixDQUEzQixDQUFqQjs7QUFDQSxNQUFJLFFBQVEsR0FBRyxVQUFYLElBQXlCLFFBQVEsR0FBRyxTQUF4QyxFQUFtRDtBQUMvQyxXQUFPLElBQVA7QUFDSDs7QUFFRCxTQUFPLFFBQVA7QUFDSDs7QUFFRCxTQUFTLE1BQVQsQ0FBZ0IsTUFBaEIsRUFBdUMsS0FBdkMsRUFBNEQsa0JBQTVELEVBQXVGO0FBRW5GLE1BQUksS0FBSyxJQUFJLElBQWIsRUFBbUI7QUFDZixRQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBTixDQUFXLEdBQVgsQ0FBZSxLQUFLLENBQUMsSUFBckIsQ0FBaEIsQ0FEZSxDQUVmOztBQUNBLFFBQUksTUFBTSxDQUFDLEdBQVAsQ0FBVyxJQUFYLElBQW1CLFNBQXZCLEVBQWtDO0FBQzlCLGFBQU8sS0FBUDtBQUNIOztBQUVELFFBQUksa0JBQUosRUFBd0I7QUFFcEIsVUFBSSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBRCxFQUFTLEtBQUssQ0FBQyxJQUFmLEVBQXFCLFNBQXJCLENBQW5DOztBQUNBLFVBQUksQ0FBQyxZQUFMLEVBQW1CO0FBQ2YsZUFBTyxLQUFQO0FBQ0g7O0FBRUQsVUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDLFlBQUQsRUFBZSxLQUFLLENBQUMsSUFBckIsRUFBMkIsU0FBM0IsQ0FBM0I7O0FBQ0EsVUFBSSxDQUFDLFFBQUwsRUFBZTtBQUNYLGVBQU8sS0FBUDtBQUNIOztBQUNELGFBQU8sY0FBYyxDQUFDLE1BQUQsRUFBUyxZQUFULENBQXJCO0FBQ0gsS0FaRCxNQVlPO0FBQ0gsYUFBTyxNQUFNLENBQUMsR0FBUCxDQUFXLElBQVgsRUFBaUIsUUFBakIsT0FBZ0MsSUFBdkM7QUFDSDtBQUNKOztBQUVELFNBQU8sS0FBUDtBQUVIOztBQUVELFNBQVMsY0FBVCxDQUF3QixNQUF4QixFQUErQyxRQUEvQyxFQUErRDtBQUMzRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBUCxDQUFXLElBQVgsRUFBaUIsUUFBakIsRUFBdkI7QUFDQSxTQUFPLGNBQWMsR0FBRyxRQUF4QjtBQUNIOztBQUVELFNBQWdCLFNBQWhCLENBQTBCLFVBQTFCLEVBQTZDO0FBQ3pDLE1BQU0sTUFBTSxHQUFRLEVBQXBCO0FBQ0EsRUFBQSxPQUFPLENBQUMsZUFBUixDQUF3QixLQUF4QixFQUErQixPQUEvQixDQUF1QyxVQUFVLEtBQVYsRUFBNkI7QUFDaEUsUUFBSTtBQUNBLE1BQUEsTUFBTSxDQUFDLFFBQVAsQ0FBZ0IsS0FBSyxDQUFDLElBQXRCLEVBQTRCLEtBQUssQ0FBQyxJQUFsQyxFQUF3Qyx5QkFBeEMsRUFBbUUsT0FBbkUsQ0FBMkUsVUFBVSxLQUFWLEVBQWU7QUFFdEYsWUFBSSxLQUFLLENBQUMsSUFBTixJQUFjLEtBQUssQ0FBQyxJQUFOLENBQVcsSUFBekIsS0FDSSxLQUFLLENBQUMsSUFBTixDQUFXLElBQVgsQ0FBZ0IsVUFBaEIsQ0FBMkIscUJBQTNCLEtBQ0EsS0FBSyxDQUFDLElBQU4sQ0FBVyxJQUFYLENBQWdCLFVBQWhCLENBQTJCLFVBQTNCLENBRkosQ0FBSixFQUVpRDtBQUM3QztBQUNIOztBQUVELFlBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFQLEVBQWdCLEtBQWhCLEVBQXVCLEtBQXZCLENBQVYsRUFBeUM7QUFDckMsY0FBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQVAsRUFBZ0IsS0FBSyxDQUFDLElBQXRCLEVBQTRCLEtBQUssQ0FBQyxJQUFOLENBQVcsR0FBWCxDQUFlLEtBQUssQ0FBQyxJQUFyQixDQUE1QixDQUFsQztBQUNBLFVBQUEsTUFBTSxDQUFDLElBQVAsQ0FBWTtBQUNSLG9CQUFRLEtBQUssQ0FBQyxPQUROO0FBRVIsb0JBQVE7QUFGQSxXQUFaO0FBS0EsY0FBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQU4sR0FBYSxLQUFLLENBQUMsT0FBTixDQUFjLEdBQWQsQ0FBa0IsS0FBSyxDQUFDLElBQXhCLEVBQThCLE9BQTlCLEVBQTlCOztBQUNBLGNBQUksVUFBVSxJQUFJLFFBQVEsSUFBSSxRQUE5QixFQUF3QztBQUNwQyxZQUFBLE1BQU0sQ0FBQyxJQUFQLENBQVk7QUFDUixzQkFBUSxLQUFLLENBQUMsT0FETjtBQUVSLHNCQUFRO0FBRkEsYUFBWjtBQUlIO0FBQ0o7QUFDSixPQXZCRDs7QUF5QkEsVUFBSSxVQUFKLEVBQWdCO0FBQ1osUUFBQSxNQUFNLENBQUMsUUFBUCxDQUFnQixLQUFLLENBQUMsSUFBdEIsRUFBNEIsS0FBSyxDQUFDLElBQWxDLEVBQXdDLGFBQXhDLEVBQXVELE9BQXZELENBQStELFVBQVUsS0FBVixFQUFlO0FBQzFFLGNBQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFOLENBQWMsR0FBZCxDQUFrQixJQUFsQixDQUFqQjs7QUFDQSxjQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBckIsRUFBMkI7QUFDdkI7QUFDSDs7QUFDRCxjQUFJLFFBQVEsQ0FBQyxXQUFULENBQXFCLENBQXJCLEtBQTJCLE9BQTNCLElBQXNDLE1BQU0sQ0FBQyxRQUFELEVBQVcsS0FBWCxFQUFrQixJQUFsQixDQUFoRCxFQUF5RTtBQUNyRSxnQkFBTSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsUUFBRCxFQUFXLEtBQUssQ0FBQyxJQUFqQixFQUF1QixLQUFLLENBQUMsSUFBTixDQUFXLEdBQVgsQ0FBZSxLQUFLLENBQUMsSUFBckIsQ0FBdkIsQ0FBdkM7O0FBQ0EsZ0JBQUksQ0FBQyxjQUFjLENBQUMsUUFBRCxFQUFXLGFBQVgsQ0FBbkIsRUFBOEM7QUFDMUM7QUFDSDs7QUFDRCxZQUFBLE1BQU0sQ0FBQyxJQUFQLENBQVk7QUFDUixzQkFBUSxRQURBO0FBRVIsc0JBQVE7QUFGQSxhQUFaO0FBSUEsZ0JBQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFOLEdBQWEsUUFBUSxDQUFDLEdBQVQsQ0FBYSxLQUFLLENBQUMsSUFBbkIsRUFBeUIsT0FBekIsRUFBOUI7O0FBQ0EsZ0JBQUksUUFBUSxJQUFJLGFBQWhCLEVBQStCO0FBQzNCLGNBQUEsTUFBTSxDQUFDLElBQVAsQ0FBWTtBQUNSLHdCQUFRLEtBQUssQ0FBQyxPQUROO0FBRVIsd0JBQVE7QUFGQSxlQUFaO0FBSUg7QUFDSjtBQUNKLFNBdEJEO0FBdUJILE9BeEJELE1Bd0JPO0FBQ0gsWUFBSSxLQUFLLENBQUMsSUFBTixDQUFXLFdBQVgsQ0FBdUIsQ0FBdkIsS0FBNkIsT0FBN0IsSUFBd0MsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFQLEVBQWEsS0FBYixFQUFvQixJQUFwQixDQUFsRCxFQUE2RTtBQUN6RSxjQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBUCxFQUFhLEtBQUssQ0FBQyxJQUFuQixFQUF5QixLQUFLLENBQUMsSUFBTixDQUFXLEdBQVgsQ0FBZSxLQUFLLENBQUMsSUFBckIsQ0FBekIsQ0FBdkM7QUFDQSxVQUFBLE1BQU0sQ0FBQyxJQUFQLENBQVk7QUFDUixvQkFBUSxLQUFLLENBQUMsSUFETjtBQUVSLG9CQUFRO0FBRkEsV0FBWjtBQUlIO0FBQ0o7QUFFSixLQTVERCxDQTRERSxPQUFPLENBQVAsRUFBVSxDQUNYO0FBQ0osR0EvREQ7QUFpRUEsU0FBTyxNQUFQO0FBQ0g7O0FBcEVELE9BQUEsQ0FBQSxTQUFBLEdBQUEsU0FBQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIn0=
diff --git a/frida_dexdump/banner.py b/frida_dexdump/banner.py
new file mode 100644
index 0000000..19ef490
--- /dev/null
+++ b/frida_dexdump/banner.py
@@ -0,0 +1,55 @@
+# Author: hluwa
+# HomePage: https://github.com/hluwa
+# CreateTime: 2021/6/3
+import logging
+import random
+
+try:
+ from shutil import get_terminal_size as get_terminal_size
+except:
+ try:
+ from backports.shutil_get_terminal_size import get_terminal_size as get_terminal_size
+ except:
+ pass
+try:
+ import click
+except:
+ class click:
+ @staticmethod
+ def secho(message=None, **kwargs):
+ print(message)
+
+ @staticmethod
+ def style(**kwargs):
+ raise Exception("unsupported style")
+
+banner = """
+---------------------------------------------------------------------------
+ __ _ _ _ _
+ / _|_ __(_) __| | __ _ __| | _____ ____| |_ _ _ __ ___ _ __
+ | |_| '__| |/ _` |/ _` |_____ / _` |/ _ \ \/ / _` | | | | '_ ` _ \| '_ \
+ | _| | | | (_| | (_| |_____| (_| | __/> < (_| | |_| | | | | | | |_) |
+ |_| |_| |_|\__,_|\__,_| \__,_|\___/_/\_\__,_|\__,_|_| |_| |_| .__/
+ |_|
+ https://github.com/hluwa/frida-dexdump
+---------------------------------------------------------------------------\n
+"""
+
+
+def show_banner():
+ colors = ['bright_red', 'bright_green', 'bright_blue', 'cyan', 'magenta']
+ try:
+ click.style('color test', fg='bright_red')
+ except:
+ colors = ['red', 'green', 'blue', 'cyan', 'magenta']
+ try:
+ columns = get_terminal_size().columns
+ if columns >= len(banner.splitlines()[1]):
+ for line in banner.splitlines():
+ if line:
+ fill = int((columns - len(line)) / 2 - 1)
+ line = line[0] * fill + line
+ line += line[-1] * fill
+ click.secho(line, fg=random.choice(colors))
+ except:
+ logging.exception("")
diff --git a/frida_dexdump/main.py b/frida_dexdump/main.py
deleted file mode 100644
index 5dcd307..0000000
--- a/frida_dexdump/main.py
+++ /dev/null
@@ -1,314 +0,0 @@
-# Author: hluwa
-# HomePage: https://github.com/hluwa
-# CreatedTime: 2020/1/7 20:57
-import hashlib
-import os
-import random
-import sys
-import getopt
-import time
-import frida
-import logging
-import traceback
-
-try:
- from shutil import get_terminal_size as get_terminal_size
-except:
- try:
- from backports.shutil_get_terminal_size import get_terminal_size as get_terminal_size
- except:
- pass
-try:
- import click
-except:
- class click:
-
- @staticmethod
- def secho(message=None, **kwargs):
- print(message)
-
- @staticmethod
- def style(**kwargs):
- raise Exception("unsupported style")
-
-logging.basicConfig(level=logging.INFO,
- format="%(asctime)s %(levelname)s %(message)s",
- datefmt='%m-%d/%H:%M:%S')
-
-banner = """
-----------------------------------------------------------------------------------------
- ____________ ___________ ___ ______ _______ _______
- | ___| ___ \_ _| _ \/ _ \ | _ \ ___\ \ / / _ \
- | |_ | |_/ / | | | | | / /_\ \______| | | | |__ \ V /| | | |_ _ _ __ ___ _ __
- | _| | / | | | | | | _ |______| | | | __| / \| | | | | | | '_ ` _ \| '_ \
- | | | |\ \ _| |_| |/ /| | | | | |/ /| |___/ /^\ \ |/ /| |_| | | | | | | |_) |
- \_| \_| \_|\___/|___/ \_| |_/ |___/ \____/\/ \/___/ \__,_|_| |_| |_| .__/
- | |
- |_|
- https://github.com/hluwa/FRIDA-DEXDump
-----------------------------------------------------------------------------------------\n
-"""
-
-md5 = lambda bs: hashlib.md5(bs).hexdigest()
-
-
-def dex_fix(dex_bytes):
- import struct
- dex_size = len(dex_bytes)
-
- if dex_bytes[:4] != b"dex\n":
- dex_bytes = b"dex\n035\x00" + dex_bytes[8:]
-
- if dex_size >= 0x24:
- dex_bytes = dex_bytes[:0x20] + struct.Struct("= 0x28:
- dex_bytes = dex_bytes[:0x24] + struct.Struct("= 0x2C and dex_bytes[0x28:0x2C] not in [b'\x78\x56\x34\x12', b'\x12\x34\x56\x78']:
- dex_bytes = dex_bytes[:0x28] + b'\x78\x56\x34\x12' + dex_bytes[0x2C:]
-
- return dex_bytes
-
-
-def show_banner():
- colors = ['bright_red', 'bright_green', 'bright_blue', 'cyan', 'magenta']
- try:
- click.style('color test', fg='bright_red')
- except:
- colors = ['red', 'green', 'blue', 'cyan', 'magenta']
- try:
- columns = get_terminal_size().columns
- if columns >= len(banner.splitlines()[1]):
- for line in banner.splitlines():
- if line:
- fill = int((columns - len(line)) / 2)
- line = line[0] * fill + line
- line += line[-1] * fill
- click.secho(line, fg=random.choice(colors))
- except:
- pass
-
-
-def get_all_process(device, pkgname):
- return [process for process in device.enumerate_processes() if pkgname in process.name]
-
-
-def search(api):
- """
- """
-
- matches = api.scandex()
- for info in matches:
- click.secho("[DEXDump] Found: DexAddr={}, DexSize={}"
- .format(info['addr'], hex(info['size'])), fg='green')
- return matches
-
-
-def dump(pkg_name, api, mds=None):
- """
- """
- if mds is None:
- mds = []
- matches = api.scandex()
- for info in matches:
- try:
- bs = api.memorydump(info['addr'], info['size'])
- md = md5(bs)
- if md in mds:
- click.secho("[DEXDump]: Skip duplicate dex {}<{}>".format(info['addr'], md), fg="blue")
- continue
- mds.append(md)
- if not os.path.exists("./" + pkg_name + "/"):
- os.mkdir("./" + pkg_name + "/")
- bs = dex_fix(bs)
- with open(pkg_name + "/" + info['addr'] + ".dex", 'wb') as out:
- out.write(bs)
- click.secho("[DEXDump]: DexSize={}, DexMd5={}, SavePath={}/{}/{}.dex"
- .format(hex(info['size']), md, os.getcwd(), pkg_name, info['addr']), fg='green')
- except Exception as e:
- click.secho("[Except] - {}: {}".format(e, info), bg='yellow')
-
-
-def stop_other(pid, processes, is_emulator):
- try:
- for process in processes:
- if process.pid == pid:
- if is_emulator:
- os.system("adb shell \"su 0 kill -18 {}\"".format(process.pid))
- else :
- os.system("adb shell \"su -c 'kill -18 {}'\"".format(process.pid))
- else:
- if is_emulator:
- os.system("adb shell \"su 0 kill -19 {}\"".format(process.pid))
- else:
- os.system("adb shell \"su -c 'kill -19 {}'\"".format(process.pid))
- except:
- pass
-
-
-def choose(pid=None, pkg=None, spawn=False, device=None):
- if pid is None and pkg is None:
- target = device.get_frontmost_application()
- return target.pid, target.identifier
-
- for process in device.enumerate_processes():
- if (pid and process.pid == pid) or (pkg and process.name == pkg):
- if not spawn:
- return process.pid, process.name
- else:
- pkg = process.name
- break
-
- if pkg and spawn and device:
- pid = device.spawn(pkg)
- device.resume(pid)
- return pid, pkg
- raise Exception("Cannot found <{}> process".format(pid))
-
-
-def show_help():
- help_str = "Usage: frida-dexdump -n -p -f[enable spawn mode] -s -d[enable deep search] -P -A \n\n" \
- " -n: [Optional] Specify target process name, when spawn mode, it requires an application package name. If not specified, use frontmost application.\n" \
- " -p: [Optional] Specify pid when multiprocess. If not specified, dump all.\n" \
- " -f: [Optional] Use spawn mode, default is disable.\n" \
- " -s: [Optional] When spawn mode, start dump work after sleep few seconds. default is 10s.\n" \
- " -d: [Optional] Enable deep search maybe detected more dex, but speed will be slower.\n" \
- " -P: [Optional] Prepend a Frida script to run before dexdump does.\n" \
- " -A: [Optional] Append a Frida script to run after dexdump done.\n" \
- " -E: [Optional] Changes 'su -c cmd' to 'su 0 cmd' for emulators.\n" \
- " -h: show help.\n"
- print(help_str)
-
-
-def connect_device(timeout=15):
- try:
- device = frida.get_usb_device(timeout=timeout)
- except:
- device = frida.get_remote_device()
-
- return device
-
-
-def entry():
- show_banner()
-
- process = None
- pid = None
- enable_spawn_mode = False
- delay_second = 10
- enable_deep_search = False
- prepend_script_path = None
- append_script_path = None
- enable_emulator_mode = False
-
- try:
- opts, args = getopt.getopt(sys.argv[1:], "hn:p:fEs:dP:A:")
-
- def arg2int(v):
- try:
- return int(v)
- except:
- return int(v.replace('0x', ''), 16)
-
- for arg, value in opts:
- if arg == '-n':
- process = value
- elif arg == '-p':
- pid = arg2int(value)
- elif arg == '-f':
- enable_spawn_mode = True
- elif arg == '-s':
- delay_second = arg2int(value)
- elif arg == "-d":
- enable_deep_search = True
- elif arg == "-P":
- prepend_script_path = value
- elif arg == "-A":
- append_script_path = value
- elif arg == '-h':
- show_help()
- exit(0)
- elif arg == '-E':
- enable_emulator_mode = True
-
- except getopt.GetoptError:
- show_help()
- exit(2)
-
- if enable_spawn_mode and pid is not None:
- pid = None
-
- def forward_frida():
- os.system("adb forward tcp:27042 tcp:27042")
- os.system("adb forward tcp:27043 tcp:27043")
-
- try:
- device = connect_device()
- if not device:
- raise Exception("Unable to connect.")
- except:
- forward_frida()
- device = connect_device()
-
- if not device:
- click.secho("[Except] - Unable to connect to device.", bg='red')
- exit()
-
- pname = None
- try:
- _, pname = choose(device=device, pkg=process, pid=pid, spawn=enable_spawn_mode)
- if enable_spawn_mode:
- logging.info("[DEXDump]: sleep {}s".format(delay_second))
- time.sleep(delay_second)
- except Exception as e:
- click.secho("[Except] - Unable to inject into process: {} in \n{}".format(e, traceback.format_tb(
- sys.exc_info()[2])[-1]), bg='red')
- exit()
-
- processes = get_all_process(device, pname)
- mds = []
- for process in processes:
-
- if pid is not None and process.pid != pid:
- continue
-
- logging.info("[DEXDump]: found target [{}] {}".format(process.pid, process.name))
- stop_other(process.pid, processes, enable_emulator_mode)
-
- try:
- session = device.attach(process.pid)
-
- # same as jnitrace: https://github.com/chame1eon/jnitrace/blob/27d3ffec9b56d1cad7ccfb78572e076ce04461a2/jnitrace/jnitrace.py#L495-L498
- if prepend_script_path:
- prepend_script = session.create_script(open(prepend_script_path).read())
- prepend_script.load()
-
- path = os.path.dirname(__file__)
- script = session.create_script(open(os.path.join(path, "agent.js")).read())
- script.load()
-
- if enable_deep_search:
- script.exports.switchmode(True)
- logging.info("[DEXDump]: deep search mode is enable, maybe wait long time.")
-
- dump(pname, script.exports, mds=mds)
-
- if append_script_path:
- append_script = session.create_script(open(append_script_path).read())
- append_script.load()
-
- if prepend_script_path: prepend_script.unload()
- script.unload()
- if append_script_path: append_script.unload()
-
- session.detach()
- except Exception as e:
- click.secho("[Except] - Unable dump dex: {} in \n{}".format(e, traceback.format_tb(
- sys.exc_info()[2])[-1]), bg='red')
- continue
- exit()
-
-
-if __name__ == "__main__":
- entry()
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..af2db33
--- /dev/null
+++ b/makefile
@@ -0,0 +1,8 @@
+all: package
+
+frida_dexdump/agent/agent.js: agent/src/index.ts agent/src/search.ts
+
+ cd agent; npm install; npm run build
+
+package: frida_dexdump/agent/agent.js
+ python3 setup.py sdist bdist_wheel
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 89437f6..da0ffa7 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,3 @@
click
-frida
-backports.shutil-get-terminal-size
\ No newline at end of file
+frida-tools
+wallbreaker
\ No newline at end of file
diff --git a/screenshot.png b/screenshot.png
index babe8df..eb45875 100644
Binary files a/screenshot.png and b/screenshot.png differ
diff --git a/setup.py b/setup.py
index fe2b4fa..bafc78c 100644
--- a/setup.py
+++ b/setup.py
@@ -1,26 +1,22 @@
# Author: hluwa
# HomePage: https://github.com/hluwa
-# CreatedTime: 8/14/20 23:05
+# CreateTime: 2021/6/3
import setuptools
-with open("README.md", "r") as fh:
- long_description = fh.read()
-
setuptools.setup(
name="frida-dexdump",
- version="1.0.3",
- description="Fast dex dump in memory based on frida.",
- long_description=long_description,
- long_description_content_type="text/markdown",
+ version="2.0.0",
+ description="Useful and fast android unpacker",
author="hluwa",
author_email="hluwa888@gmail.com",
- url="https://github.com/hluwa/FRIDA-DEXDump",
+ url="https://github.com/hluwa/frida-dexdump",
install_requires=[
- "frida",
- "click"
+ "click",
+ "frida-tools",
+ "wallbreaker"
],
- keywords="frida android unpack dex dynamic",
+ keywords="frida android dexdump unpacker wallbreaker",
classifiers=[
"Development Status :: 5 - Production/Stable",
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
@@ -33,15 +29,15 @@
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
- "Programming Language :: JavaScript",
+ "Programming Language :: Python :: 3.9",
],
- packages=["frida_dexdump"],
+ packages=setuptools.find_packages(where='.', exclude=(), include=('*',)),
package_data={
- "frida_dexdump": ["agent.js"],
+ "frida_dexdump.agent": ["agent.js"]
},
entry_points={
'console_scripts': [
- "frida-dexdump = frida_dexdump.main:entry"
+ "frida-dexdump = frida_dexdump.__main__:main",
]
}
)