游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1492|回复: 0

一个Hello world...

[复制链接]

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2003-11-4 09:40:00 | 显示全部楼层 |阅读模式

char mycode[] =
"\xeb\x19\x5e\x31\xc0\x89\xc3\x89"
"\x46\x0c\xb0\x04\x89\xf1\x31\xd2"
"\xb2\x0c\xcd\x80\x31\xdb\x89\xd8"
"\x40\xcd\x80\xe8\xe2\xff\xff\xffHello world!";

void foo()
{
        char buf[14];
        int *ret;
        ret = (int*)(buf + 28);
        (*ret) = (int)mycode;
}

main()
{
        foo();
        return 0;
}

在gcc 3.2.2 环境下调试通过。生成那段字符串是根据下面的汇编代码生成的:
void main()
{
__asm__("
jmp 1f
2:popl %esi
xorl %eax,%eax
movl %eax,%ebx
movl %eax,0xc(%esi)
movb $0x4,%al
movl %esi,%ecx
xorl %edx,%edx
movb $0xc,%dl
int $0x80
xorl %ebx,%ebx
movl %ebx,%eax
inc %eax
int $0x80
1:call 2b
.string \"Hello world!\"");
}

;) 知道攻击方法才知道防御方法,有效的防止这种溢出攻击建议在你的程序中用上Libsafe。但是有一点需要注意,就是Libsafe只对动态链接库有保护作用,而对于静态链接库,则只能从代码上小心谨慎了。特别是在做网络游戏的时候,接收网络消息的buffer一定要小心谨慎的处理因为一个不慎被溢出并注入一些有攻击行为的代码,就比较恐怖了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-23 23:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表