前言:前几天突然发现移动硬盘内的exe文件全部被“打包”了,幸好我是在winpe下工作且无内置硬盘损失不是很大。在网上用TXP1atform.exe搜索了一下,发现受害者很多。遂决定写篇分析笔记以消除受害者的恐惧。
   一、主要症状是:我在pe下打开exe文件很慢,出现一个*.exe.exe的文件马上又变成了*.exe,而后才弹出程序界面。立刻察看进程管理器发现多了TXP1atform.exe、IEXPLORE.EXE、cmd.exe这几个进程。
   二、病毒感染的具体实现
     染毒程序运行时首先将尾部的备份程序以后缀为*.exe.exe的形式释放出来,接着生成一个类似20$$.bat的批处理文件并执行,与此同时病毒体将自身拷贝到SYSTEM32\DRIVERS目录中并运行,程序随即退出。此时DRIVERS目录中的病毒体遍历所有分区,找出可以感染的可执行文件如exe、scr、com以及网页文件htm、html、asp、php、jsp、aspx(写入挂马代码好像没有感染我的htm文件),搜索的同时另一个线程进行感染这样效率较高。屏幕保护程序一旦感染,屏保时病毒就会被激活。感染可执行文件时,先把被感染文件读入内存并修改病毒程序图标与其相同,而后将自身从SYSTEM32\DRIVERS下拷贝到被感染程序所在文件夹替换掉原来的程序,接着再将内存中的原程序备份到病毒文件尾部,最后做个标记纪录下备份的数据大小,便于以后运行染毒程序时将其释放执行。
           
           
            

  :try1
  del "X:\Documents and Settings\Default User\桌面\notepad.exe"
  if exist "X:\Documents and Settings\Default User\桌面\notepad.exe" goto try1
  ren "X:\Documents and Settings\Default User\桌面\notepad.exe.exe" "notepad.exe"
  if exist "X:\Documents and Settings\Default User\桌面\notepad.exe.exe" goto try2
  "X:\Documents and Settings\Default User\桌面\notepad.exe"
  :t
     以上是在桌面上运行染毒的notepad.exe时调试中生成的20$$.bat,其实现的功能:先删除带毒的程序,再将解压出来的程序改回原来的名字并执行最后删除批处理文件自身;如果改名不成功就直接删除批处理文件自身。该批处理文件的前面两位数字是随机的,在调试时如果将0012F90C处该为00000001,你将会看到一个dos窗口在执行该批处理文件。
     以下是调试中堆栈中的一些情形,用到这些断点:
  执行生成的批处理文件:
  0012F904   0041EF57  /CALL 到 WinExec 来自 notepad.0041EF52
  0012F908   00E05D54  |CmdLine = "X:\Temp\20$$.bat"
  0012F90C   00000000  \ShowState = SW_HIDE 
  
  搜索可感染程序:
  011FFBF4   0041E6AC    /CALL 到 FindNextFileA 来自 TXP1atfo.0041E6A7
  011FFBF8   00E00DA8    |FileName = "D:\dump.exe"
  011FFBFC   011FFE2C    \pFindFileData = 011FFE2C
      
  病毒体替换掉被感染程序
  011FE720   0041F57B     /CALL 到 CopyFileA 来自 TXP1atfo.0041F576
  011FE724   00E19018     |ExistingFileName = "X:\WXPE\SYSTEM32\DRIVERS\TXP1atform.exe"
  011FE728   00E0E81C     |NewFileName = "D:\dump.exe"   //感染D:根目录下的dump.exe

      对注册表的操作:
      1、隐藏文件:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue
      2、对付杀毒软件:感染时在C盘根目录下生成一个临时文件GK.TMP,其中是加密了的注册表相关数据。 染毒程序先解密该文件而后再写入注册       表。见图registry
     
      3、修改启动项:\Documents and Settings\All Users\「开始」菜单\程序\启动\
                    \Documents and Settings\All Users\Start Menu\Programs\Startup\
                    \WINDOWS\Start Menu\Programs\Startup\
                    \WINNT\Profiles\All Users\Start Menu\Programs\Startup\
                    Software\Microsoft\Windows\CurrentVersion\Run

  注册服务并启动:NET START DMusic (注:JM.sys在附件压缩包中,它是病毒从资源中临时释放的,只能在调试过程中获得)
  实现屏蔽几十种杀软和隐藏自身不被查杀的功能是一款驱动级病毒。幸亏我是在pe下运行的,该驱动没有启动成功,惨遭我的蹂躏。
  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmusic]
  "Type"=dword:00000001
  "Start"=dword:00000003
  "ErrorControl"=dword:00000001
  "ImagePath"="system32\\DRIVERS\\JM.sys"        
  "DisplayName"="Microsoft Kernel DLS Syntheiszer"
  [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\DMusic\Enum]
  "Count"=dword:00000001
  "NextInstance"=dword:00000001
  "0"="Root\\LEGACY_DMUSIC\\0000"
  
  下面是病毒启动服务的过程,启动完后改写注册表隐藏真实驱动的名称并删除sys文件。
  00426F68    55              PUSH EBP
  ..................
  00426F7D    6A 00           PUSH 0
  00426F7F    68 40704200     PUSH TXP1atfo.00427040       ; net stop dmusic
  00426F84    E8 BFFEFDFF     CALL TXP1atfo.00406E48       ; JMP 到 kernel32.WinExec
  00426F89    8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
  00426F8C    E8 BB08FEFF     CALL TXP1atfo.0040784C
  00426F91    8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
  00426F94    BA 58704200     MOV EDX,TXP1atfo.00427058    ; drivers\jm.sys
  00426F99    E8 4EDDFDFF     CALL TXP1atfo.00404CEC
  00426F9E    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
  00426FA1    E8 3EDFFDFF     CALL TXP1atfo.00404EE4 
  00426FA6    8BC8            MOV ECX,EAX
  00426FA8    BA 68704200     MOV EDX,TXP1atfo.00427068     ; qd2
  00426FAD    B8 0A000000     MOV EAX,0A
  00426FB2    E8 250AFEFF     CALL TXP1atfo.004079DC
  00426FB7    B9 74704200     MOV ECX,TXP1atfo.00427074   ; system32\DRIVERS\JM.sys
  00426FBC    BA 94704200     MOV EDX,TXP1atfo.00427094   ; SYSTEM\CurrentControlSet\Services\DMusic\ImagePath
  00426FC1    B8 02000080     MOV EAX,80000002
  00426FC6    E8 11FBFEFF     CALL TXP1atfo.00416ADC      ;写注册表
  00426FCB    6A 00           PUSH 0
  00426FCD    68 C8704200     PUSH TXP1atfo.004270C8      ; NET START DMusic
  00426FD2    E8 71FEFDFF     CALL TXP1atfo.00406E48      ; WinExeC
  00426FD7    68 A00F0000     PUSH 0FA0
  00426FDC    E8 47FEFDFF     CALL TXP1atfo.00406E28      ; Sleep等待启动完成
  00426FE1    B9 E4704200     MOV ECX,TXP1atfo.004270E4   ; system32\DRIVERS\DMusic.sys
  00426FE6    BA 94704200     MOV EDX,TXP1atfo.00427094   ; SYSTEM\CurrentControlSet\Services\DMusic\ImagePath
  00426FEB    B8 02000080     MOV EAX,80000002
  00426FF0    E8 E7FAFEFF     CALL TXP1atfo.00416ADC      ;改写注册表中驱动名称为DMusic.sys原来是JM.sys
  00426FF5    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
  00426FF8    E8 4F08FEFF     CALL TXP1atfo.0040784C
  00426FFD    8D45 F8         LEA EAX,DWORD PTR SS:[EBP-8]
  00427000    BA 58704200     MOV EDX,TXP1atfo.00427058   ; DRIVERS\JM.sys
  00427005    E8 E2DCFDFF     CALL TXP1atfo.00404CEC
  0042700A    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
  0042700D    E8 D2DEFDFF     CALL TXP1atfo.00404EE4
  00427012    50              PUSH EAX                    ;system32\DRIVERS\JM.sys
  00427013    E8 38FCFDFF     CALL TXP1atfo.00406C50      ;调用DeleteFileA,删除掉JM.sys
  ................
  0042703D    C3              retn
 
      其他的一些操作:   
      删除系统的默认共享,可以独享这台肉鸡。
      cmd.exe /c net share admin$ /del /y
         cmd.exe /c net share C$ /del /y
  
      用命令行实现解压缩下载的木马rar文件到指定的目录并执行,或者打包你的敏感文件后改名并上传。
      如C:\Program Files\WinRAR\myrar.txt 将打包的资料改为txt后缀用于上传,避免被人发现
      "C:\Program Files\WinRAR\winrar.exe" x -inul  -p- "  //解压木马到指定目录
      "C:\Program Files\WinRAR\winrar.exe" u -as -ep1 -inul  "  //快速打包所需的文件
    x       带绝对路径解压     
    u       更新压缩文件中的文件   
    -as     同步压缩文件内容     
    -ep1    从文件名中删除底层目录,压缩后文件内不含底层目录信息
    -inul   Disable all messages 
    -p-     Do not query password
       命令rar a -u -as -ep1 backup sources\*.cpp将只压缩目录sources下的*.cpp文件,这个操作比创建新的压缩文件执行得快。


      三、修复方法:
      先搜索染毒程序中的病毒体结束标志“1235c”,这样就找到了备份程序的头,然后在染毒程序的尾部找到备份数据的字节大小,把这段提取即可,编程实现也不复杂,哪位朋友有兴趣就实现一下吧!备注:*.exe.exe文件就是我们原来的的程序,只是名字有所变化,需要从染毒后的程序中提取出来。通过调试发现下面一段代码就是释放备份的原程序且还未执行其他感染行为,所以可以直接用脚本实现。
  00403900    66:8178 04 B2D7 CMP WORD PTR DS:[EAX+4],0D7B2  //是否释放*.exe.exe文件的标志
  00403906    74 0F           JE SHORT shed.00403917   //跳去生成*.exe.exe
   ................................
  00403917    8B78 14         MOV EDI,DWORD PTR DS:[EAX+14]
  0040391A    0378 0C         ADD EDI,DWORD PTR DS:[EAX+C]
  0040391D    8B50 08         MOV EDX,DWORD PTR DS:[EAX+8]
  00403920    2B50 0C         SUB EDX,DWORD PTR DS:[EAX+C]
  00403923    39CA            CMP EDX,ECX
  00403925    7F 20           JG SHORT shed.00403947   //生成*.exe.exe完毕就跳
  00403927    0150 0C         ADD DWORD PTR DS:[EAX+C],EDX
  0040392A    29D1            SUB ECX,EDX
  0040392C    50              PUSH EAX
  0040392D    51              PUSH ECX
  0040392E    89D1            MOV ECX,EDX
  00403930    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  00403932    FF50 1C         CALL DWORD PTR DS:[EAX+1C]  //WriteFile  每次写80h字节
  00403935    85C0            TEST EAX,EAX
  00403937    75 04           JNZ SHORT shed.0040393D
  00403939    59              POP ECX
  0040393A    58              POP EAX
  0040393B  ^ EB DA           JMP SHORT shed.00403917   //返回继续
  .........................
  00403947    0148 0C         ADD DWORD PTR DS:[EAX+C],ECX
  0040394A    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  0040394C    5F              POP EDI
  0040394D    5E              POP ESI
       0040394E    C3              RETN
          
        
        
        
  脚本内容:
  var addr
  sto        
  mov addr,esp       //ESP定律
  bphws addr,"r"
  run              
  bphwc  addr        //清除硬件访问断点
  sto                //单步一下来到oep
  mov addr,eip
  and addr, 0f00000
  add addr,3900      
  bp addr          
  run                //来到00403900 
  bc addr  
  MSG "You get back it!"
  add addr,47    
  bp addr            
  run               //来到00403947    
  bc addr 
  gpa "ExitProcess","kernel32.dll"  //获取ExitProcess的地址
  mov eax,$RESULT
  asm eip, "push 0"
  asm eip+5, "call eax"  
  run              //执行ExitProcess强行退出,这时得到的*.exe.exe文件就是我们原来的程序。

      
       四、总结
           感染该病毒的机器必须将扩展分区和移动硬盘中的染毒文件全部进行修复处理,系统盘ghost恢复一下就安全了。这个病毒的可恶之处就是把我辛辛苦苦从看雪论坛下载的exe文件都打包了,还好没有对rar文件下手,不幸中的万幸。大家得小心啊!(附件:修复脚本和病毒样本)

 
                                                                  天易love  
                                                                                                 2009-10-4

上传的附件 jiaoben.txt
tougao.rar [解压密码:muma12356]