首 页       用户登录  |  用户注册
设为首页
加入收藏
联系我们
按字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
按声母检索 A B C D E F G H J K L M N O P Q R S T W X Y Z 数字 符号
您的位置: 5VAR论文频道论文中心计算机论文计算机理论
   ○用Windows终端仿真程序实现微机远程文件传送1      ★★★ 【字体: 】  
○用Windows终端仿真程序实现微机远程文件传送1
收集整理:佚名    来源:本站整理  时间:2009-01-10 12:04:26   点击数:[]    

公开的,只要取得“钥匙”的方法是保密的,非法拷贝者就无可奈何。可以这样理解这个防拷贝方法:可执行文件本身具有自锁性,在它每拷贝到一个新地点时就按文件位置上了一把新锁,当它执行时,它到一个固定的地方去取“钥匙”,打开本身的锁执行。当它被移动后,可理解为锁换了(因为位置变了)。用“原钥匙”打不开,所以“原钥匙”是可以公开的,PUT-KEY.EXE就是用来设置“原钥匙”的。当合法用户想把NO-COPY.EXE拷贝到一个新地方,只需运行一次PUT-KEY.EXE就可以使用新的NO-COPY.EXE了。所以PUT-KEY.EXE必须由合法用户保管。

先编写一个取“钥匙”的子程序,放在MAKE-KEY.CPP文件中,在该子程序中,分别取目录项的相对索引号,目录项所在扇区的扇区号,文件指针所对应的绝对簇号。采用相加的算法,形成“钥匙”。这里只用了一个文件指针6000所对应的簇号,当然可以使用多个文件指针,采用更复杂的算法,如相乘、相除、异或、相减等。所用的文件指针和所用的算法是保密的。而算出的“钥匙”可以是公开的。

MAKE-KEY.CPP的内容如下(本文件用来被包含在PUT-KEY.CPP和NO-COPY.CPP中)。

/*本子程序用来取filename的当前钥匙*/

unsigned long curentlocation-key(char filename)

