简单替换执行病毒
简单分析报告:基本信息
作者: 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命令删除自身
晕,,,死就这样吧。
学习下这个有病毒样本么????、 哎,,,失误了忘记上了 分析的不错 亲,怎么没有样本呀。 很详细的分析。可是病毒样本呢。 分析得不错,但是不太明白文章为何取这个名字
楼主可以尝试看看下载下来的样本,或许有新发现喲 蒋老师{:1_931:},,小弟分析的不全{:1_923:}。我去看看
页:
[1]