Sintaxis de ASM PE de 64 bits de la plantilla EXE personalizada

4

Lo pregunté anteriormente y luego lo eliminé, ya que creo que hice la pregunta sin orientarla hacia msfvenom y las plantillas EXE personalizadas.

Hay un Windows PE de 64 bits escrito en ensamblador que se envía con Metasploit que estoy tratando de compilar en un EXE y usar como una plantilla personalizada para msfvenom. ¿Cómo compilo / vinculo / incluyo Windows DLL en Kali? Tengo instalado Mingw.

He intentado esto:

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

Luego intenté enlazar con Mingw como:

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

¿Cómo obtengo el archivo asm para compilar / enlazar? Creo que falta una ruta a kernel32.dll y no estoy seguro de la sintaxis .

Ambos dan errores. De la pregunta anterior, entiendo que necesito decirle a Mingw / gcc dónde están las ventanas DLL o 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'

Archivo de ensamblaje original que se utilizó para crear la ejecución portátil de Windows de 64 bits.

; Author: Stephen Fewer (stephen_fewer[at]harmonysecurity[dot]com)
; Architecture: x64
;
; Assemble and link with the following command:
; "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

Una vez más, sé que pregunté esto antes (ahora eliminado) pero esta es una pregunta excelente para las personas que desean editar el PE ASM para crear plantillas EXE personalizadas con msfvenom. Espero haber formulado esta pregunta mejor.

    
pregunta user9225381 17.01.2018 - 05:05
fuente

1 respuesta

0

Lamentablemente, no existe un único estándar para los archivos en lenguaje ensamblador.  (Si bien las instrucciones son obviamente parte de ISA, la sintaxis específica de los archivos y particularmente las características como extrn son específicas para cada ensamblador.) Para compilar esto en linux, necesitaría ajustar la sintaxis de la fuente del ensamblaje para Utilice la sintaxis nasm o gas. El archivo existente está diseñado para MASM (el ensamblador de Microsoft).

    
respondido por el David 17.01.2018 - 05:21
fuente

Lea otras preguntas en las etiquetas