400-680-8581
欢迎光临:路由通
【路由通】IT资讯,IT攻略
位置:路由通 > 资讯中心 > 零散代码 > 文章详情

硬盘锁汇编程序

作者:路由通
|
79人看过
发布时间:2013-04-23 05:23:01
标签:
大家看后一定看出了一些问题,为了能够让这个硬盘锁可以跨平台,设置为输入正确密码后就将正确的分区表读入0柱0道1扇,输入不正确密码后就将江明锁读入0柱0道1扇,明白人一下就看出了,如果电脑主人上次用正确密码进入了电脑,而电脑非法使用者一次都不试密码,就直接用软盘或光盘或USB盘引导,那么就可以非法访问硬盘了,说实话,这个问题困扰了我许久,一直不得其解,不这样做,就得在输入正确密码后就将正确的分区表读入0柱0道1扇
硬盘锁汇编程序
首先,大略介绍一下程序,是用汇编写成,程序有2个文件:hdboot.exe、hdboot.dat ,其中hdboot.dat是用于装入硬盘0柱0道1扇的硬盘锁,hdboot.exe实现
    (1)把hdboot.dat装入硬盘0柱0道1扇并设置硬盘锁的密码,
    (2)修改密码,
    (3)卸载硬盘锁

    在此,主要介绍 hdboot.dat,因为硬盘锁本身受空间限制,必须严格控制在1bdH字节内,(知道为什么吗?)所以是不能用masm先写原程序,再编译,基本上是用debug的A命令一次性写出来的,把这些反汇编了出来,加上一些注释,给大家看看,互相学习好吗? 

;这一段是将整个硬盘锁从0000:7c00移至0000:0600,以免被后来读入的代码覆盖
0F6D:0100 1E      PUSHDS                
0F6D:0101 06      PUSHES                
0F6D:0102 B90001    MOVCX,0100              
0F6D:0105 BF0006    MOVDI,0600              
0F6D:0108 B80000    MOVAX,0000              
0F6D:010B 8ED8     MOVDS,AX               
0F6D:010D 8EC0     MOVES,AX               
0F6D:010F BE007C    MOVSI,7C00              
0F6D:0112 F2      REPNZ                 
0F6D:0113 A5      MOVSW                 
0F6D:0114 EA1A060000  JMP0000:061A ;长跳转至移动后的代码,也就是从011a处开始执行           
0F6D:0119 90      NOP                 
0F6D:011A EB09     JMP0125               
                
;这一段是对屏幕进行初始化,显示字符串"PASSWORD"
0F6D:0125 B80006    MOVAX,0600              
0F6D:0128 B7F0     MOVBH,F0               
0F6D:012A B90000    MOVCX,0000              
0F6D:012D BA4F18    MOVDX,184F              
0F6D:0130 CD10     INT10    ;初始化屏幕(前景为黑色,背景为灰白,字符闪烁)            
0F6D:0132 B21A     MOVDL,1A               
0F6D:0134 BE1C06    MOVSI,061C   ;从061cH处显示字符(因为程序将被读入了0000:0600处,
                      ;实际显示的也就是现在的11cH处开始的字符串)            
0F6D:0137 B402     MOVAH,02               
0F6D:0139 B610     MOVDH,10               
0F6D:013B B700     MOVBH,00               
0F6D:013D CD10     INT10     ;设光标位置(10H行1aH列)
0F6D:013F 8A04     MOVAL,[SI]              
0F6D:0141 3C00     CMPAL,00               
0F6D:0143 741B     JZ0160    ;是否已显示完字符串,是则跳至从键盘读取密码处           
0F6D:0145 B409     MOVAH,09               
0F6D:0147 B90100    MOVCX,0001              
0F6D:014A B700     MOVBH,00               
0F6D:014C B370     MOVBL,70               
0F6D:014E CD10     INT10     ;显示一个字符           
0F6D:0150 FEC2     INCDL     ;光标后移一位           
0F6D:0152 46      INCSI     ;字符指针后移一位          
0F6D:0153 EBE2     JMP0137    ;继续显示下一字符           

