硬盘锁程序源码

硬盘锁程序

      些硬盘锁程序有两部分组成:安装程序的install.exe和硬盘锁程序数据文件。这个程序是我改写了江民硬盘锁程序而得到的。由于此网页编排上有些问题,所以复制这上面的代码可能编释出错。所以你可以在我的网站上去下载:

http://www.fullpassion.cn/HDprogramming/hdlock.htm

 


 

Hdlock的安装程序:Install.cpp

#include <stdio.h>

#include <afxwin.h>

void main()

{

CFile PhysicalDriver0(".//PHYSICALDRIVE0", CFile::modeReadWrite);

CFile hdlock_dat("hdlock.dat", CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);

char buffer[512];

const char cycle_table[] = {0x00,0x00,0x01,0x00,0x05,0xFE,0x7F,0x05,0x3F,0x00,0x00,0x00,0x47,0x39,0x40,0x00};//write to 0x1BE

const char password[] = {0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64};//write to 0x1B0

int n = 0;

//将主引导扇区备份到(0,0,3)

PhysicalDriver0.SeekToBegin();

PhysicalDriver0.Read(buffer, 512);

for(int i = 0x1B0; i < 0x1B0 + 0x8; i++)

if(password[i - 0x1B0] == buffer[i])n++;

if(n == 8){printf("Hdlock have been installed!/n");return;}

//printf("%X/n", i - 0x1B0);

PhysicalDriver0.Seek(512 * 2, CFile::begin);

PhysicalDriver0.Write(buffer, 512);

 

intFileLength = hdlock_dat.GetLength();

hdlock_dat.Read(buffer, FileLength);

for(i = 0x1B0; i < 0x1B0 + 0x8; i++)

buffer[i] = password[i - 0x1B0];

//hdlock.dat + normal_table -> (0,0,2)

PhysicalDriver0.Seek(512 * 1, CFile::begin);

PhysicalDriver0.Write(buffer, 512);

//hdlock.dat + normal_table -> (0,0,1)

PhysicalDriver0.SeekToBegin();

PhysicalDriver0.Write(buffer, 512);

//hdlock.dat + cycle_table -> (0,0,4)

for(i = 0x1BE; i < 0x1BE + 0x10; i++)

buffer[i] = cycle_table[i - 0x1BE];

PhysicalDriver0.Seek(512 * 3, CFile::begin);

PhysicalDriver0.Write(buffer, 512);

}

    此程序用visual c++6.0进行编释(在“工程|设置|常规|Microsoft基础类”中选择“使用MFC作为静态链接库”)。得到Install.exe。


Hdlock的主程序:Hdlock.asm

 

.286

CODE     SEGMENT

       ASSUME CS:CODE,DS:CODE,ES:CODE

START:

       DB   256 DUP(0)

BEG:       PUSH      DS

       PUSH      ES

       MOV      CX, 0100H

       MOV      DI, 0600H

       MOV      AX, 0

       MOV      DS, AX

       MOV      ES, AX

       MOV      SI, 7C00H

       REPNZ   MOVSW

       MOV      AX, GAP+600H

       JMP AX

       PWBUFF DB   'PASSWORD', 0

;----------------------------------------

       GAP = $-BEG

       MOV      AX, 0600H

       MOV      BH, 0F0H

       MOV      CX, 0

       MOV      DX, 184FH

       INT 10H

       MOV      SI, PWBUFF-BEG+0600H

       MOV      DL, 1AH

SHPW:    MOV      DH, 10H

       MOV      AH, 2

       MOV      BH, 0

       INT 10H

       MOV      AL, [SI]

       CMP       AL, 0

       JZ    PWENTER

       MOV      AH, 9

       MOV      CX, 1

       MOV      BH, 0

       MOV      BL, 70H

       INT 10H

       INC DL

       INC SI

       JMP SHPW

PWENTER:MOV   CX, 4

       MOV      AX, 0

       MOV      ES, AX

       MOV      DI, 0801H

       REPZ      STOSW

       MOV      CX, 9

       MOV      DI, 0801H

       MOV      DL, 23H

KEYREAD:MOV    AH, 0

       INT 16H

       CMP       AL, 0DH

       JZ    CMPPW

       MOV      AH, 2

       MOV      DH, 10H

       MOV      BH, 0

       INT 10H

       CMP       AL, 8

       JZ    BACKSPACE

       PUSH      AX

       MOV      AH, 0EH

       MOV      AL, 2AH

       MOV      BL, 7

       INT 10H

 

       POP AX

 

       ADD       AL, 23H

       MOV      [DI], AL

       INC DI

       DEC       CX

       CMP       CX, 0

       JZ    OVERFLOW

       INC DL

       JMP KEYREAD

BACKSPACE:

       PUSH      CX

       MOV      AH, 3

       MOV      BH, 0

       INT 10H

       POP CX

       CMP       DL, 23H

       JZ    KEYREAD

       CMP       DI, 0800H

       JZ    KEYREAD

       MOV      AH, 2

       DEC       DL

       INT 10H

       PUSH      CX

       MOV      CX, 1

       MOV      AH, 9

       MOV      AL, 0

       MOV      BL, 7

       INT 10H

       POP CX

       MOV      AX, 0

       MOV      [DI], AX

       DEC       DI

       MOV      [DI], AX

       CMP       CX, 09H

       JE    AJUMP

       INC CX

