web-dev-qa-db-ja.com

カスタムEXEテンプレートMetasploit 64ビットASM PE構文

MsfvenomとカスタムEXEテンプレートを対象にせずに質問したと思うので、以前これを尋ねてから削除しました。

アセンブリで記述された64ビットWindows PEがあり、これはMetasploitに同梱されており、EXEにコンパイルしてmsfvenomのカスタムテンプレートとして使用しようとしています。ウィンドウをコンパイル/リンク/インクルードする方法DLL Kaliで?Mingwをインストールしました。

私はこれを試しました:

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

それからMingwとのリンクを試みました:

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

Asmをコンパイル/リンクするにはどうすればよいですか? kernel32.dllへのパスが欠落していると思います構文はわかりません。

どちらもエラーになります。前の質問から、windows DLLまたはkernel32.dllがどこにあるのかをMingw/gccに伝える必要があることを理解していますか?

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テンプレートを作成したい人への質問です。私はこの質問をよりよく組み立てることを望みます。

5
user9225381

残念ながら、アセンブリ言語ファイルの単一の標準は存在しません。 (命令は明らかにISAの一部ですが、ファイルの特定の構文、特にextrnのような機能は各アセンブラに固有です。)これをLinuxでコンパイルするには、構文の構文を調整する必要があります。 nasmまたはgas構文を使用するためのアセンブリソース。既存のファイルはMASM(Microsoftアセンブラー)用に設計されています。

1
David