0f6d:011c        db &39;PASSWARD&39;00   ;用于显示的字符串
             
; 从键盘读取密码
0F6D:0160 B90400    MOVCX,0004              
0F6D:0163 B80000    MOVAX,0000              
0F6D:0166 8EC0     MOVES,AX               
0F6D:0168 BF0108    MOVDI,0801              
0F6D:016B F3      REPZ                 
0F6D:016C AB      STOSW      ;在0000:0801开始处开一片长度为8个字节的缓冲区
                      ;(用00H来标记),用于存放从键盘读入的密码,(密码
                      ;最多为8个字符,最少为0个字符)           
0F6D:016D B90900    MOVCX,0009   ;最多读9次键盘(当然第9次是重头读过)           
0F6D:0170 BF0108    MOVDI,0801   ;从801H处开始写密码           
0F6D:0173 B223     MOVDL,23               
0F6D:0175 B400     MOVAH,00               
0F6D:0177 CD16     INT16     ;读键盘             
0F6D:0179 3C0D     CMPAL,0D               
0F6D:017B 7479     JZ01F6    ;是回车则跳至密码比较处            
0F6D:017D B402     MOVAH,02               
0F6D:017F 90      NOP                 
0F6D:0180 90      NOP                 
0F6D:0181 B610     MOVDH,10               
0F6D:0183 B700     MOVBH,00               
0F6D:0185 CD10     INT10     ;设置光标位置(当然是"PASSWARD"字符串后面了)           
0F6D:0187 3C08     CMPAL,08               
0F6D:0189 7437     JZ01C2    ;是退格键则跳至退格处理            
0F6D:018B 50      PUSHAX                
0F6D:018C B40E     MOVAH,0E               
0F6D:018E B02A     MOVAL,2A               
0F6D:0190 B307     MOVBL,07               
0F6D:0192 CD10     INT10     ;显示一个""(没有回显的密码输入是不是很恐怖)            
0F6D:0194 58      POPAX                
0F6D:0195 0423     ADDAL,23    ;密码字符加23H(受空间限制,加上该程序在系统启
                      ;动前执行,在此,我只是简单的将密字加上23H,
                      ;如果谁有好而小巧的算法,别忘了告诉我)            
0F6D:0197 8805     MOV[DI],AL              
0F6D:0199 47      INCDI                
0F6D:019A 49      DECCX                
0F6D:019B 83F900    CMPCX,+00             
0F6D:019E 740A     JZ01AA    ;是否读了第9次键盘,是跳转至输入溢出处
0F60:01A0 FEC2     INC   DL       
0F60:01A2 EBD1     JMP   0175      

;本段用于处理键盘输入超过8次
0F6D:01AA B610     MOVDH,10               
0F6D:01AC B402     MOVAH,02               
0F6D:01AE B223     MOVDL,23               
0F6D:01B0 B700     MOVBH,00               
0F6D:01B2 CD10     INT10                
0F6D:01B4 B409     MOVAH,09               
0F6D:01B6 B000     MOVAL,00               
0F6D:01B8 B307     MOVBL,07               
0F6D:01BA B90900    MOVCX,0009              
0F6D:01BD CD10     INT10                
0F6D:01BF EB9F     JMP0160    ;重新读取密码            
               
;本段用于退格处理
0F6D:01C2 51      PUSHCX                
0F6D:01C3 B403     MOVAH,03               
0F6D:01C5 B700     MOVBH,00               
0F6D:01C7 CD10     INT10     ;读光标位置            
0F6D:01C9 80FA23    CMPDL,23              
0F6D:01CC 74A7     JZ0175    ;光标是否已到头,是则去读下一密字            
0F6D:01CE 81FF0008   CMPDI,0800             
0F6D:01D2 74A1     JZ0175    ;密码缓冲是否已到头,是则去读下一密字            