AJUMP:  JMP KEYREAD

OVERFLOW:

       MOV      DH, 10H

       MOV      AH, 2

       MOV      DL, 23H

       MOV      BH, 0

       INT 10H

       MOV      AH, 9

       MOV      AL, 0

       MOV      BL, 7

       MOV      CX, 9

       INT 10H

       JMP PWENTER

CMPPW: MOV      AX, 0

       MOV      ES, AX

       MOV      DS, AX

       MOV      SI, 07B0H

       MOV      DI, 0801H

       MOV      CX, 4

       REPZ      CMPSW

       JZ    RIGHT

       JMP WRONG

RIGHT:   MOV      AX, 0

       MOV      ES, AX

       MOV      AX, 0201H

 

       MOV      CX, 0002H

 

       MOV      DX, 0080H

       MOV      BX, 0F000H

       INT 13H

       MOV      SI, 0F000H

       CALL      WRITE

       MOV      AX, 0000H

       MOV      ES, AX

       MOV      AX, 0201H

       MOV      CX, 0003H

       MOV      DX, 0080H

       MOV      BX, 7C00H

       INT 13H

       MOV      AX, 7C00H

       JMP AX

WRONG:       MOV      AX, 0000H

       MOV      ES, AX

       MOV      AX, 0201H

       MOV      CX, 0004H

       MOV      DX, 0080H

       MOV      BX, 0F000H

       INT 13H

       MOV      SI, 0F000H

       CALL      WRITE

       INT 13H

       INT 19H

WRITE   PROC

       MOV      DX, 1F6H

       MOV      AL, 0A0H

       OUT       DX, AL

 

       MOV      DX, 1F2H

       MOV      AL, 1

       OUT       DX, AL

 

       MOV      DX, 1F3H

       MOV      AL, 1

       OUT       DX, AL

 

       MOV      DX, 1F4H

       MOV      AL, 0

       OUT       DX, AL

 

       MOV      DX, 1F5H

       MOV      AL, 0

       OUT       DX, AL

 

       MOV      DX, 1F7H

       MOV      AL, 30H

       OUT       DX, AL

 

AAAA:    IN   AL, DX

       TEST      AL, 8

       JZ    AAAA

       MOV      CX, 256

       MOV      DX, 1F0H

       REP OUTSW

       RET

WRITE   ENDP

CODE     ENDS

       END       START

 

此程序用masm5.0和link5.0进行编释。得到hdlock.exe。


对于hdlock.exe我们还要进行一些处理,得到Install.cpp中的hdlock.dat文件。

打开winhex,用其打开hdlock.exe文件,如下图所示:

找到程序入口点,一般就在下面第一个不是零的数字处如下图所示:

选中入口点到下面的所有内容,然后右键“编辑|复制区块|到新建文件”,保存为hdlock.dat文件。

最后把Install.exe和hdlock.dat放在一起,运行Install.exe就可以安装硬盘锁了。重新启动电脑,机器自检完成后进入如下界面:

    输入密码正确,就可以进入操作系统了。否则机器无法进入操作系统。在一次输入密码错误后,即使用其它的启动盘进行启动,也无法启动。在其它的机器上挂上这个硬盘,那台机器也无法启动。因为硬盘分区表发生逻辑死锁。


    万一hdlock.asm编写不正确,安装之后,是很麻烦的一件事。因为硬盘无法修复。我在写这个程序的时候因为没有在虚拟机上安装,由于程序有错误,所以硬盘被死锁,让我苦恼的几天。最后我想出的一个好办法可以很容易恢复这个硬盘正常运行。就是编写引导程序来恢复主引导扇区。过程如下:

1.在安装此程序之前:先用winhex备份主引导扇区到5,6,7,8,9,10,11,12,13,14,15扇区(多备份几个以免发生万一)。
2.然后编写以下程序:

.286
CODE SEGMENT
 ASSUME CS:CODE, DS:CODE, ES:CODE
START:
 PUSH DS
 PUSH ES
 MOV CX, 0100H
 MOV DI, 0600H
 MOV AX, 0000H
 MOV DS, AX
 MOV ES, AX
 MOV SI, 7C00H
 REPNZ MOVSW
 MOV AX, 0600H+AAAAA-START
 JMP AX
AAAAA:
 MOV AX, 0201H
 MOV CX, 0008H  ;READ 8
 MOV DX, 0081H
 MOV BX, 0F000H
 INT 13H
 MOV AX, 0301H
 MOV CX, 0001H  ;WRITE 1
 MOV DX, 0081H
 MOV BX, 0F000H
 INT 13H
 INT 19H     ;RESTART
CODE ENDS
 END START


        此程序用masm5.0和link5.0编释。得到boost.exe。同样用上面的方法找到程序入口点,这次不是把数据复制到一个文件,而是一个U盘的主引导扇区中(注意,这块U盘里的数据一定是在你不需要的情况下才能这个做,除非你能恢复你覆盖的数据)。当你的硬盘锁有问题时,进入BIOS设置中,把第一启动盘设置为USB-HDD启动,保存设置。插上这块U盘,重新启动电脑。当BIOS询问是否修改MBR时,按Y键。然后重新启动电脑,把BIOS设置为第一启动盘从硬盘启动。保存设置。重新启动电脑时,你会发现硬盘锁不见了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值