首页
社区
课程
招聘
[分享]一小程序,感兴趣的朋友看一下
发表于: 2008-10-28 20:00 4111

[分享]一小程序,感兴趣的朋友看一下

2008-10-28 20:00
4111
#include<windows.h>
#include<stdio.h>

void main()
{

        DWORD ufo[100];
        DWORD i;

        for(i=0;i<100;i++)
        {
                ufo[i]=0x90909090;
        }

        *((char*)ufo+400-5)=(char)0xE9;
        ufo[99]=0xFFFFFE70;

        ufo[101]=(DWORD)ufo;
}

进了UFO,你可就出不去了,外星人要请客的.

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

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好像死循环了。
可以讲解一下吗?
2008-10-28 20:18
0
雪    币: 403
活跃值: (29)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
3
最后一句有问题。把最后一句注释掉就不会死循环了,Debug版本会死循环,release版本也不会死循环。貌似执行了最后一句,内存越界,返回到了一个错误的地址。
2008-10-28 22:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
从倒数第三句就看不懂了,呃,
2008-10-28 22:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好像是C。。。没看懂。
2008-10-28 23:45
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
这里是逆向论坛...难道就不会反汇编一下吗....另外E9之类的常见机械码....得好好记住...
2008-10-29 00:42
0
雪    币: 6082
活跃值: (794)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
7

都是夜猫子啊
汇编学了7遍,还是不理想的效果。诶
2008-10-29 01:30
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
8
这个东西在shellcode的书里讲得多了去了。

关键就是利用C语言不检查数组边界这一缺陷,在栈空间中分配数组,而使用越界的索引来访问,控制合适的索引值,便可以有目的的访问到栈上的重要数据——返回地址,从而引导程序飞入我们的shellcode.

楼主的这段程序,不过就是把栈上的数组填充了后,让它当作指令来执行,而最后一句越界访问数组的操作恰好是将返回地址覆盖成为刚填充了机器码的栈空间地址。

至于填充的机器码,就是所谓的shellcode了。

呵呵。

另外回楼上的,汇编语言学7遍,跟学两遍没啥区别。重要的是要学习计算机体系结构,如果计算机体系结构学明白了,所有的汇编语言将会无师自通,不光是IA32的,像ARM的,SPARK,68K的,等等,无非就是寄存器集了寻址方式的区别,指令助记符的区别。

要知道汇编语言主要是面向机器的。当前除了极少数的特殊场合,汇编语言根本不是用来开发的,它的用处主要就是调试了。
因此学汇编不能当成学编程,像C++那样学,而是当成检查机器执行情况那样来看待。

当然只是个人观点,接受反驳,呵呵。
2008-10-29 03:39
0
雪    币: 107
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼上的有理,虽然我汇编也不咋的,呵呵
2008-10-29 13:46
0
游客
登录 | 注册 方可回帖
返回
//