{

unsigned long secc;

int filehandle;

int i,iii,jjj1,jjj2;

unsigned char u-char=0;

unsigned int u-int=0;

unsigned long u-long=0;

unsigned int offst1,segmnt1,offst2,segmnt2;

void psp-ptrr;

unsigned char far ptrr1, ptrr2;

FILE Stream;

Stream=fopen(filename,r+b);

if(Stream==NULL)

{cputs(open error);exit(1);}

filehandle=fileno(Stream); //取文件句柄;

fseek(Stream,6000,0); //将文件指针置于6000处;

fread(&i,2,1,Stream); //读一次,使DOS按此文件指针修正SFT;

asm push es

asm mov ah,51h

asm int 21h //取程序段前缀(PSP)段地址;

asm mov es,bx

asm mov ax,word ptr es:[52] //偏移量34H为文件句柄表(FHT)地址;

asm mov bx,ax

axm mov ax,word ptr es:[54]

asm mov es,ax

asm add bx,filehandle //文件句柄表中偏移filehandle 处的一字节;

asm mov al,byte ptr es:[bx] //为该文件的SFT在SFT数组中的序号;

asm xor ah,ah

asm pop es

asm mov iii,ax //iii中存放文件的SFT在SFT数组中的序号;

asm push es

asm mov ah,52h //取DOS多重表指针;

asm int 21h //es为段地址,bx为偏移量;

asm mov ax,word ptr es:[bx+4] //多重表中偏移04H为第一个SFT数组控制块指针



asm mov offst1,ax //offset1为第一个SFT数组控制块偏移量;

asm mov ax,word ptr es:[bx+6]

asm mov segmnt1,ax//segment1为第一个SFT数组控制块段地址;

asm mov es,segmnt1

asm mov bx,offst1

asm mov ax,word ptr es:[bx]

asm mov offst2,ax//offset2为第二个SFT数组控制块偏移量;

asm mov ax,word ptr es:[bx+2]

asm mov segmnt2,ax //segment2为第二个SFT数组控制块段地址;

asm mov ax,word ptr es:[bx+4]

asm mov jjj1,ax //jjj1中存放第一个SFT数组的项数,一般为五

asm mov es,segmnt2 //个(系统保留的五个常用文件的SFT);

asm mov bx,offst2

asm mov ax,word ptr es:[bx+4]

asm mov jjj2,ax //jjj2中存放第二个SFT数组的项数,它一般等于

asm pop es //CONFIG.SYS中FILES=N的N值减去第一个SFT

//数组中SFT项数jjj1;

ptrr1=(unsigned char far *)MK-FP(segmnt1,offst1+6);

//ptrr1指向第一个SFT数组中第一个SFT

Ptrr2=(unsigned char far *)MK-FP(segmnt2,offst2+6);

//ptrr2指向第二个SFT数组中第一个SFT

if(iii

#include

#include

#include

#include

#include make-key.cpp //将取钥匙子程序包函进来;

void main(int argc,char * argv[]) //命令行上是待加密的文件名;

{

unsigned long key=0;

FILE *stream;

if (argc

#include

#include

#include

#include

#include

#include

#include make-key.cpp //将取钥匙子程序包函进来;

//该程序main()函数如下:

int main()

{

//下面是一段检测代码,(可放在程序中必要的地方);

unsigned long proto-key,curent-key;

FILE*Stream;

Stream=fopen (loc-key.dat,rb);//以读方式打开“钥匙”文件;

if(Stream==NULL)//若因破坏而打不开则退出;

{cputs(loc-key.dat open error);exit(1);}

fread(&proto-key,4,1,Stream);//取存放于文件中的“原钥匙”(4字节);

fclose(Stream);

curent-key=curentlocation-key(d.exe);//按同样的方法取“当前钥匙”;

if(curent-key!=proto-key)//比较“当前钥匙”和“原钥匙”;

{

cputs(The file has been moved and is invalid!);exit(1);

}

//若不相等,说明当前的文件位置与装入时的位置不同,//文件已经被移动过,这里可异常执行;

cputs(The file is valid);//否则正常进行,完成程序的功能;

//以下是程序代码;

//...

//...

return 0;

}//为了防跟踪,当打不开“钥匙”文件或发现文件已被移动过时,可不退出,而是

//异常执行;

以上程序用Borlandc c++3.1编写,使用时,分别编译连接PUT-KEY.CPP和NO-COPY.CP

P形成PUT-KEY.EXE和

上一页  [1] [2] [3]  下一页


Tags:


文章转载请注明来源于:5VAR论文频道 http://paper.5var.com。本站内容整理自互联网,如有问题或合作请Email至:support@5var.com
或联系QQ37750965
提供人:佚名
  • 上一篇文章:动态哈夫曼编码的改进

  • 下一篇文章:○用Windows终端仿真程序实现微机远程文件传送
  • 返回上一页】【打 印】【关闭窗口
    中查找“○用Windows终端仿真程序实现微机远程文件传送1”更多相关内容 5VAR论文频道
    中查找“○用Windows终端仿真程序实现微机远程文件传送1”更多相关内容 5VAR论文频道
    最新热点 最新推荐 相关新闻
  • ››中小企业办公自动化系统的设计与实...
  • ››未雨绸缪:关于我国电子商务税收对...
  • ››网上书店为钱做秀 行业走势两极分...
  • ››Win2000索引服务的WEB应用
  • ››宽带化――电信发展的必由之路务
  • ››电子商务中x种错误思路和做法
  • ››网络营销与传统营销相比有何优势
  • ››Internet的下一个热点 从内容走向服...
  • ››基于CNAPS的流水号管理方法
  • ››网络时代的财务与会计:管理集成与...
  • ››用Windows终端仿真程序实现微机远程...
  • ››用Windows终端仿真程序实现微机远程...
  •   文章-网友评论:(评论内容只代表网友观点,与本站立场无关!)
    关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图
    Copyright © 2006-2033 5Var.Com. All Rights Reserved .