吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1916|回复: 1
收起左侧

[会员申请] 申请会员ID:SuuXaxLZtQDNxLR

[复制链接]
吾爱游客  发表于 2023-6-18 14:08
1、申请ID:SuuXaxLZtQDNxLR
2、个人邮箱: 610644034@qq.com
3、原创技术文章

由于以前的账号太久没有登陆,现在已经找不回了,想重新注册,希望看到申请的管理员帮个忙。

一、原创技术文章 https://bbs.kanxue.com/thread-212994.htm
二、翻了一下硬盘,就地发个以前自己撸的源码,由于没有上传附件的权限,整个项目包括一个VB修改MBR工具源码没有办法上传,所以就核心源码直接发:

功能: 多分区选择引导启动 MBR
描述: MBR 引导显示 Enter 1 2 3 4 Load Dbr: 的时候输入数字从对应主分区引导启动系统。
asm 文件源码如下:

data segment
data ends
stack segment
stack ends
code segment
    assume cs:code,ds:data,ss:stack
start:
;寄存器环境准备
xor  ax,ax; 准备寄存器 33 C0
mov  ss,ax; 准备堆栈段寄存器 8E D0
; 33 C0 8E D0 给出MBR特征码提供搜索MBR程序,提取MBR用
sti; 允许中断 FB
;=====================================================================================================================
mov  sp, 07C00h; 准备堆栈寄存器  BC 00 7C
mov  si, sp; mbr 准备复制的源地址 8B F4
mov  di, 0600h; mbr 准备复制的目的地址 BF 00 06
push ax; 50
mov  cl , 0; B1 00            正好在 0fh 偏移量位置,方便以后查找和修改 ******************
pop  es; 准备代码段寄存器 07
push ax; 50
pop  ds; 准备数据段寄存器 1F
cld; rep 指令si di 自加1  FC
;起始代码不变
;=====================================================================================================================
;准备寄存器环境
;cl 为 原始MBR的扇区号
;sp 7C00h
;si 7C00h
;di 0600h
;ax 0  
;bp 指向 0600h 的分区表
;bx 指向 07C00h 的分区表
;dl 为 BIOS 环境磁盘驱动器 号
;每次 pusha popa 都恢复这个环境
mov     bp ,  00600h + 01beh ; bp 指向 00600h 的分区表
mov     bx ,  07C00h + 01beh ; bx 指向 07C00h 的分区表
db 1h dup(60h); pusha 寄存器全部保存 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
;------------------------------------------------
;修正 FAT32 引导扇区号 + 6
;mov     bp , bx
;mov     cl , 4
Scan_Set_DPT_Fat32_Boot_Loop:
;        cmp     byte ptr [bp + 4] , 0efh; fat32 分区标识
;        jz      Scan_Set_DPT_Fat32_Boot_SetFat32 ;
;        cmp     byte ptr [bp + 4] , 0bh; fat32 分区标识
;        jz      Scan_Set_DPT_Fat32_Boot_SetFat32 ;
;        cmp     byte ptr [bp + 4] , 0ch; fat32 分区标识
;        jnz     Scan_Set_DPT_Fat32_Boot_Check_byte1 ;
Scan_Set_DPT_Fat32_Boot_SetFat32:
;        add     byte ptr [bp + 2], 6   ; fat32 分区引导扇区在分区第6扇区 + 6
;        add     byte ptr [bp + 8], 6   ; fat32 分区引导扇区在分区第6扇区 + 6
;        adc     byte ptr [bp + 0ah], 0 ; fat32 分区引导扇区在分区第6扇区
Scan_Set_DPT_Fat32_Boot_Check_byte1:
;        add     bp, 10h
;loop    Scan_Set_DPT_Fat32_Boot_Loop;
;------------------------------------------------
;拷贝MBR 从 07C00h 到 0600h
mov  cx,200h;复制的字节数
rep movsb; 复制 mbr 拷贝 ds:si 到 es:di上,长度为cx
;也就是将MBR从07C00h处拷贝到 0600h,长度为200h 即512字节
;------------------------------------------------
;跳转到 0600h 的 Check_F_Mbr: 执行
db 6Ah,00h     ; push word 00h
mov  si , offset Check_F_Mbr - offset start + 00600h
push si
retf; 跳转到 0600h 的 Check_F_Mbr:执行
;=====================================================================================================================
Check_F_Mbr: ;检查没有 原始MBR
db 1h dup(61h); popa  寄存器全部恢复 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
db 1h dup(60h); pusha 寄存器全部保存 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
cmp cl , 0; cl 原始MBR 的扇区号
jne Load_Boot_Mbr; 有 原始MBR
;------------------------------------------------
Look_Boot_Dbr: ;寻找活动分区启动
mov  cx , 4 ;
Look_Boot_Dbr_Loop:
        cmp byte ptr [bp + 0] , 0  ; 判断分区活动状态
        jl  Look_Boot_Dbr_Read_Dbr;
        add bp , 010h;
