2014-08-28 28 views
6

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ę.

+0

Może to być również spowodowane różnicą wersji MASM/NASM. –

Odpowiedz

3

Prostą odpowiedzią jest to, że MASM jest do bani !!

Cytowany z here "W przeszłości opracowałem 32-bitowy kod powłoki za pomocą darmowego i otwartego oprogramowania Netwide Asembler (NASM), ale kiedy przechodziłem przez ćwiczenie uczenia się odmiany 64-bitowej, pomyślałem, że spróbuję. obecnie z Microsoft Asembler (MASM) Zamiast tego jeden problem szybko stał się oczywiste: MASM nie oferuje żadnego sposobu (o którym wiem) do generowania surowego binarnego kodu maszynowego w przeciwieństwie do pliku .exe! Nie wszystko jest jednak stracone, bajty kodu mogą można łatwo wyodrębnić z pliku .exe (ale w przyszłości mógłbym wrócić do NASM). ", trudniej jest utworzyć kod powłoki.

Użyłem NASM do utworzenia kodu powłoki dla programu, który mówi hej z linku podanego w oknach x64, jest to wynik, który osiągnąłem, bez zerowych bajtów. Wygląda na to, że przykład snu może nie działać poprawnie, ale drugi przykład jest w pełni funkcjonalny.

"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x2f\x59\x88\x51\x0a" 
"\xbb\x82\xf8\x60\x77\x51\xff\xd3\xeb\x31\x59\x31\xd2" 
"\x88\x51\x0b\x51\x50\xbb\xe6\x4d\x61\x77\x59\x31\xd2" 
"\x88\x51\x03\x31\xd2\x52\x51\x51\x52\x31\x32\xd2\x50" 
"\xb8\xca\x3a\x61\x77\xe8\xcc\xff\xff\xff\x75\x73\x65" 
"\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xca\xff\xff\xff" 
"\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8" 
"\xc6\xff\xff\xff\x48\x65\x79\x4e" 

UWAGA: Należy używać nameofexecutable.o z objdump

tj. objdump -o nazwaofexecutable.o aby uzyskać kod powłoki, a nie nameofexecutable.exe

4

Twój kod jest złożony tak, aby działał pod adresem 0x00401000, więc najwyższy bajt wszystkich adresów kończy na 0x00. Ich kod jest montowany tak, aby działał pod adresem 0x08048080, więc najwyższy bajt wszystkich jego adresów kończy się 0x08.

To tutaj powstają wszystkie zera.

+0

Znalazłem, jak masz kod szesnastkowy i gdzie jest uruchomiony, ale czy istnieje sposób, aby naprawić wartości NULL? – David

+0

@ David, co masz na myśli "naprawić"?Nie powodują problemu, prawda? – davmac

+0

cóż, zgodnie z odpowiedzią, zaczynają się od 0x00 i powodują pojawienie się bajtów NULL, więc jak mogę wyeliminować bajty NULL? @davmac – David