div除法溢出之后, 会调用中断0, 显示Divide overflow,
我们修改中断向量表里对应的0号中断的处理地址, 将我们的代码执行起来, 达到hook的目的
assume cs:code
code segment
start:
;写入新的int 0地址
mov ax,0
mov es,ax
mov word ptr es:[0*4],0200h
mov word ptr es:[0*4+2],0
;写入新的int 0中断过程的ShellCode
mov ax,cs
mov ds,ax
mov si,offset display_start
mov ax,0
mov es,ax
mov di,0200h
mov cx,offset display_end - offset display_start
cld
rep movsb
jmp display_end ;跳转到除法溢出代码
display_start:
jmp $+0ch ;跳转到mov ax,0b800h
db 'hook int 0'
mov ax,0b800h
mov ds,ax
mov ax,0
mov es,ax
mov si,0202h ;字符串的位置
mov bx,160*3 ;在屏幕上第三行显示
mov cx,0Ah ;字符串10位
s:
mov al,es:[si]
inc si
mov ah, 0ch ;红底黑字
mov ds:[bx],ax
add bx,2
loop s
mov ax,4c00h ;退出程序
int 21h
display_end:nop
;div除法溢出
mov ax,1000h
mov bh,01h
div bh
;退出程序
mov ax,4c00h
int 21h
code ends
end start
end
显示hook int 0, 哈哈