0F6D:01D4 B402     MOVAH,02               
0F6D:01D6 FECA     DECDL                
0F6D:01D8 CD10     INT10                
0F6D:01DA B40E     MOVAH,0E              
0F6D:01DC B000     MOVAL,00               
0F6D:01DE B307     MOVBL,07               
0F6D:01E0 CD10     INT10     ;光标前移一位,并删除一个""            
0F6D:01E2 B80000    MOVAX,0000              
0F6D:01E5 8905     MOV[DI],AX   ;密码缓冲当前指针处清零            
0F6D:01E7 4F      DECDI     ;密码缓冲指针减一            
0F6D:01E8 8905     MOV[DI],AX   ;密码缓冲当前指针处清零            
0F6D:01EA 59      POPCX                
0F6D:01EB EB88     JMP0175    ;重新读键盘            

;本段用于比较密字
0F6D:01F6 B80000    MOVAX,0000              
0F6D:01F9 8EC0     MOVES,AX               
0F6D:01FB 8ED8     MOVDS,AX               
0F6D:01FD BEB007    MOVSI,07B0              
0F6D:0200 BF0108    MOVDI,0801              
0F6D:0203 B90400    MOVCX,0004              
0F6D:0206 F3      REPZ                 
0F6D:0207 A7      CMPSW                 
0F6D:0208 7404     JZ020E    ;字符串相同则跳转至正确引导系统代码            
0F6D:020A EB3C     JMP0248    ;字符串不相同则跳转至加密硬盘代码            

;正确引导系统代码                
0F6D:020E B80000    MOVAX,0000             
0F6D:0211 8EC0     MOVES,AX               
0F6D:0213 B80102    MOVAX,0201              
0F6D:0216 B90200    MOVCX,0002              
0F6D:0219 BA8000    MOVDX,0080              
0F6D:021C BB00F0    MOVBX,F000              
0F6D:021F CD13     INT13                
0F6D:0221 B80103    MOVAX,0301              
0F6D:0224 B90100    MOVCX,0001              
0F6D:0227 BA8000    MOVDX,0080              
0F6D:022A CD13     INT13     ;0柱0道2扇是HDBOOT.EXE写入的由硬盘锁代码
                      ;(也就是大家现在看到的代码)+正确的硬盘分
                      ;区表组成,将其写入0柱0道1扇后操作系统就可
                      ;正常读取硬盘了            
0F6D:022C B80000    MOVAX,0000              
0F6D:022F 8EC0     MOVES,AX               
0F6D:0231 B80102    MOVAX,0201              
0F6D:0234 B90300    MOVCX,0003              
0F6D:0237 BA8000    MOVDX,0080              
0F6D:023A BB007C    MOVBX,7C00              
0F6D:023D CD13     INT13     ;0柱0道3扇是HDBOOT.EXE写入的原MBR区的备份,将
                      ;其读入0000:7c00处           
0F6D:023F EA007C0000  JMP0000:7C00  ;长跳转至原MBR代码处执行(以后怎么样引导就不
                      ;是我们现在讨论的了),从而正确引导系统            

;加密硬盘代码
0F6D:0248 B80000    MOVAX,0000             
0F6D:024B 8EC0     MOVES,AX               
0F6D:024D B80102    MOVAX,0201              
0F6D:0250 B90400    MOVCX,0004              
0F6D:0253 BA8000    MOVDX,0080              
0F6D:0256 BB00F0    MOVBX,F000              
0F6D:0259 CD13     INT13                
0F6D:025B B80103    MOVAX,0301              
0F6D:025E B90100    MOVCX,0001              
0F6D:0261 BA8000    MOVDX,0080              
0F6D:0264 CD13     INT13     ;0柱0道4扇是HDBOOT.EXE写入的由硬盘锁代码(也就是
                      ;大家现在看到的代码)+江明原理的逻辑锁(循环分区表),将其写入0柱0道
                      ;1扇后操作系统就被完全锁死了(不能从其它盘引导)           
