您的位置:首页 > 运维架构 > Shell

shellcode编写

2012-10-13 22:35 211 查看
在VC中调试运行程序,比如输出一个字符串,看到反汇编以及机器码如下:

9:        printf("str的地址:0X%p\n",str);    //0X00414420
00401368 8B F4                mov         esi,esp
0040136A 68 20 44 41 00       push        offset str (00414420)
0040136F 68 1C 30 41 00       push        offset string "str\xb5\xc4\xb5\xd8\xd6\xb7:0X%p\n" (0041301c)
00401374 FF 15 A4 50 41 00    call        dword ptr [__imp__printf (004150a4)]
0040137A 83 C4 08             add         esp,8
0040137D 3B F4                cmp         esi,esp
0040137F E8 78 FD FF FF       call        _chkesp (004010fc)


所以可以编写我们自己的shellcode,(以后自己写一个根据程序直接生成shellcode的工具,实现自动化的就能方便多了。)

开始编写:

#include <stdio.h>

char str[] = "这是shellcode的实例:\n";

void main( void )
{

printf("str的地址:0X%p\n",str);	//0X00414410

char shell_code[]= {
0X8B , 0XF4 ,
0X68 , 0X10 , 0X44 , 0X41 , 0X00 ,//0X68 , 0X1c , 0X30 , 0X41 , 0X00 ,
0XFF , 0X15 , 0XAC , 0X50 , 0X41 , 0X00 ,

// 		0X83 , 0XC4 , 0X04 ,
// 		0X3B , 0XF4 ,
// 		0XE8 , 0X05 , 0X01 , 0X00 , 0X00,

//		0XEB , 0X70, 0X10, 0X40, 0X00 ,//0X00401070是HERE的地址
0X6A , 0X01 ,               //push        1
0XFF , 0X15 , 0XBC , 0X50 , 0X41 , 0X00    //call        dword ptr [__imp__exit (004150bc)]
};

((void(_stdcall*)())&shell_code[0])();

//goto HERE;

HERE:
getchar();
//exit(1);
//system("pause");
return ;

}


输出:

str的地址:0X00414410
这是shellcode的实例:
Press any key to continue
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: