저는 StackOverflow를 처음 사용합니다. 최근에 저는 어셈블리를 연구하기 시작했고 어셈블리에 상당히 새롭습니다. 완전히 쉘 코드에 익숙하지 않았습니다. RadAsm을 사용하여 MASM 어셈블러를 사용하여 컴파일 중이며이 웹 사이트에서 쉘 코드를 시험해 보았습니다. Shellcoding for Linux and WindowsMASM 쉘 코드와 NASM 쉘 코드 사이에 차이가 있습니까?
Windows 64 비트에서 RadAsm을 사용하고 있습니다. 내가 사용한 코드는 DLL의 함수 주소가 아닌 함수의 절대 이름을 사용한다는 점을 제외하면 거의 동일합니다. 쉘 코드는 매개 변수 5000
과 함께 sleep 함수를 사용해야합니다.
이것은 MASM에서 사용하는 코드입니다.
.386
.model flat, stdcall
option casemap:none
include kernel32.inc
includelib kernel32.lib
.code
_start:
xor eax, eax ; zero out eax
mov ebx, Sleep ; function sleep goes in ebx
mov ax, 5000 ; parameter goes in ax
push eax ; parameter on stack
call ebx ; call Sleep
end _start
end
이 어셈블리는 MASM에서 오류없이 어셈블됩니다.
생성 된 쉘 코드는 null 값을 가지고 있으며 웹 사이트와 약간 다릅니다. 그것은 다음과 같습니다.
해체를 위해 objdump -d nameofexecutable.exe
을 사용했습니다.
Disassembly of section .text
00401000 <.text>:
401000: 33 c0 xor %eax,%eax
401002: bb 0e 10 40 00 mov $0x40100e,%
401007: 66 b8 88 13 mov $0x1388,%ax
40100b: 50 push %eax
40100c: ff d3 call *%ebx
40100e: ff 25 00 20 40 00 jmp *0x402000
그러나 웹 사이트에는 00
16 진수 코드가 없습니다.
Disassembly of section .text:
08048080 <_start>:
8048080: 31 c0 xor %eax,%eax
8048082: bb ea 1b e6 77 mov $0x77e61bea,%ebx
8048087: 66 b8 88 13 mov $0x1388,%ax
804808b: 50 push %eax
804808c: ff d3 call *%ebx
컴파일 할 때 x64를 사용하고 있거나 간접적으로 함수를 호출했기 때문에 그럴 수 있습니까?
도움을 주시면 감사하겠습니다. 감사합니다.
또한 MASM/NASM의 버전 차이가 원인 일 수 있습니다. –