0F6D:0266 CD19     INT19     ;不用多说吧,相当于热启动           
   
  大家看后一定看出了一些问题,为了能够让这个硬盘锁可以跨平台,设置为输入正确密码后就将正确的分区表读入0柱0道1扇,输入不正确密码后就将江明锁读入0柱0道1扇,明白人一下就看出了,如果电脑主人上次用正确密码进入了电脑,而电脑非法使用者一次都不试密码,就直接用软盘或光盘或USB盘引导,那么就可以非法访问硬盘了,说实话,这个问题困扰了我许久,一直不得其解,不这样做,就得在输入正确密码后就将正确的分区表读入0柱0道1扇,然后在操作系统启动后再做手脚把0柱0道1扇的分区表加密,这样做有两个问题,
(1)操作系统启动做的手脚一定是放在操作系统的自启动中(如DOS的AUTOEXEC.BAT、WIN98的"启动"等),这样做显然不安全,
(2)同时这样做显然不能做到"跨平台",所以我只能在程序说明中告诉使用者,如果离开电脑,就故意输入一错误密码,那么逻辑锁(循环分区表)就将硬盘锁死了,这样电脑
非法使用者用软盘或光盘或USB盘都不能引导了,(大家知道所谓江明锁,就是让扩展分区指向本分区表所在的扇,从而使启动程序陷入死循环,这个东西也不知害了多少硬盘,也该让他做做好事了),要是谁有更好的方法
 
相关文章
交换机下接路由器的方法
今天买了IPAD3,有电脑,有网线(固定IP的光缆),上层是路由器+交换机,怎样才能让又买的无线路由器既能台式电脑上网又能让PAD无线上网呢?想半天试了又试才得到解决方法:先把无线路由器接入台式电脑,进入路由http://192.168.1.1,输入用户名密码(用户名密码和路由地址在包装和说明里都有)
2013-04-22 04:50:10
54人看过
无线路由器当无线AP如何设置问题

无线路由器当无线AP(无线交换机)使用,怎么设置?

在现有的有线网络中实现无线功能时,可以把无线路由器当作一个无线AP(无线交换机)使用,设置步骤如下:

1、单机连接并登陆无线路由器,更改无线路由器的LA...

2013-04-20 05:36:35
261人看过
路由通教你把无线路由器当无线交换机使用

虽然现在使用无线路由器的人很多,但难免也也要用到交换机,路由通就教大家怎么把无线路由器当无线交换机使用

1.首先要关闭本地连接,打开无线连接,连接到无线路由器上。

 

 
 
&nb...
2013-04-19 05:10:15
300人看过
如何辨别无线路由器的真伪

现在的路由器市场已经没有那么纯净了,相信大家看到思科、华为3com、D-LINK等著名网络设备品牌的产品相继出现假货都会非常震撼。近日,侠诺路由器也被曝出现假货。这样算来,已经有四家大品牌产品出现了...

2013-04-17 09:00:37
123人看过
无线路由器速度慢?个人总结
1:无线传输靠的是信道传输,而信号很容易受到干扰,比如微波炉.手机都可以干扰信号, 你要确定你的无线宽带路由是在哪的 ,因为混凝土墙壁会衰减无线信号传出,承重墙就更不用说了.
2:无线路由一定要设置密码...
2013-04-16 05:16:48
107人看过
小心你的无线路由器泄露了你的秘密

现在无线路由器使用的人越来越多,但也要小心了:

2013年4月10日热线消息:家中安装一个无线路由器,手机、Ipad、笔记本电脑等设备就可无线 上网,这已经成为不少人熟悉的生活方式,但国家信息安全漏洞...

2013-04-12 12:40:58
144人看过