首页
社区
课程
招聘
[原创]基于MBR的系统登录密码验证程序(附代码)
发表于: 2010-10-7 19:40 31947

[原创]基于MBR的系统登录密码验证程序(附代码)

2010-10-7 19:40
31947

;Author:Cryin
;copy the NASM assembler, and use the command
;nasm.exe -f bin boot.asm
;Date:2010年05月14日
;连接:http://hi.baidu.com/justear
;安装方法:
;我用的是VC,写一个简单的安装程序;主要工作如下
;将原始MBR拷贝到第二扇区,并将本程序编译生成的二进制代码拷贝到第一扇区,另外请确认第一扇区的分区表信息
;与原始MBR的分区表信息完全相同,不同机器分区表都不尽相同
;密码为:kevin
;注:一扇区512个字节,空间比较小暂时没有添加修改密码功能,一时兴起之作,只为误乐。
;希望能认识高手,能学到真正的技术。

;=================================================================
CPU 486
BITS 16

        xor ebx,ebx
        mov ds,bx
      mov ax,[0x413]           ;40:13,BIOS数据区保存常规的内存大小,单位:KBs.
      and al,0xfc        ;要求分配的物理内存地址,以页作为基地址
        sub ax,4
        mov [0x413],ax           ;开辟一段内存,实现程序的驻留
        shl ax,0x6               ;bx *= 1024 / 16 (KBs->线性地址=KBs*1024,段:除以16)
        mov es,ax                ;存储段地址

        mov si,0x7c00            ;拷贝代码到驻留内存中执行
        xor di,di                ;偏移地址为0
      mov cx,0x100             ;拷贝512
        rep movsw

      mov ax,0x201
        mov cl,0x2
        cdq                       ;Convert Double to Quad (386+)把edx扩展为eax的高位,也就是说变为64位。

        push es
      push word password         
        retf                     
;=====================================================================   
password:                        ;校验密码
        MOV SI,ShowAuthorMessage
     CALL SHOWMESSAGE
     mov si,ShowEnterMessage
     CALL SHOWMESSAGE
     CALL GETKEY
     cmp cx,PassWordLength
     je bootloader
again:                       ;第二次校验密码
     mov si,ShowError
     call SHOWMESSAGE
     mov si,ShowEnterMessage
     CALL SHOWMESSAGE
     CALL GETKEY
     cmp cx,PassWordLength
     je bootloader
lasttime:                     ;最后一次校验密码
     mov si,ShowLastError
     call SHOWMESSAGE
     mov si,ShowEnterMessage
     CALL SHOWMESSAGE
     CALL GETKEY
     cmp cx,PassWordLength
     je bootloader
wrong:                       ;登陆失败
     mov si,ShowByeBye
     CALL SHOWMESSAGE
     jmp $

bootloader:                      ;校验密码成功,开始登陆

     mov si,ShowWelcome
     call SHOWMESSAGE
     CALL GETENTER
   
        mov es,dx
        mov eax,0x201
        mov ecx,02h              ;读第二扇区的原始MBR引导开机
        mov edx,0x80
        mov ebx,0x7c00         
        int 0x13

        popad
        pop ds
        pop sp
        
     jmp 0x0:0x7c00    ;jmp to original mbr from hard drive
;======================================================================
SHOWMESSAGE:
    mov bx,0007h                                    ; Page Number = 0, Attribute = 07h
     mov ah,0Eh                                      ; Function 0Eh: Teletype Output
     cs lodsb                                                  ; load the first character
Next_Char:
     int 10h
     cs lodsb                                        ; al = next character
     or al,al                                        ; last letter?
     jnz Next_Char                                   ; if not print next letter
RETURNBACK:
     ret
;===========================================================
GETKEY:
     XOR CX,CX
LOOP:
     MOV AH,0
     INT 16H
     mov bl,al
     AND BX,0xFF
     CMP AL,0DH                                  ;判断是否Enter键
     JZ RETURNBACK
     ADD CX,bx                                   ;存入CX中
     MOV AL,2AH
     MOV BX,07H                        
     MOV AH,0EH
     INT 10H                                      ;显示*号,继续等待输入
     JMP LOOP
;======================================================
GETENTER:                                           ;判断是否Enter键,如果是则返回,若不是继续等待输入
     MOV AH,0
     INT 16H
     AND AX,0xFF
     CMP AL,0DH
     JNZ GETENTER
     RET
