2012年12月3日 星期一

shellcode

我沒有在研究這個主題, 不過在 ptt 看到這樣的討論: http://www.ptt.cc/bbs/C_and_CPP/M.1353252407.A.C55.html
試著修改一下, 可以執行成功。

s.c
 1 #include <stdio.h>
 2 
 3 #if 0
 4    0:   b8 01 00 00 00          mov    $0x1,%eax
 5    5:   bb 00 00 00 00          mov    $0x0,%ebx
 6    a:   cd 80                   int    $0x80
 7 
 8 #endif
 9 char __attribute__ ((section (".text"))) shellcode[] =  
        "\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80";
10 typedef void (*FUNCPTR)();
11 
12 int main() {
13     printf("<< Shellcode begin >>\n");
14 
15 #if 0
16     FUNCPTR fp = (FUNCPTR)shellcode;
17     fp();
18 #else
19     goto *(char *)shellcode;
20 #endif
21     printf("<< Shellcode end >>\n");
22     return 0;
23 }


char __attribute__ ((section (".text"))) shellcode[] =  
char __attribute__ ((section (".text#"))) shellcode[] =  

多了一個 # 可以幹嘛? 消除 warning。
gcc -c -g -m32 s.c
/tmp/ccA1mf0y.s: Assembler messages:
/tmp/ccA1mf0y.s:12: Warning: ignoring changed section attributes for .text
gcc -o s -g -m32 s.o

.section        .text#,"aw",@progbits

# 就是用來把 ,"aw",@progbits 註解掉

ref:

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。