Loop Look_Boot_Dbr_Loop
;-----------------------------------------------
Error_Boot:
        hlt ;处理器暂停
jmp Error_Boot ;
;-----------------------------------------------
Look_Boot_Dbr_Read_Dbr:
call Read_Disk_Proc ;
jb   Error_Boot ;  读扇区失败
cmp word ptr[ si + 510 ] , 0aa55h
jne  Error_Boot ;  读扇区没有55aa标志
db 1h dup(61h) ; popa  寄存器全部恢复 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
db 6Ah,00h     ; push word 00h
push si;
retf;
;-----------------------------------------------
Load_Boot_Mbr:   ;加载原始mbr
xor ch , ch;
mov word ptr [bp] , 00080h;
mov [bp + 8]   , cx;
mov [bp + 0ah] , ax;
inc cl
mov [bp + 2] , cx;
call Read_Disk_Proc  ;读原始MBR扇区
jb  Error_Boot;
db 1h dup(61h); popa  寄存器全部恢复 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
db 1h dup(60h); pusha 寄存器全部保存 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
cmp word ptr[ si + 510 ] , 0aa55h
jne  Error_Boot ;  读扇区没有55aa标志  
mov  bp , bx
mov  cx , 4 ;
Cel_DPT_Boot:
        mov  byte ptr [bp + 0] , 0  ; 取消所有分区活动状态
        add  bp , 010h
Loop Cel_DPT_Boot
Boot_Loop:
;-----------------------------------------------
mov si , offset init_msg - offset start + 0600h;
mov cx , 019h;
Show_Char_A: ;循环显示一个字符
        lodsb;
        mov bx, 7;
        mov ah, 0Eh;
        int 10h;
loop Show_Char_A;
;-----------------------------------------------
xor ax,ax;
int 16h  ;捕捉键盘输入
cmp al,'1';
je  Boot_Tab ;键盘输入 1 跳到0分区表项引导
cmp al,'2';
je  Boot_Tab ;键盘输入 2 跳到1分区表项引导
cmp al,'3';
je Boot_Tab ;键盘输入 3 跳到2分区表项引导
cmp al,'4';
jne Boot_Loop; 键盘输入 4 跳到3分区表项引导 否则重新提示输入
;-----------------------------------------------
;捕捉到键盘输入(1/2/3/4键)后定位对应的分区表位置
Boot_Tab:
push ax;
mov  bx, 7 ; 显示键盘输入
mov  ah, 0Eh
int  10h;
pop  cx ; cl 获取键盘输入码
sub  cl , '1';
mov  al , 10h;
mul  cl ; ax 为 选中分区表项的 分区表偏移量
mov  bp , ax;
add  bp , 7C00h + 01beh;
mov  byte ptr [bp] , 080h; 设置选中分区活动状态
db 1h dup(61h); popa  寄存器全部恢复 si 7C00h 、di 0600h 、bp 指向 00600h 的分区表 、bx 指向 07C00h 的分区表 、ax 0 、 cl 为原始mbr扇区号、dl 为 BIOS 环境磁盘驱动器 号
db 6Ah,00h     ; push word 00h
db 68h,00h,7Ch ; push word 7C00h
retf;
; ---------------------------------------------------------------------------
;参数 bp 指向 分区表项 DPT , 返回 jnb 到读取成功处理
Read_Disk_Proc:
; ---------------------------------------------------------------------------
mov     byte ptr [bp+11h], 5
mov     [bp] , dl
Read_Disk_Mode_Sel: ;选择扇区读寻址方式
        db 1h dup(60h); pusha 寄存器全部保存
    call Disk_Read_Sel_Mode
    db 1h dup(61h); popa 寄存器全部恢复
    db 1h dup(60h); pusha 寄存器全部保存
    jb Disk_Read_SHS
Read_Disk_LBA: ;LBA 方式区读寻址方式
        db 6Ah,00h     ; push word 00h
        db 6Ah,00h     ; push word 00h
        push    word ptr [bp+0Ah]
        push    word ptr [bp+8]
        db 6Ah,00h     ; push word 00h
        db 68h,00h,7Ch ; push word 7C00h  保存数据地址
        db 6Ah,01h     ; push word 01h    读多少扇区
        db 6Ah,10h     ; push word 010h
        mov     ah, 42h ;
        mov     dl, [bp+0]
        mov     si, sp
        int     13h  
        lahf
        add     sp, 10h
