硬盘加密----解析三

类别:编程语言 点击:0 评论:0 推荐:

硬盘加密--解析三
上一篇文章解析了硬盘上有两个分区的加密过程,下面的程序将允许有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           

 

           
  

本文地址:http://com.8s8s.com/it/it29409.htm