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", ] } )