jmp     Disk_Read_Check_Exit
; ---------------------------------------------------------------------------
Disk_Read_SHS: ;SHS 方式区读寻址方式
        mov     ax, 201h     ; al 读多少扇区
        mov     bx, 7C00h    ; 保存数据地址
        mov     dl, [bp+0]
        mov     dh, [bp+1]
        mov     cl, [bp+2]
        mov     ch, [bp+3]
        int     13h            
        lahf
Disk_Read_Check_Exit:
        call Disk_Read_Reset;
        db 1h dup(61h); popa 寄存器全部恢复
        sahf
        jnb     Disk_Read_On
        dec     byte ptr [bp+11h]
        jnz     Disk_Read_Check_Exit_Error
        cmp     byte ptr [bp+0], 80h
        jz      Disk_Read_Check_Exit_Error
        mov     byte ptr [bp+0], 80h
jmp     Read_Disk_Mode_Sel
; ---------------------------------------------------------------------------
Disk_Read_Check_Exit_Error:
stc;
Disk_Read_On:
retn;
; ---------------------------------------------------------------------------
Disk_Read_Sel_Mode: ;获取磁盘寻址模式
        push    bp
        mov     dl, [bp+0]
        mov     ah, 8
        int     13h            
        pop     bp
        jb      Disk_Read_Sel_Mode_SHS
        mov     dl, [bp+0]
        mov     bx, 55AAh
        mov     ah, 41h
        int     13h         
        jb      Disk_Read_Sel_Mode_SHS
        cmp     bx, 0AA55h
        jnz     Disk_Read_Sel_Mode_SHS
        test    cl, 1
        jnz     Disk_Read_Sel_Mode_LBA
Disk_Read_Sel_Mode_SHS:
        stc;
retn;  jnb LBA模式
Disk_Read_Sel_Mode_LBA:
    clc;
retn;  jnb LBA模式
; ---------------------------------------------------------------------------
Disk_Read_Reset: ; 磁盘复位
        xor     ah, ah
        mov     dl, [bp+0]
        int     13h  
retn;
; ---------------------------------------------------------------------------
init_msg  db 0dh,0ah,'Enter 1 2 3 4 Load Dbr:'
;Error_msg db 'Error Dbr',0dh,0ah,0h
;boot_msg  db 0dh,0ah,'boot Look Dbr X'
db 200H dup(0);全0标志
code ends
end start

以上asm文件编译链接出来的MBR为:

33 C0 8E D0 FB BC 00 7C 8B F4 BF 00 06 50 B1 00 <- 该值指定原始MBR的扇区号,0为无原始MBR或者不进行原始MBR引导,非0则会加载对应扇区继续引导启动,可根据需要修改
07 50 1F FC BD BE 07 BB BE 7D 60 B9 00 02 F3 A4
6A 00 BE 27 06 56 CB 61 60 80 F9 00 75 23 B9 04
00 80 7E 00 00 7C 08 83 C5 10 E2 F5 F4 EB FD E8
83 00 72 F8 81 BC FE 01 55 AA 75 F0 61 6A 00 56
CB 32 ED C7 46 00 80 00 89 4E 08 89 46 0A FE C1
89 4E 02 E8 5F 00 72 D4 61 60 81 BC FE 01 55 AA
75 CA 8B EB B9 04 00 C6 46 00 00 83 C5 10 E2 F7
BE 53 07 B9 19 00 AC BB 07 00 B4 0E CD 10 E2 F6
33 C0 CD 16 3C 31 74 0C 3C 32 74 08 3C 33 74 04
3C 34 75 DC 50 BB 07 00 B4 0E CD 10 59 80 E9 31
B0 10 F6 E1 8B E8 81 C5 BE 7D C6 46 00 80 61 6A
00 68 00 7C CB C6 46 11 05 88 56 00 60 E8 55 00
61 60 72 22 6A 00 6A 00 FF 76 0A FF 76 08 6A 00
68 00 7C 6A 01 6A 10 B4 42 8A 56 00 8B F4 CD 13
9F 83 C4 10 EB 15 B8 01 02 BB 00 7C 8A 56 00 8A
76 01 8A 4E 02 8A 6E 03 CD 13 9F E8 3D 00 61 9E
73 12 FE 4E 11 75 0C 80 7E 00 80 74 06 C6 46 00
80 EB A9 F9 C3 55 8A 56 00 B4 08 CD 13 5D 72 17
8A 56 00 BB AA 55 B4 41 CD 13 72 0B 81 FB 55 AA
75 05 F6 C1 01 75 02 F9 C3 F8 C3 32 E4 8A 56 00
CD 13 C3 0D 0A 45 6E 74 65 72 20 31 20 32 20 33
20 34 20 4C 6F 61 64 20 44 62 72 3A 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2023-6-26 11:21
你好,请尝试邮箱重置密码找回,如果无法找回我们再走申请方式,需要在看雪论坛给hmilywen发一条短消息,确认这个申请是本人发布的,然后回复我进行审核。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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