ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:13.82KB ,
资源ID:3671453      下载积分:8 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3671453.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(用Windows终端仿真程序实现微机远程文件传送1.docx)为本站上传会员【精***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

用Windows终端仿真程序实现微机远程文件传送1.docx

1、用Windows终端仿真程序实现微机远程文件传送1   有些硬盘防拷贝是通过对硬盘FAT表中的簇链的检测来实现的,这与本文所推荐的方法原理一样,都是通过检测文件位置信息是否被改变来判断文件是否已被移动的。但前者涉及到定位FAT表及文件所在目录等繁琐工作,而且还和硬盘型号及格式化信息有关,编程很不方便。本文所介绍的方法则不然,它直接与操作系统打交道,取出操作系统内核中现成的数据,即利用DOS系统文件表(SYSTEM FILE TABLE 简称SFT)来实现防拷贝。 当您打开硬盘上的一个文件并移动读写指针时,DOS会时刻记录读写指针所对应的硬盘位置。一个稍大些的文件在硬盘上要占用多个簇,这

2、些簇并不是连续的,而是由操作系统一般按照“就近循环分配”原则为该文件分配的,这些簇的绝对簇号具有一定的随机性,在FAT表中形成一个簇链。移动读写指针超过一个簇的大小时,则所对应的绝对簇号也要变化。只要该文件没有被移动过(拷贝或整理硬盘),这些簇号就是固定的。一旦该文件被移动了,根据DOS簇分配原则,这些对应的簇号就会改变。由此,我们可以检查特定的文件指针所对应的绝对簇号是否改变了来判断该文件是否已被非法移动。 SFT是DOS在文件管理上的一个很重要的数据结构。只要DOS开始引用一个文件或设备,它必然要建立一个SFT。该表记录了文件设备名、目录特性、设备特性、文件大小和位置、DDPB(块设备)

3、或设备驱动程序标题(字符设备)的地址,以及打开模式等有关文件的存储、访问和操作的管理信息。其中有几项数据可以用来确定文件在硬盘上的位置,它们是:文件读写指针所对应的绝对簇号,目录项的相对索引号(即目录项在目录扇区中的序号),目录项所在扇区的扇区号。 那么怎样利用这几项数据防拷贝呢?这里所说的防拷贝是指可以拷贝但拷贝后的文件不能执行或不能被使用,包括数据文件和可执行文件。若是可执行文件,则其本身包括一段检测代码,用以判断其本身是否已被非法移动。若是数据文件,则在使用该数据文件的可执行文件中包括一段检测代码,来判断该数据文件是否已被非法移动。当第一次将一个文件装入硬盘后,它所占有的硬盘的簇号已是

4、固定的了。这样我们就可以作一个加密程序,在该程序里,约定一个或多个秘密的值N,N1,N2…,然后将文件指针分别移动到N或N1,N2…,在SFT中取出那几项硬盘位置数据,再用约定的秘密算法加以运算,就得到了包含被加密文件位置信息的“钥匙”,将它存于另一个文件中或干脆附加在被加密文件的末尾。在使用该文件的可执行文件的检测代码中,按同样的算法取得当前的“钥匙”,与先前保存的“钥匙”相比较,若相等,则说明文件没有被移动过,程序正常执行,否则,说明文件已不在先前的位置了,即已被非法移动过了,则程序异常执行。 我们先看看DOS系统中SFT的具体结构,系统有多个SFT,这个数目取决于文件中的FILES=N

5、的N值。在,,中,每个SFT的长度是3BH。多个SFT形成SFT数组,并不是整个系统的所有SFT组成一个连续的大数组,而是可能有多个SFT数组,每个数组由一个控制块管理,它们之间由指针连接。每个SFT数组的结构 偏移量 长度 说明 00H DWORD 指向下一个SFT数组的指针 04H WORD 本SFT数组内的SFT数目 06H nBYTEs 由SFT组成的数组(n=本数组中SFT数目*每个SFT所占字节数) 我们还必须知道第一个SFT数组所在的地址。这可由DOS功能调用52H先取得DOS的多重表指针,在多重表偏移量04H处即是一个长指针,它即指向第一个SFT数组的头部。这样剩下的

6、SFT数组的位置也就知道了。 每当DOS打开一个新文件时,DOS就从这些SFT数组中找一个空闲的SFT项,分配给该文件。以后DOS就用此SFT控制访问该文件。那么怎样确定一个刚打开的文件所对应的SFT项是SFT数组中的第几项呢?我们利用文件句柄和文件句柄表。每个进程都有一个文件句柄表,当我们打开一个文件时可得到该文件的句柄,它是一个整数,设为M,则在文件句柄表中的第M项即为该文件的SFT表项在SFT数组中的位置。 那么怎样找到文件句柄表呢?我们先用DOS功能调用51H得到程序段前缀(PSP)的地址,在PSP偏移34H处即是指向该进程文件句柄表的双字指针。 附图给出怎样找一个已打开文件的S

