利用安装程序防止软件非法拷贝

    技术2022-05-11  138

    利用安装程序防止软件非法拷贝

    每个用户都不希望自己开发的软件被别人轻易的拷贝使用,自然而然崐想起了要对软件进行加密。本文主要介绍一种通过安装程序来拷贝软件,崐防止软件非法拷贝的方法。经过实践证明这种方法非常适用于需要把软件崐安装到硬盘上才能使用的情况。一、工作原理通过在被加密的软件中设置一个特殊的单元,由一个安装程序将被加崐密的软件装入指定的硬盘(C、D、E等)分区上。在拷贝装入硬盘的过程崐中,把被加密的软件在硬盘中首簇号填写到其指定单元中。同时在被加密崐的软件中嵌入检验程序,当被加密的软件在硬盘上运行时,检验程序首先崐判断被加密的软件在硬盘的首簇号与其本身程序中指定单元的内容是否相崐同。若不同,则认为是该软件是非法拷贝得到的,终止软件的运行。如果崐相等,则认为该软件是通过安装程序正常安装得到的,允许软件继续运行。本方法使用了一些DOS中断调用对文件进行操作的深层知识,如INT21H中断的11H,1AH,3CH,3DH,3EH,3FH,40H,42H号功能调用和文件控制崐块(FCB)数据格式等。在此作一简单介绍,更为详细的使用方法请参阅崐资料。1、INT 21H中断功能调用①INT 21中断11H号功能作用:在指定盘的当前目录下查找匹配的文件名调用:AH=11HDS:DS=文件控制块段:位移返回:AL=00,成功,找到匹配的文件名AL=0FFH,失败,未找到匹配的文件名②INT 21中断1AH号功能作用:置盘传输区地址调用:AH=1AHDS:DX=盘传输区段:位移返回:无③INT 21中断3CH号功能作用:创建文件调用:AH=3CHCX=文件属性,00H:标准,01H:只读,02H:隐含,04H:系统DS:DX=文件说明段:位移返回:成功进位标志=清AX=文件描述字失败进位标志=置AX =错误代码,3:路径未找到,4:无描述字可用,5:拒绝访问④INT 21中断3DH号功能作用:打开文件调用:AH=3DHAL=存取模式,000:读,001:写,010:读/写DS:DX=文件说明段:位移返回:成功进位标志=清AX=文件描述字失败进位标志=置AX =错误代码,1:功能号无效,2:文件未找到,3:路径未找到,4:无描述字可用,5:拒绝访问⑤INT 21中断3EH号功能作用:关闭文件调用:AH=3EHBX=文件描述字返回:成功进位标志=清失败进位标志=置AX =错误代码,6:描述字无效⑥INT 21H中断3FH号功能作用:读文件调用:AH=3FHBX=文件描述字CX=所读字节数DS:DX=段:缓冲区位移返回:成功进位标志=清AX=实际读字节数,0:文件结束失败进位标志=置AX =错误代码,5:拒绝访问,6:无描述字可用⑦INT 21H中断40H号功能作用:写文件调用:AH=40HBX=文件描述字CX=写的字节数DS:DX=缓冲区段:位移返回:成功进位标志=清AX=实际写字节数,0:盘满失败进位标志=置AX =错误代码,5:拒绝访问,6:无描述字可用⑧INT 21H中断42H号功能作用:移动文件指针调用:AH=42HAL=方式码,0:从文件开始绝对字节位移1:从当前位置的字节位移2:从文件尾的字节位移BX=文件描述字CX=最有效一半位移(高字)DX=次有效一半位移(低字)返回:成功进位标志=清DX=最有效一半位移(高字)AX=次有效一半位移(低字)失败进位标志=置AX =错误代码,1:功能号无效,6:描述字无效2、文件控制块(FCB)数据格式驱动器号,“文件名 扩展名”对于驱动器号来说,1:A驱,2:B驱,3:C分区,4:D分区,等等依崐次类推。对于文件名和扩展名来说,按8.3格式构造文件,总共11个字符,文崐件名不够8个字符用空格补齐。例如,DB 4,'MY_RUN COM',21 DUP(?)定义一个D盘上文件名为MY_RUN.COM的文件控制块二、实现方法下面给出两段程序,一个是安装程序,另一个是检验程序。工作过程崐简图如下:硬盘 内存 软盘┌──────┐ ┌──────┐├──────┤ ① ├──────┤│ 目录区 │←──────────────┤ ││ 首簇号 ├─┐③ ┌──────┐ │ 安装程序 │├──────┤ └─→│ 缓冲区 │ ② ├──────┤│ 数据区 │ │ │←──┤被加密的文件││被加密的文件│←───┤被加密的文件│ │(含检验程序)││(含检验程序)│ ④ │(含检验程序)│ ├──────┤├──────┤ ├──────┤ │ ││ │ │ │ │ │└──────┘ └──────┘ └──────┘①通过安装程序将软盘上被加密的软件拷贝到硬盘上,这样可以在硬崐盘的目录区中产生一个目录项,并给该文件确定一个首簇号。②将软盘上的被加密的文件送入到内存缓冲区中。③把硬盘上的被加密的文件的首簇号送入到内存缓冲区被加密的文件崐中的指定单元。④把内存缓冲区中的被加密文件的内容再保存到硬盘上被加密的文件崐中。三、一个演示实例;****MY_INST.ASM****CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 100HBEGIN:MOV DX,OFFSET DIME_2;打开A盘上MY_RUN.COM文件MOV AL,2MOV AH,3DHINT 21HPUSH AX;保存文件句柄MOV BX,AXMOV CX,0FFF0HMOV DX,OFFSET DIME_0;把A盘上MY_RUN.COM读到内存MOV AH,3FHINT 21HPOP BXPUSH AX;保存文件句柄MOV AH,3EH;关闭文件INT 21HMOV DX,OFFSET DIME_1;在D盘上建立MY_RUN.COM文件MOV CX,20HMOV AH,3CHINT 21HPUSH AX;保存文件句柄MOV DX,OFFSET DIME_0POP BXPOP CXPUSH BXMOV AH,40H;将内存中MY_RUN.COM内容写入到D盘MY_RUM.COMINT 21HPOP BXMOV AH,3EHINT 21H;关闭文件MOV DX,OFFSET DIME_3MOV AH,1AH;设置磁盘传输地址INT 21HMOV DX,OFFSET DIME_4MOV AH,11H;查找目录项INT 21HMOV DX,OFFSET DIME_1MOV AH,3DHMOV AL,02HINT 21H;打开文件PUSH AX;保存文件句柄MOV BX,AXMOV AX,4200HMOV CX,0MOV DX,WORD PTR DIME_5;移动文件指针到MY_RUN.COM的指定单元INT 21HPOP BXMOV AH,40HMOV DX,OFFSET DIME_3+1BH;缓冲区第26、27字节为该文件在硬盘的首簇号MOV CX,2INT 21H;把MY_RUN.COM文件的首簇号写入到文件中MOV AH,3EHINT 21H;关闭文件MOV AX,4C00HINT 21H;返回DOSDIME_0 DB 7000H DUP(?);开辟一个数据区,存放被加密文件DIME_1 DB "D:MY_RUN.COM",0DIME_2 DB "A:/MY_RUN.COM",0DIME_3 DB 40H DUP(?);保留40H字节的内存缓冲区DIME_4 DB 4,"MY_RUN COM",21 DUP(?);文件控制块数据形式DIME_5 DW 0064HCODE ENDSEND BEGIN;****MY_RUN.ASM****CODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 100HBEGIN:JMP STARTDIME_1 DB 40H DUP(0);保留40H字节的缓冲区DIME_2 DB 4,"MY_RUN COM",21 DUP(0);文件控制块数据格式DIME_3 DB 0,0START:MOV AH,1AHMOV DX,OFFSET DIME_1;设置数据传输地址INT 21HMOV AH,11HMOV DX,OFFSET DIME_2;查找目录项INT 21HMOV DI,OFFSET DIME_3MOV SI,OFFSET DIME_1+1BH;目录项第26、27字节为该文件首簇号MOV CX,2CLDREPZ CMPSB;比较该文件在D盘中实际首簇号与该文件DIME_3单元的值是否相等JZ EXIT1 ;相等,转MOV AH,09H;不相等MOV DX,OFFSET MSG2;警铃提示INT 21HMOV AX,4C00H;终止程序运行,返回DOSINT 21HEXIT1:MOV AH,09HMOV DX,OFFSET MSG1;显示正确信息,继续运行程序INT 21HMOV AX,4C00HINT 21HMSG1 DB "Copyright Is Good",0DH,0AH,'$'MSG2 DB 07,07," Copyright Is Invalid",0DH,0AH,0DH,0AHDB "COPYRIGHT BY 607 SOFTWARE GROUP 1999",0DH,0AH,'$'CODE ENDSEND BEGIN本文的两段程序MY_INST.ASM和MY_RUN.ASM,在TURBO MASM V2.0下编崐译、连接生成COM文件,DOS6.22下调试通过。四、使用方法使用时将含有MY_INST.COM和MY_RUN.COM的文件的软盘插入到驱动器A崐中,运行MY_INST.COM文件把软盘上的MY_RUN.COM拷贝到硬盘(如D分区)崐的当前目录下。&127;当在硬盘上运行MY_RUN.&127;COM文件,&127;&127;如果检验程序提示崐“COPYRIGHT IS GOOD”表示该程序是通过软盘上的安装程序MY_INST.COM崐安装到硬盘上的。如果通过COPY命令或其他工具将软盘上的MY_RUN.COM拷崐贝到D盘上运行,&127;则检验程序警铃提示&127;“Copyright &127;Is &127;Invalid”&127;&127;,崐“COPYRIGHT BY 607 SOFTWARE GROUP 1999”,表示该程序是通过非法拷崐贝得到的。五、结束语最后,想要说的是,上述介绍的方法只是一个演示的例子,旨在起到崐抛砖引玉的作用。具体应用中用户可以把检验程序MY_RUN.COM嵌入到自己崐想要加密的软件中,安装程序使用MY_INST.&127;COM。为了更好对软件进行保崐护,通常还应考虑以下方面的问题。①为了加强安全性,可以在被加密的崐软件中多处设置“首簇号”来进行检验。②为了防止复制安装程序,可以崐在安装程序本身所具有的功能完成后,把自身销毁。可采用向其中填写杂崐乱无章数据的方法,来破坏安装程序的功能。③可以结合在安装软盘上制崐作密钥技术,当被加密软件或安装程序运行时检查软盘的密钥,这样也可以防止对安装程序的复制。


    最新回复(0)