;=======================================================
ShowAuthorMessage db   10, 13, "Author:sbha0909@yahoo.com.cn", 0
ShowEnterMessage db   10, 13, "Enter PassWord:", 0
ShowError         db   10, 13, "wrong password!...Try again", 0
ShowLastError     db   10, 13, "wrong password!...Try Last Time", 0
PassWordLength    EQU   021DH   ;"lenght of 'kevin'"
ShowByeBye        db   10, 13, "Sorry...Please Don't Use My PC!", 0
ShowWelcome     db   10, 13, "Welcome kevin...!Press Enter to load Windows", 0
;=================================================================
            
CodeEnd EQU $

times 510-($-$$) db 0                    ;填充00h
Boot_Signature            dw 0AA55h
;===============================================================
;程序结束,使用nasm.exe -f bin boot.asm编译生成bin文件就可以在安装程序中使用
;相关文章:http://bbs.pediy.com/showthread.php?t=121414


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (37)
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
2
终于看到MBR的程序,不错,很详细!
2010-10-7 21:08
0
雪    币: 89
活跃值: (185)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
3
强悍………………………………………………………………
2010-10-7 21:21
0
雪    币: 132
活跃值: (137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
收藏了 谢谢
2010-10-7 21:39
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
5
密码在哪里改呢。。。在代码里看不到呀。。
2010-10-8 06:03
0
雪    币: 241
活跃值: (235)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
6
PassWordLength    EQU   021DH   ;"lenght of 'kevin'"  
这一句啊,ascii码值加起来!
2010-10-8 08:32
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个还是不如bios密码啊。
2010-10-8 09:00
0
雪    币: 241
活跃值: (235)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
8
bios密码也是可以实现的,前面HOOK INT 19 后面的类似处理就可以实现,不过是你怎么刷bios的问题,往哪里刷这些。。
2010-10-8 09:05
0
雪    币: 209
活跃值: (83)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
9
mark一下。。
2010-10-8 09:25
0
雪    币: 129
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
看不懂啊!!~
2010-10-8 09:34
0
雪    币: 6
活跃值: (1146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
写的不错,支持一下
2010-10-8 10:25
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
bios密码还用刷么?现在的bios都设置了bios密码功能,不需要你亲自编程再刷bios的。
2010-10-8 10:30
0
雪    币: 233
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
LS的没有民白LZ的意思啊
2010-10-8 17:25
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
唉,看不懂了。只能膜拜
2010-10-9 08:30
0
雪    币: 1312
活跃值: (5169)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
收藏!!!!
2010-10-12 16:07
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这方面的知识了解的不多,支持
2010-10-12 18:02
0
雪    币: 727
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习下.......
2010-10-12 20:04
0
雪    币: 80
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
再次标记..学习
2010-10-12 20:26
0
雪    币: 246
活跃值: (91)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
19
我以前学汇编也写了个硬盘锁,和上面的差不多。不过在没实现外壳写入MBR
2010-10-12 20:29
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
Debug写入的?
2010-10-12 22:50
0
雪    币: 246
活跃值: (91)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
21
不是,debug命令写太累,汇编用masm编译器,程序自动替换MBR,将第一扇区移到第十扇区然后简单XOR,系统启动时必须输入正确密码,程序还替换了Int13部分中断,和Int1C中断,当时想写个硬盘写保护程序来的(那时用的win98),后来发现在DOS下可实现写保护,但win98下不行就没继续了...。想想那时还没耍女朋友,成天整这玩艺儿,一晃十来年了,只记得程序要两次重定位,失败计算机就不能启动,然后用软盘引导,导出MBR,用debug分析...真有精神呀
2010-10-13 12:17
0
雪    币: 411
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
在有linux的双系统中写入第二扇区会直接OVER。
2010-10-13 23:27
0
雪    币: 585
活跃值: (573)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
23
好东西,顶起,

给LZ个建议,

不要老想着认识高手,,,,,,,,,

靠自己才是王道..............
2011-1-10 14:47
0
雪    币: 133
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
24
刚想研究这方面的 LZ辛苦了
2011-1-10 14:56
0
雪    币: 201
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
希望你这个别人拿去干好事!
别整一些tdss等MBR病毒干坏事!
2011-1-11 15:15
0
游客
登录 | 注册 方可回帖
返回
//