WEB开发网
开发学院软件开发汇编语言 汇编源代码之硬盘保护锁 阅读

汇编源代码之硬盘保护锁

 2009-01-28 09:37:08 来源:WEB开发网   
核心提示:我在前一段时间写了一个硬盘锁,拿出来和大家交流交流,汇编源代码之硬盘保护锁,同时有个问题,希望大家能帮我想想,互相学习吗,;这一段是将整个硬盘锁从0000:7c00移至0000:0600,以免被后来读入的代码覆盖0F6D:0100 1E PUSHDS0F6D:0101 06 PUSHES0F6D:0102 B90001

我在前一段时间写了一个硬盘锁,拿出来和大家交流交流,同时有个问题,希望大家能帮我想想。

首先,大略介绍一下我的程序,我是用汇编写成,程序有2个文件:hdlock.exe

hdlock.dat ,其中hdlock.dat是我写的用于装入硬盘0柱0道1扇的硬盘锁,hdlock.exe实现

(1)把hdlock.dat装入硬盘0柱0道1扇并设置硬盘锁的密码,(2)修改密码,(3)卸载硬盘锁

在此,先介绍一下 hdlock.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 'PASSWARD'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 ;是回车则跳至密码比较处

1 2 3 4 5 6  下一页

Tags:汇编 源代码 硬盘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接