Tôi mới sử dụng StackOverflow. Gần đây, tôi bắt đầu học lắp ráp và khá mới để lắp ráp, hoàn toàn mới với shellcode. Tôi đang sử dụng RadAsm để biên dịch bằng cách sử dụng MASM assembler và tôi đã thử nghiên cứu shellcode từ trang web này Shellcoding for Linux and WindowsCó sự khác biệt nào giữa shellcode MASM và mã shell NASM
Tôi đang sử dụng RadAsm trên Windows 64 bit. Mã tôi sử dụng gần như giống nhau, ngoại trừ việc tôi sử dụng tên tuyệt đối của hàm thay vì địa chỉ của hàm trong DLL. Mã shell được cho là sử dụng chức năng ngủ với tham số 5000
.
Đây là mã tôi đang sử dụng trong 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
Việc lắp ráp này không có lỗi trong MASM.
Mã shell được tạo có giá trị null và hơi khác so với trang web. Nó như sau.
Tôi đã sử dụng objdump -d nameofexecutable.exe
để tháo gỡ.
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
Nhưng trên trang web, không có mã số 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
Có thể vì tôi đang sử dụng x64 để biên dịch hoặc vì tôi đang gọi hàm gián tiếp?
Bất kỳ trợ giúp nào sẽ được đánh giá cao, cảm ơn bạn.
Nó cũng có thể là do sự khác biệt phiên bản của MASM/NASM. –