自定义 EXE 模板 Metasploit 64 位 ASM PE 语法

信息安全 元数据 部件 海合会 毒液
2021-08-16 06:20:15

我之前问过这个然后删除了,因为我认为我问的问题没有针对 msfvenom 和自定义 EXE 模板。

有一个用 Metasploit 附带的程序集编写的 64 位 Windows PE,我正在尝试将其编译为 EXE 并用作 msfvenom 的自定义模板。如何在 Kali 中编译/链接/包含 windows DLL?我已经安装了Mingw。

我试过这个:

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

然后尝试与 Mingw 链接,例如:

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

如何让 asm 编译/链接?我认为缺少 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 可移植执行的原始程序集文件。

; 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

同样,我知道我之前问过这个问题(现在已删除),但对于想要编辑 PE ASM 以使用 msfvenom 创建自定义 EXE 模板的人来说,这是一个很好的问题。我希望我能更好地提出这个问题。

1个回答

不幸的是,汇编语言文件不存在单一标准。(虽然这些指令显然是 ISA 的一部分,但文件的特定语法,尤其是类似的特性extrn是特定于每个汇编器的。)要在 linux 上编译它,您需要调整汇编源的语法以使用 nasm 或气体语法。现有文件是为 MASM(Microsoft 汇编程序)设计的。