ethical.blue Magazine

// Cybersecurity clarified.

Łatwe debugowanie kodu powłoki dla Windows x64/x86

23.05.2022   Dawid Farbaniec
...
Kod wstrzykiwany nazywany kodem powłoki (ang. shellcode) jest niezależny od miejsca w pamięci. W czasopiśmie ethical.blue opisano jak tworzyć taki kod dla systemów Windows opartych na architekturze x86-64 (lub w skrócie x64) tutaj: Kod powłoki dla Windows x86-64 (x64).

Tak jak pentesterzy, czerwone zespoły i threat actors piszą kody typu shellcode, tak analitycy malware, niebieskie zespoły i inni odpowiedzialni za cyberbezpieczeństwo często takie kody analizują pod debuggerem.

Rozwiązanie BytesLauncher to podręczna aplikacja, która pozwoli łatwo uruchomić pod debuggerem kod powłoki dla Windows x64 oraz starszej architektury 32-bitowej (x86). Rozwiązanie powstało podczas napotkania shellcode w próbce złośliwego oprogramowania.

BytesLauncher dla Windows x64

Program powstał w Asemblerze MASM x64 i do jego zbudowania można użyć Visual Studio. Samouczek tutaj: Projekt w języku Asembler x64 dla Visual Studio 2022.

extrn ExitProcess : proc

extrn VirtualProtect : proc
extrn CreateFileA : proc
extrn ReadFile : proc
extrn CloseHandle : proc

.const
    GENERIC_READ equ 080000000h
    OPEN_EXISTING equ 03h

.data
    payload db 2048 dup (90h) ;change size if you need
    oldProtect dword 0
    dwReadWritten dword 0
    hFile dword 0
    szPath db "C:\Users\x\Desktop\dump1.bin", 0

.code
Main proc
    sub rsp, 40h
    mov qword ptr [rsp + 30h], 0
    mov qword ptr [rsp + 28h], 0
    mov qword ptr [rsp + 20h], OPEN_EXISTING
    xor r9, r9
    xor r8, r8
    mov rdx, GENERIC_READ
    mov rcx, offset szPath
    call CreateFileA
    add rsp, 40h

    mov hFile, eax

    sub rsp, 28h
    mov qword ptr [rsp + 20h], 0
    mov r9, offset dwReadWritten
    mov r8, sizeof payload
    mov rdx, offset payload
    mov ecx, hFile
    call ReadFile
    add rsp, 28h

    sub rsp, 28h
    mov ecx, hFile
    call CloseHandle
    add rsp, 28h

    sub rsp, 28h
    mov r10, sizeof payload
    sub rsp, 28h
    mov r9, offset oldProtect
    mov r8, 40h ;PAGE_EXECUTE_READWRITE
    mov rdx, r10
    mov rcx, offset payload
    call VirtualProtect
    add rsp, 28h

    sub rsp, 28h
    mov rax, offset payload
    call rax
    add rsp, 28h

    sub rsp, 28h
    xor rcx, rcx
    call ExitProcess
Main endp
end

BytesLauncher dla Windows x86 (legacy 32-bit)

Program powstał w Asemblerze MASM x86 (32-bit) i do jego zbudowania można użyć Visual Studio lub MASM32 SDK. Samouczek tutaj: Projekt w języku Asembler x64 dla Visual Studio 2022.

.686p

.model flat, stdcall
option casemap:none

ExitProcess proto stdcall :dword
VirtualProtect proto stdcall :dword,:dword,:dword,:dword
CreateFileA proto stdcall :dword, :dword, :dword, :dword, :dword, :dword, :dword
ReadFile proto stdcall :dword, :dword, :dword, :dword, :dword
CloseHandle proto stdcall :dword

.const
    GENERIC_READ equ 080000000h
    OPEN_EXISTING equ 03h

.data
    payload db 2048 dup (90h) ;change size if you need
    oldProtect dword 0
    dwReadWritten dword 0
    hFile dword 0
    szPath db "C:\Users\x\Desktop\dump1.bin", 0
.code
Main proc
    
    push 0
    push 0
    push OPEN_EXISTING
    push 0
    push 0
    push GENERIC_READ
    push offset szPath
    call CreateFileA

    mov hFile, eax

    push 0
    push offset dwReadWritten
    push sizeof payload
    push offset payload
    push eax
    call ReadFile

    push hFile
    call CloseHandle

    push offset oldProtect
    push 40h ;PAGE_EXECUTE_READWRITE
    push sizeof payload
    push offset payload
    call VirtualProtect

    mov eax, offset payload
    call eax ;execute payload bytes

    push 0
    call ExitProcess
Main endp
end

Wykaz literatury

https://github.com/ethicalblue/BytesLauncher [access: 2022-05-23]

ethical.blue Appz

Categories

Archives


Donate to ethical.blue Magazine website maintenance with cryptocurrency or PayPal.

aspnet
Connections: 21

bitcoin diesel