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 }