硬盘加密--解析三 上一篇文章解析了硬盘上有两个分区的加密过程,下面的程序将允许有N个分区的加密过程: Source Codes:
data segment FQB DB 512 dup(0);a buffer that will be used to store partition-table FIRSTP DB 40 dup(0);storing the first partition information SECONDP DB 00,01,00,00 DB 512 dup(0) INFO1 DB "My Computer has the following drives:!$" INFO2 DB 0DH,0AH,"Please enter the drive needed to be locked!$" INFO3 DB 0DH,0AH,"Invalid Enter!$" ERROR DB 0DH,0AH,"Harddisk I/O error!$" data ends code segment assume cs:code,ds:data START: MOV AX,1000H MOV DS,AX MOV SI,OFFSET SECONDP; MOV DI,OFFSET FIRSTP; SUB DI,4 READP: MOV AX,0201 MOV BX,OFFSET FQB MOV CX,WORD PTR [SI+1] MOV DX,0080 INT 13 JB ERROR ADD SI,4 ADD DI,4 ;The first partition ADD BX,1BE MOV AX,WORD PTR [BX+1] MOV [DI],AX MOV AX,WORD PTR [BX+3] MOV [DI+2],AX ;The second partition ADD BX,10H MOV AX,WORD PTR [BX+1] MOV [SI],AX MOV AX,WORD PTR [BX+3] MOV [SI+2],AX CMP WORD PTR [SI+1],0;Determine whether the header,sector is 0 or not JNZ READP LEA DX,INFO1 MOV AH,9 INT 21H MOV DL,43H MOV DI,OFFSET FIRSTP DISP: CMP WORD PTR [DI+1],0 JZ ENCRYPT MOV AH,02 INT 21H MOV CL,DL CMP BYTE PTR [DI+3],0 JNZ NLOCK JMP ENCRYPT NLOCK: MOV DL,',' INT 21 MOV DL,CL INC DL ADD DI,4 JMP DISP ENCRYPT: MOV AH,9 LEA DX,INFO2 INT 21 MOV AH,1 INT 21 CMP AL,'A' JB ERROR1 CMP AL,'Z' JA ERROR1 SUB AL,43H XOR AH,AH;AH=0 SHL AX,1 SHL AX,1 MOV SI,OFFSET SECONDP ADD SI,AX MOV AX,0201 MOV BX,OFFSET FQB MOV CX,[SI+1];Sector,Cylinder MOV DH,[SI];Header MOV DL,80H;The first harddisk:80,the second:81 INT 13 JB ERROR ADD BX,1C1H MOV AX,[BX] XCHG [BX-20],AX MOV [BX],AX MOV AX,0301 MOV BX,OFFSET FQB MOV CX,[SI+1] MOV DH,[SI] MOV DL,80H INT 13 JB ERROR MOV AX,0040 MOV DS,AX MOV SI,0072 MOV AX,1234 MOV [SI],AX JMP FFFF:0 INT 20H ERROR1: LEA DX,INFO3 MOV AH,9 INT 21H JMP EXIT ERROR: LEA DX,INFO2 MOV AH,9 INT 21 EXIT: MOV AH,4CH INT 21H code ends
end start

|