| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 762 人关注过本帖
标题:[分享]仅供参考学习的系统攻击程序
只看楼主 加入收藏
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
结帖率:100%
收藏
 问题点数:0 回复次数:7 
[分享]仅供参考学习的系统攻击程序

注意:请看完程序修改后 运行!
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<malloc.h>

/*定义GDT描述符表项结构*/
struct DESCRIPTION
{
unsigned int size;
unsigned int low16;
unsigned int high8;
unsigned char arribution;
unsigned int res;
};
/*定义全局地址描述索引表结构*/
struct GDT
{
struct DESCRIPTION NullDsc;
struct DESCRIPTION GDTDsc;
struct DESCRIPTION SrcDsc;
struct DESCRIPTION DstDsc;
struct DESCRIPTION BioscsDsc;
struct DESCRIPTION BiosssDSC;
};

unsigned char *buffer;
long filelength=0;
long loop;
struct GDT gdtAddrTable={{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0x93,0},{0,0,0,0x93,0},{0,0,0,0,0},{0,0,0,0,0}};

/*定义函数GetEmmsize获取扩展内存容量*/
unsigned int GetEmmsize()
{
union REGS rd,op;
rd.h.ah=0x88;
int86(0x15,&rd,&op);
return op.x.bx;
}
/*设置源数据块地址表项值*/
struct GDT SetSrcaddr(struct GDT *emm,long emmaddr,unsigned size)
{
emm->SrcDsc.low16=emmaddr&0x0ffff;
emm->SrcDsc.high8=emmaddr>>16;
emm->SrcDsc.size=size;
return (*emm);
}
/*设置目的数据块地址表项值*/
struct GDT SetDstaddr(struct GDT *emm,long emmaddr,unsigned size)
{
emm->DstDsc.low16=emmaddr&0x0ffff;
emm->DstDsc.high8=emmaddr>>16;
emm->DstDsc.size=size;
return (*emm);
}
/*源数据块到目的数据块之间的数据传递*/
void TrasData(struct GDT *emm,unsigned size)
{
union REGS in,out;
struct SREGS seg;
seg.es=FP_SEG(emm);
in.x.si=FP_OFF(emm);
in.x.cx=size>>1;
in.x.ax=0x8700;
int86x(0x15,&in,&out,&seg);
}
/*定义函数向扩展内存中写数据*/
int InputEmm(char *filename,long emmaddr)
{
FILE *fp;
long size,addr;
unsigned num,i,buffersize=0x8000;
if(!(fp=fopen(filename,"rb")))
{
printf("can't open file %s \n",filename);
exit(0);
}
fseek(fp,0L,SEEK_END);
filelength=ftell(fp);
rewind(fp);
size=GetEmmsize();
/*计算数据文件的页数*/
loop=filelength/buffersize+1;
/*计算地址*/
addr=FP_SEG(buffer);
addr=(addr<<4)+FP_OFF(buffer);
/*设置源数据块地址表项值*/
SetSrcaddr(&gdtAddrTable,addr,buffersize);
addr=emmaddr;
/*依次将各页写入到扩展内存中去*/
for(i=0;i<loop;i++)
{
num=fread(buffer,sizeof(char),buffersize,fp);
SetDstaddr(&gdtAddrTable,addr,num);
TrasData(&gdtAddrTable,num);
addr=addr+buffersize;
}
fclose(fp);
return 1;
}
int main(int argc,char **argv)
{
int i=0;
if(argc!=2)
{
printf("Please input the sourcefile\n");
return 0;
}
buffer=malloc(0x8000*sizeof(char));
if(!buffer)
{
printf("malloc memery error!\n");
exit(0);
}
i=InputEmm(argv[1],0x400000);
if(i==1)
printf("Input the file %s to extend memorsy successfully!\n",argv[1]);
else
printf("Input the file to extend memory error\n");
free(buffer);
getch();
return 1;
}

搜索更多相关主题的帖子: 系统 攻击 分享 学习 
2007-08-18 07:39
hangeng
Rank: 2
等 级:论坛游民
帖 子:424
专家分:39
注 册:2007-7-23
收藏
得分:0 
没看明白

  雨水冲不进窗来,在玻璃上痛哭。但它至少奋斗过。
2007-08-18 13:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用hangeng在2007-8-18 13:02:39的发言:
没看明白


不学保护模式很难看懂的


2007-08-19 13:09
ConZhang
Rank: 1
来 自:北京
等 级:新手上路
帖 子:282
专家分:0
注 册:2007-8-7
收藏
得分:0 
有道理
2007-08-19 15:05
小鸟黑黑
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2007-7-25
收藏
得分:0 
#include<stdlib.h>等不等与#include<malloc.h>啊没搞明白


我讨厌别人叫我菜鸟,不过我的确很菜。。。
2007-08-19 18:42
zrgong
Rank: 1
等 级:新手上路
帖 子:95
专家分:0
注 册:2007-6-26
收藏
得分:0 

厉害


2007-08-19 20:49
lishizelibin
Rank: 2
等 级:论坛游民
帖 子:513
专家分:41
注 册:2007-5-10
收藏
得分:0 
以下是引用小鸟黑黑在2007-8-19 18:42:07的发言:
#include<stdlib.h>等不等与#include<malloc.h>啊没搞明白

编译器而定


惟有学习不断的学习!
2007-08-20 06:25
cinki
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2007-8-16
收藏
得分:0 
能附加解释吗...真的好难懂

怀才就像怀孕,时间长了才能看出来...
2007-08-20 10:02
快速回复:[分享]仅供参考学习的系统攻击程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011936 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved