以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 安全理论 』 (http://bbs.xml.org.cn/list.asp?boardid=65) ---- 硬盘加密初探 (http://bbs.xml.org.cn/dispbbs.asp?boardid=65&rootid=&id=37298) |
-- 作者:卷积内核 -- 发布时间:8/28/2006 2:05:00 PM -- 硬盘加密初探 //以下程序适用平台为WIN98/WINME,WIN2000或者更高版本不支持对硬盘直接读写操作。 我们都有知道硬盘的分区表位于0柱0面1扇区,在偏移地址1BE至1FD处就是硬盘的分区表内容,通常我们看硬盘分区表,只需用DEBUG即可,即是说: C:\>DEBUG -A100 MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13 INT 20 -G=100 -D3BE 3FF //SAVE PARTITION DATA INTO FILE AKING.DAT -N AKING.DAT -RCX :200 -W200 执行完上述指令,我们将会看到66个字节,其中最后两个字节必定为55AA,这是硬盘的主引导标志(也称自举标志),如果这两个字节不为55AA,那么你的硬盘将不能启动,因为电脑识别不了硬盘。而且在偏移地址1BE处一定是80H,否则在启动时会提示操作系统丢失。除去硬盘的自举标志,总共剩下达64个字节,每个硬盘占用16个字节,主机上的IDE口或EIDE口总共可以挂4个硬盘(外挂的不算),通常为安全起见我们可以将硬盘这重要的66个字节信息或多或少512个字节信息保存到一个文件中。每一个硬盘分区表的16个字节都有其对应的含义: 第一个字节:如果是引导分区,就是80H,如果不是,就是00H 第二个字节到第四个字节:是该分区的起始扇区号 第五个字节:标志字节,比如05表示扩展分区 第六个字节到第八个字节:该分区的终止扇区号 第九个字节到第十二个字节:该分区使用的扇区数 第十三个字到第十六个字节:该分区总共使用的扇区数 在了解完上述架构后,写出简单的加密程序就很简单了,比如说我对硬盘的自举标志55AA作一个异或XOR运算,第一次执行程序时硬盘被锁起,第二次执行时硬盘又被解锁,第三次执行时硬盘又被锁起。。。。除了对自举标志之外,我还可以对其它重要标志作异或运算,比如说对引导分区的标志字节80作异或运算,比如说隐藏某个扩展分等都可以实现。下面我用DEBUG写出汇编程序,在这里我以加锁/解锁自举标志来写程序。以上我已经声明如果你要使用我的这个程序请注意先做一张启动盘,将硬盘分区表先以一个文件的形式保存到FLOPPY DISK中,以防万一,请看程序: C:\>DEBUG -A100 MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13 JB ERROR MOV SI,03FE MOV BP,AA55 XOR [SI],BP MOV AX,0301 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13 JB ERROR CMP [SI],BP JNZ LOCK MOV DX,0150 MOV AH,9 INT 21 JMP END LOCK: MOV DX,0165 MOV AH,9 INT 21 JMP END ERROR: MOV DX,0180 MOV AH,9 INT 21 END: MOV AH,4CH INT 21H -N AKING.COM -RCX :200 -W100 -Q 至此,我们已将上述代码存成文件AKING.COM。你可以将AKING.COM这个文件COPY到软盘,从软盘启动计算机,第一次执行AKING.COM硬盘被锁住,再一次执行硬盘解锁。 以前读书时就对汇编以及如何用汇编对硬盘编程就很感兴趣,前两天偶然听到朋友问如何对硬盘加密,我想这是一种较为简单的方法,而且NT和2000以及XP均不去支持对硬盘的直接读写操作,在这种情况下,如果要对硬盘某一扇区进行读写操作,就需要用API来进行编程,如CreateFile,ReadFile,WriteFile等API函数。 |
-- 作者:卷积内核 -- 发布时间:8/28/2006 2:07:00 PM -- 在对硬盘主引导记录熟悉之后,就可以编出很多种硬盘加密程序(完全取决于你自已的需要),随着硬盘容量越来越大,其实我们可以将硬盘分为两个盘,一个是C盘,一个是D盘,平时将C盘重要的文件拷贝至D盘,并将D盘加锁,这样当C盘受到破坏时,就可以解锁D盘,将D盘上存储的文件恢复过来,我下面的程序就是以这一原理来编写的,请看代码: Announcement:You can use any editor to edit source codes,such as Notepad,QE,Edit and so on. Source Codes: data segment FQB DB 512 dup(0);To define a buffer,which will be used to store harddisk's MBR MESSAGE1 DB 0DH,0AH,"C------------LOCK C" DB 0DH,0AH,"D------------LOCK D" DB 0DH,0AH,"E------------Exit" DB 0DH,0AH,"Enter your selection!$" MESSAGE2 DB 0DH,0AH,"OK!$" MESSAGE3 DB "NOT FOUND DRIVE D!$" ERROR DB "ENTER ERROR!$" IOERROR DB "HARDDISK I/O ERROR!$" CXD DW 0 data ends stack segment DB 512 dup(0) stack ends code segment assume cs:code,ds:data,ss:stack START: mov AX,0201 mov BX,OFFSET FQB mov CX,0001 mov CXD,CX mov DX,0080 INT 13;Read Main Boot Record,which is in 0 Header,0 Cylinder,1 Sector JB ERR MOV DX,OFFSET MESS1 MOV AH,9 INT 21 AA0: ;Accept user's enter MOV AH,1 INT 21 CMP AL,'E';Exit JZ EXIT CMP AL,'e';Exit JZ EXIT CMP AL,'C';Lock Drive C JZ LockC CMP AL,'c';Lock Drive C JZ LockC CMP AL,'D' JZ LockD;//Lock Drive D CMP AL,'d' JZ LockD;//Lock Drive D LEA DX,ERROR;Enter Error MOV AH,9 INT 21 JMP EXIT LockC: MOV AH,55H CLD MOV SI,OFFSET FQB MOV DI,SI MOV CX,01FE AA1: LOADSB XOR AL,AH ROL AH,1 STOSB;//Encrypt Partition-Table LOOP AA1 AA3: MOV AX,0301 MOV BX,OFFSET BUF MOV CX,CXD MOV DX,0080 INT 13 JB ERR LEA DX,MESSAGE2 MOV AH,9 INT 21 MOV AX,0040;Reset MOV DS,AX MOV AX,1234 MOV SI,0072 MOV [SI],AX JMP FFFF:0000 INT 20 LockD: CMP BYTE PTR [BUF+1D0],0 JNZ AA2 MOV DX,MESSAGE3;No Drive D MOV AH,9 INT 21 JMP EXIT AA2: MOV AX,0201 MOV BX,OFFSET BUF MOV CX,WORD PTR [BUF+1D0];Read Logic Drive D Partition-Table MOV DX,0080 INT 13 JB ERR JMP LockC ERR: MOV DX,OFFSET IOERROR MOV AH,9 INT 21 EXIT: MOV AH,4CH INT 21 code ends 上面的程序适合于只有两个分区的硬盘,不过程序也可以改进成多个分区的硬盘。在注释RESET处是热启动的代码,即交1234送至偏移地址0040:0072处,然后再跳转到FFFF:0处,即可以进行热启动。 |
-- 作者:卷积内核 -- 发布时间:8/28/2006 2:11:00 PM -- 上一篇文章解析了硬盘上有两个分区的加密过程,下面的程序将允许有N个分区的加密过程: Source Codes: data segment end start
|
-- 作者:Fck -- 发布时间:8/31/2006 11:22:00 PM -- 好深的程序.我菜鸟5555 能做我师傅吗. |
-- 作者:feifei805 -- 发布时间:9/13/2006 10:10:00 AM -- 好高深啊 |
-- 作者:longshentailang -- 发布时间:9/20/2006 8:08:00 PM -- 学习,对汇编还是要求很熟悉的! |
-- 作者:q282466667 -- 发布时间:10/21/2006 10:51:00 AM -- 我是个刚走进计算机的小菜鸟 , 想找个计算机群和大家讨论问题,请大哥哥大姐姐有群的MM一下偶让偶加加 。。。。。。。。。。偶QQ282466667 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
93.750ms |