当前位置:文档之家› 主引导记录(MBR)的反汇编分析

主引导记录(MBR)的反汇编分析

主引导记录(MBR)的反汇编分析
1.)首先启动机器到实模DOS下,加载NTFS4DOS程序使程序可以读NTFS分
区。

2.)转到引导系统启动的主分区。

输入C:回车转到主分区,输入DEBUG启动到DEBUG界面
3.)开始备份MBR主引导记录,
-a 100 ;指定开始汇编的位置
mov ax,0201 ;AH=功能号0=复位磁盘2=读磁盘3=写磁盘AL=读取的扇区
mov bx,7c00 ;bx=读入的内存地址
mov cx,0001 ;ch=磁道号cl=扇区号
mov dx,0080 ;dh=磁头号dl=驱动器号80h:硬盘C
int 13 调用BIOS中断
int 3 异常中断
-g =100 ;运行地址100处的程序
-d 7c00 l100 ;L加载文件到内存,D转储100个字节长度n MBR.DA T ;指定写入文件的名称
-rbx ;显示BX寄存器的内容
:0 改变BX寄存器的值为零
-rcx ;显示CX寄存器的内容
:200 改变CX寄存器的值为200
-W 7c00 ;将BX和CX指定的字节数的内容写入文件
保存MBR备份到C盘根目录
4.)先用Q退出DEBUG再重新进入下
5.)加载备份文件到内存
6.)开始用自己写的编码代替从7C00开始27个字节的编码Mov ax,cs ;代码段地址送AX
Mov sp,7c00 ;7C00送堆栈寄存器
Sti ;开中断
Jmp 7c0c ;跳转到7C0C
-T =100 ;从地址100处单步跟踪
单步跟踪输入T回车
一直跟到跳转到7C0C处
CLD ;DF方向标志置零DF=0串操作指令中操作数地址自动递增MOV SI,7C1B ;7C1B地址送SI源变址寄存器
MOV DI,061B ;061B地址送DI目的变址寄存器
PUSH AX ;AX里保存着CS代码段的地址
PUSH DI ;将DI=061B压栈位将来弹出到IP做准备MOV CX,01E5 ;循环传送的字节数
REPZ
MOVSB ;循环把7C1B地址01E5字节的数据复制到
061B地址
单步跟踪到REPZ MOVSB 后面是一个循环指令用T 1E5执行过去
继续T一下
看下现在各个寄存器里的值RETF会从堆栈里弹出SP到IP 弹出
SP+2到CS这样代码会转到061B地址执行
来到了061B地址,先看下反汇编代码
MOV SI,07BE ;600h+1BEh,分区表起始偏移为1BEh ;7BE-61B=1A3==419 ,这是说从7C00
偏移27字节的地址加上419字节正好是446字节偏移
MOV CL,04 ;分区表中有4个分区表项
CMP [SI],CH ; 从SI地址取分区起始标志80和CH比较
JL 062D ;是活动分区吗?(此时ch中的值为0) JL被减数小于减数则转移;条件成
立则转移到062D
JNZ 063B ;不等于零则跳到063B
ADD SI,10 ;SI加16个字节到下个分区表的地址
LOOP 0620 ;循环到CMP [SI],CH 继续比较
INT 18 没有发现活动分区,无法启动OS,BIOS的Int 18h中断服务程序
ROM-Basic 现在的BIOS一般是打印错误信息
MOV DX[SI] ;取SI地址值; DX=0180 80是主分区标志MOV BP,SI ;把07BE保存到BP
ADD SI,+10 ;;SI=07CE || 07BE加了16个字节到下个表头DEC CX ;4个分区表项次数
JZ 7C4D ;;4个分区活动标志都检测后跳出去
来到064D这里,反汇编下机器码
MOV [BP+25],AX ;AX值保存到07BE+37字节处XCHG SI,AX ;SI值和AX=0ED9交换
MOV AL,[BP+04] ;07BE +4个字节是文件系统标志MOV AH,06 ;06传送到AH
CMP AL,0E ;判断是不是FA T16文件系统
JZ 066B
MOV AH,0B
CMP AL,0C ;判断是不是FA T32文件系统
JZ 0665 ;因为是FA T32文件系统跳转成立
跳转到0665
先汇编下机器码
MOV BYTE PTR [BP+25],06
JNZ 068F ;
MOV BX,55AA ;55AA送BX寄存器
PUSH AX ;保护寄存器内容
MOV AH,41 ;功能号41H
INT 13 ;这个是int 13 扩展功能检测POP AX ;保护寄存器内容
JB 068C ; CF=1时是错误AH 里包含错误号CMP BX,AA55 ;比较BX是否是AA55
JNZ 068C ;不等于零跳向错误
TEST CL,01 ;测试API子集错误跳向068C
JZ 068C 跳向错误MOV AL,AH
MOV [BP+24],DL
查看下寄存器内容
现在使用命令
g = 0671 0673 不跟入中断
执行完INT13后寄存器的变化如图:
BX 的内容反转了变成了AA55。

相关主题