Jestem nowy w StackOverflow. Niedawno zacząłem studiować montaż i jestem całkiem nowy w montażu, zupełnie nowy w shellcode. Używam RadAsm do kompilacji przy użyciu asemblera MASM i próbowałem studiować kod powłoki z tej strony internetowej Shellcoding for Linux and WindowsCzy istnieje różnica między kodem powłoki MASM i kodem NASM
Używam RadAsm na Windows 64-bit. Kod, którego użyłem jest prawie taki sam, z tym wyjątkiem, że używam bezwzględnej nazwy funkcji, a nie adresu funkcji w bibliotece DLL. Kod powłoki ma używać funkcji spania z parametrem 5000
.
To jest kod, którego używam w 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
To składa się bez błędów w MASM.
Wygenerowany kod powłoki ma wartości puste i nieznacznie różni się od strony internetowej. Jest to następujące.
Użyłem objdump -d nameofexecutable.exe
, aby uzyskać demontaż.
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
Ale na stronie internetowej nie ma kodów szesnastkowych 00
.
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
Czy to możliwe, ponieważ używam x64 do kompilacji lub dlatego, że wywołuję funkcję pośrednio?
Każda pomoc będzie doceniona, dziękuję.
Może to być również spowodowane różnicą wersji MASM/NASM. –