assume cs:code code segment
start:
mov ax,cs
mov ds,ax
mov ax,0
mov es,ax
mov si,offset ps
mov di,200h ;将中断程序安装到0:200处
mov cx,offset pe - offset ps
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[0],200h ;修改中断向量表的0号中断地址
mov word ptr es:[2],0
int 0h ;引发中断 ps:jmp pss
d:db '87530791' ;这是我的QQ号^_^
pss:call e ;很多PE病毒很常用这招,能将代码安装到任何地址都可存取到数据
e:pop di
sub di,offset e ;di就是位置偏差
mov ax,0b800h
mov es,ax
xor bx,bx
mov cx,80*25*2
s1:mov byte ptr es:[bx]," "
mov byte ptr es:[bx+1],07
add bx,2
loop s1
mov cx,offset pss - offset d
mov si,offset d
add si,di ;加上位置偏差就能定位要输出的字符
mov bx,80*20*2
s2:mov al,byte ptr cs:[si]
mov byte ptr es:[bx],al
mov byte ptr es:[bx+1],07h
inc si
add bx,2
loop s2
mov ax,4c00h
int 21h
pe:nop code ends
end start |