Настраиваемый EXE шаблон Metasploit 64-битный ASM PE синтаксис

Вопрос или проблема

Я спрашивал это ранее, но удалил, так как, думаю, задал вопрос без привязки к msfvenom и пользовательским шаблонам EXE.

Существует 64-битный Windows PE, написанный на ассемблере, который идет вместе с Metasploit, и я пытаюсь скомпилировать его в EXE и использовать в качестве пользовательского шаблона для msfvenom. Как мне скомпилировать/связать/включить windows DLL в Kali? У меня установлен Mingw.

Я пробовал следующее:

nasm -fwin64 -o 64exetemplate.o 64exetemplate.nasm

Затем попытался связать с Mingw так:

86_64-w64-mingw32-ld -o 64exetemplate.exe 64exetemplate.o

Как мне заставить ассемблер компилироваться/связываться? Я думаю, что отсутствует путь к kernel32.dll, и я не уверен в синтаксисе.

Оба варианта выдают ошибки. Из предыдущего вопроса я понимаю, что мне нужно сказать Mingw/gcc, где находятся windows DLL или kernel32.dll?

root@box:/ nasm -f win64 64exetemplate.asm -o tiny.o
64exetemplate.asm:7: error: parser: instruction expected
64exetemplate.asm:8: error: symbol `extrn' redefined
64exetemplate.asm:8: error: parser: instruction expected
64exetemplate.asm:12: error: parser: instruction expected
64exetemplate.asm:26: error: symbol `main' redefined
64exetemplate.asm:26: error: parser: instruction expected
64exetemplate.asm:28: error: parser: instruction expected
64exetemplate.asm:29: error: parser: instruction expected
64exetemplate.asm:30: error: comma expected after operand 1
64exetemplate.asm:31: error: symbol `payload' redefined
64exetemplate.asm:31: error: parser: instruction expected

root@box:/ x86_64-w64-mingw32-ld -o 64exetemplate.exe 64exetemplate.o 
64exetemplate.o:(.text+0x1d): undefined reference to `VirtualAlloc'
64exetemplate.o:(.text+0x3d): undefined reference to `ExitProcess'

Исходный файл ассемблера, который был использован для создания 64-битного Windows portable execution.

; Автор: Стивен Фьюэр (stephen_fewer[at]harmonysecurity[dot]com)
; Архитектура: x64
;
; Соберите и свяжите с помощью следующей команды:
; "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\x86_amd64\ml64" template_x64_windows.asm /link /su$

extrn ExitProcess : proc
extrn VirtualAlloc : proc

.code

        main proc
                sub rsp, 40        ;
                mov r9, 40h        ;
                mov r8, 3000h      ;
                mov rdx, 4096      ;
                xor rcx, rcx       ;
                call VirtualAlloc  ; lpPayload = VirtualAlloc( NULL, 4096, MEM_COMMIT | MEM_RESERVE, PAGE$
                mov rcx, 4096      ;
                mov rsi, payload   ;
                mov rdi, rax       ;
                rep movsb          ; memcpy( lpPayload, payload, 4096 );
                call rax           ; lpPayload();
 xor rcx, rcx       ;
                call ExitProcess   ; ExitProcess( 0 );
        main endp

        payload proc
                A byte 'PAYLOAD:'
                B db 4096-8 dup ( 0 )
        payload endp
end

Еще раз, я знаю, что задавал это раньше (теперь удалено), но это отличный вопрос для людей, желающих редактировать PE ASM для создания пользовательских шаблонов EXE с msfvenom. Я надеюсь, что я лучше сформулировал этот вопрос.

К сожалению, не существует единого стандарта для файлов на ассемблере.
(Хотя инструкции очевидно являются частью ISA, конкретный синтаксис файлов и, в частности, такие возможности, как extrn, специфичны для каждого assembler.) Для компиляции этого в Linux вам нужно будет настроить синтаксис исходного кода ассемблера для использования синтаксиса nasm или gas. Существующий файл предназначен для MASM (Microsoft Assembler).

ml64 template_x64_windows.asm /link /subsystem:windows /defaultlib:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64\kernel32.lib" /entry:main. 

Эта команда создает объектный файл из шаблона asm, а затем компилирует его в exe. 6/12/2023

Ответ или решение

Чтобы создать пользовательский шаблон EXE для msfvenom на основе ассемблера, требующего компиляции для 64-битной версии Windows, вам необходимо сначала убедиться, что ваш код соответствует синтаксису ассемблера NASM, так как ваш исходный файл написан для MASM (Microsoft Assembler). Давайте разберем процесс пошагово.

1. Подготовка кода

Ваш оригинальный код использует синтаксис MASM, который отличается от синтаксиса NASM. Необходимо выполнить следующие изменения:

  • Замените proc и endp на global и section .text для определения процедур.
  • Замените директиву extrn на global для внешних процедур, таких как ExitProcess и VirtualAlloc.

Вот пример адаптированного кода:

section .text
    global main
    extern ExitProcess
    extern VirtualAlloc

main:
    sub rsp, 40
    mov r9, 40h
    mov r8, 3000h
    mov rdx, 4096
    xor rcx, rcx
    call VirtualAlloc  ; lpPayload = VirtualAlloc(NULL, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    mov rcx, 4096
    mov rsi, payload
    mov rdi, rax
    rep movsb          ; memcpy(lpPayload, payload, 4096);
    call rax           ; lpPayload();
    xor rcx, rcx
    call ExitProcess   ; ExitProcess(0);

section .data
payload:
    db 'PAYLOAD:', 4096 - 8 dup (0)

2. Компиляция и линковка

Теперь, когда ваш код адаптирован для NASM, вы можете перейти к компиляции и линковке. Убедитесь, что вы используете правильные флаги для NASM и ld. Выполните следующие команды:

nasm -f win64 -o 64exetemplate.o 64exetemplate.asm

Следующий шаг – линковка. Для этого используйте gcc для создания EXE и указания нужных библиотек, таких как kernel32.lib. Чтобы указать пути к библиотекам и необходимым DLL, выполните команду:

x86_64-w64-mingw32-gcc -o 64exetemplate.exe 64exetemplate.o -lkernel32 -luser32

3. Устранение ошибок

Если по-прежнему возникают ошибки, например, "undefined reference to ‘VirtualAlloc’", это может указывать на необходимость добавления путей к .lib файлам или других библиотек в вашу команду линковки. Убедитесь, что вы установили mingw-w64:

apt-get install mingw-w64

И проверьте, что пути к библиотекам установлены правильно. Вы можете искать kernel32.dll и другие необходимые библиотеки и указывать их с помощью флага -L для gcc, если они расположены в нестандартных директориях.

Заключение

Создание пользовательских EXE шаблонов для msfvenom требует знание структуры Portable Executable (PE) и правильной конфигурации ассемблера. Понимание различий между синтаксисами MASM и NASM, а также правильное указание библиотек, являются ключевыми факторами в успешной компиляции и линковке вашего кода. Если у вас появятся дополнительные вопросы в процессе, рассматривайте сообщество Metasploit и документацию, так как это может существенно облегчить процесс.

Оцените материал
Добавить комментарий

Капча загружается...