[Discussion] Phân tích và viết shellcode |
06/06/2010 14:07:04 (+0700) | #1 | 212543 |
zjm_zjm
Member
|
0 |
|
|
Joined: 26/07/2009 01:53:09
Messages: 159
Location: hhhhhh
Offline
|
|
Hiện tại mình đang học và ngâm về cái này, nhưng trong khi làm việc thấy hơi khó hiểu chỗ này
Mình có 1 đoạn shellcode xuất ra từ hello như thế này.
Code:
;hello.asm
[SECTION .text]
global _start
_start:
jmp short ender
starter:
xor eax, eax ;clean up the registers
xor ebx, ebx
xor edx, edx
xor ecx, ecx
mov al, 4 ;syscall write
mov bl, 1 ;stdout is 1
pop ecx ;get the address of the string from the stack
mov dl, 5 ;length of the string
int 0x80
xor eax, eax
mov al, 1 ;exit the shellcode
xor ebx,ebx
int 0x80
ender:
call starter ;put the address of the string on the stack
db 'hello'
Và biên dịch nó ....
zjm@1337b0x:~$ nasm -f elf hello.asm
zjm@1337b0x:~$ ld -o hello hello.o
zjm@1337b0x:~$ objdump -d hello
Cái đoạn này đơn giản là xuất ra chữ hello
Cái mình không hiểu ở đây là
mov al, 4 ;syscall write
mov bl, 1 ;stdout is 1
có phải hàm write của syscall là 4
và stdout là 1
PS: Mình thấy chủ đề loại này ít có trên forum quá
|
|
|
|
|
[Discussion] Phân tích và viết shellcode |
06/06/2010 14:39:00 (+0700) | #2 | 212558 |
zjm_zjm
Member
|
0 |
|
|
Joined: 26/07/2009 01:53:09
Messages: 159
Location: hhhhhh
Offline
|
|
Hình như không ai hứng thú với cái vụ này |
|
|
|
|
[Discussion] Phân tích và viết shellcode |
06/06/2010 21:41:45 (+0700) | #3 | 212599 |
|
gamma95
Researcher
|
Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa">
Offline
|
|
Cái đoạn này đơn giản là xuất ra chữ hello
Cái mình không hiểu ở đây là
mov al, 4 ;syscall write
mov bl, 1 ;stdout is 1
có phải hàm write của syscall là 4
và stdout là 1
Đc tự hỏi rồi tự trả lời luôn là sao? vậy ko hiểu là ko hiểu chỗ nào ? mỗi một system call nó gắn với một system call number khác nhau, chẳng hạn như trong đoạn mã của bạn vừa rồi thì sys_write có system call là 4, những con số này được thương được định nghĩa trong syscall.h
EX:
cat /usr/include/asm/unistd_32.h
Code:
#ifndef _ASM_X86_UNISTD_32_H
#define _ASM_X86_UNISTD_32_H
/*
* This file contains the system call numbers.
*/
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
..................
Để thấy rõ khi chạy chương trình, system call nào được goị, bạn thử chạy lệnh strace
EX:
Code:
$strace ./hello
execve("./hello", ["./hello"], [/* 40 vars */]) = 0
write(1, "hello", 5hello) = 5
_exit(0) = ?
|
|
Cánh chym không mỏi
lol |
|
|
|
|