硬盘锁程序
些硬盘锁程序有两部分组成:安装程序的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设置为第一启动盘从硬盘启动。保存设置。重新启动电脑时,你会发现硬盘锁不见了。