7、FT。 @@;附图@@ 打开文件取得文件句柄是3,所对应的SFT的序号是6。 下面就给出一个可执行文件防拷贝的例子。 假设我们用C++语言编一个完成某一功能的程序,经过编译连接生成可执行文件,要对这个可执行文件实行硬盘防拷贝。我们先编写一个设置“钥匙”的程序PUT-KEY,在该程序中按上述方法取得的“原钥匙”(它包含了初次装入硬盘时的位置信息),存于一个专用文件中(当然也可直接附加在的末尾,取时也到文件末尾去取),在中必须包含一段检测代码。 它也用PUT-KEY的方法取出自己的“当前钥匙”,与存于中的“原钥匙”比较,相等则说明文件还在原处,正常执行。否则,说明正在执行的是被拷贝的副本

8、停止执行或异常执行。 这里,不用考虑“钥匙”的安全性,“钥匙”是可以公开的,只要取得“钥匙”的方法是保密的,非法拷贝者就无可奈何。可以这样理解这个防拷贝方法:可执行文件本身具有自锁性,在它每拷贝到一个新地点时就按文件位置上了一把新锁,当它执行时,它到一个固定的地方去取“钥匙”,打开本身的锁执行。当它被移动后,可理解为锁换了(因为位置变了)。用“原钥匙”打不开,所以“原钥匙”是可以公开的,就是用来设置“原钥匙”的。当合法用户想把拷贝到一个新地方,只需运行一次就可以使用新的了。所以必须由合法用户保管。 先编写一个取“钥匙”的子程序,放在文件中,在该子程序中,分别取目录项的相对索引号,目录项所

9、在扇区的扇区号,文件指针所对应的绝对簇号。采用相加的算法,形成“钥匙”。这里只用了一个文件指针6000所对应的簇号,当然可以使用多个文件指针,采用更复杂的算法,如相乘、相除、异或、相减等。所用的文件指针和所用的算法是保密的。而算出的“钥匙”可以是公开的。 的内容如下(本文件用来被包含在和中)。 /*本子程序用来取filename的"当前钥匙"*/ unsigned long curentlocation-key(char filename) { unsigned long secc; int filehandle; int i,iii,jjj1,jjj2; unsigned c

10、har 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(Strea

11、m,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 //文件句柄表中偏移filehand

12、le 处的一字节; 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为第一个SF

13、T数组控制块偏移量; 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 e

14、s:[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 //中FILES=N的N值减去第一个SFT //数组中SFT项数jjj1; ptrr1=(unsigned char far *)MK-FP(segmnt1,offst1+6); //ptrr1

15、指向第一个SFT数组中第一个SFT Ptrr2=(unsigned char far *)MK-FP(segmnt2,offst2+6); //ptrr2指向第二个SFT数组中第一个SFT if(iii #include #include #include #include #include "" //将取钥匙子程序包函进来; void main(int argc,char * argv[]) //命令行上是待加密的文件名; { unsigned long key=0; FILE *stream; if (argc2) {cputs("specify a file"

16、);exit(1);} key=curentlocation-key(argv[1]); //取出文件当前“钥匙”; stream=fopen("","w+b"); //以写方式打开“钥匙”文件 t; if(stream==NULL) {cputs("can’t open file ");exit(1);} fwrite(&key,4,1,stream); //将当前“钥匙”(4字节)写入文件; fclose(stream); } 下面就是的内容: #include #include #include #include #include #include #in

17、clude #include "" //将取钥匙子程序包函进来; //该程序main()函数 int main() { //下面是一段检测代码,(可放在程序中必要的地方); unsigned long proto-key,curent-key; FILE*Stream; Stream=fopen ("","rb");//以读方式打开“钥匙”文件; if(Stream==NULL)//若因破坏而打不开则退出; {cputs(" open error");exit(1);} fread(&proto-key,4,1,Stream);//取存放于文件中的“原钥匙”(4字节);

18、 fclose(Stream); curent-key=curentlocation-key("");//按同样的方法取“当前钥匙”; if(curent-key!=proto-key)//比较“当前钥匙”和“原钥匙”; { cputs("The file has been moved and is invalid!");exit(1); } //若不相等,说明当前的文件位置与装入时的位置不同,//文件已经被移动过,这里可异常执行; cputs("The file is valid");//否则正常进行,完成程序的功能; //以下是程序代码; //... //... re

19、turn 0; }//为了防跟踪,当打不开“钥匙”文件或发现文件已被移动过时,可不退出,而是 //异常执行; 以上程序用Borlandc c++编写,使用时,分别编译连接和 P形成和。然后在DOS提示符下键入: NO-COPY 就会得到 open error 的信息,程序退出,这是因为还没有运行PUT-KEY来设置“钥匙”。 若先键入PUT-KEY 来为设置“钥匙” 再键入NO-COPY 则得到The file is valid 说明正常执行。 若将拷贝到其它目录再执行就会得到 open error 的信息,程序退出。 若将 一起拷贝到其它目录再执行 则得到The file has been moved and is invalid! 若先在新目录运行PUT-KEY 来为新的设置“钥匙” 再运行新的NO-COPY 则得到The file is valid 说明正常执行。 若要对一个或多个数据文件加密,可对稍加修改,再在使用这些数据文件的可执行文件的原程序中加入检测代码即可。若要修改加密算法或调整“钥匙”的取出方 法,则只需修改curentlocation-key()函数。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服