首页
社区
课程
招聘
[旧帖] [求助]使用指针执行shellcode 0.00雪花
发表于: 2011-5-6 00:19 1661

[旧帖] [求助]使用指针执行shellcode 0.00雪花

2011-5-6 00:19
1661
char shellcode[]="\xeb\x1a\x5e ... "
//某种作用的机器执行码
int main()
{
        int *ret;
        ret=(int *)&ret +2;
        (*ret)=(int)shellcode;
}

为能这段代码能直接把shellcode[]里的字符当作机器码执行?谁能帮我分析一下这三句代码?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 46
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
哪位大侠会?
2011-5-6 10:08
0
雪    币: 677
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
把main函数的返回地址改成了shellcode的地址 执行完main函数就去执行shellcode了
2011-5-6 10:34
0
雪    币: 46
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
我不是不懂缓冲区溢出原理,我只是想从编程角度知道上面这段代码的确切含义。
2011-5-6 14:12
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
2011-5-6 14:46
0
雪    币: 46
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
。我已经弄懂了。。。新手区果然是没什么人才啊
2011-5-6 15:07
0
雪    币: 232
活跃值: (105)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
就是 main函数其实不是一个程序最开始执行的地方
在它之前还有PE为执行程序所做环境方面的一些的东西

0012FF84 00401189 返回到 test.<模块入口点>+0E9 来自 test.00401005
0012FF88 00000001
0012FF8C 00380B80
0012FF90 00380BF8
0012FF94 7C930738 ntdll.7C930738


这就是刚开始程序进入 main函数时候
这上面那段代码
其实就是
改变了
0012FF84   00401189  返回到 test.<模块入口点>+0E9 来自 test.00401005
这个返回地址

改成了
0012FF84   00424A30  test.00424A30

于是发生错误了

这段代码其实是利用编译器的一些习性
VC这些的分配第一个变量地址在那个返回地址上面的 0x8处
它就通过这种方法获取返回地址
然后改写
这种方法通用性不强吧
还是用一些SEH这些的获取稳定一些
2011-5-6 15:45
0
游客
登录 | 注册 方可回帖
返回