跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

标题:[原文]雪花病毒分析报告

作者:wParma

时间:2011年5月21日

链接:http://bbs.pediy.com/showthread.php? t=134304

示例门户:slam下载和解压缩密码:病毒

前言:

雪花病毒已经飘了一段时间了,各大杀手都已经能彻底杀了它,但也有一些想法不错。在这里,让我与你分享它们。

病毒特征

1.主程序与恶意代码分离,恶意代码以外壳代码的形式加密在单独的配置文件中。

2.它只能造成一次伤害。恶意代码在程序运行一次后被覆盖。

摘要

这一分析的主要关注点

恶意代码被注入病毒explorer.exe,inlinehookCloseHandle给了恶意代码执行的机会。

分析开始cool.gif

1.整个病毒的整个过程简单明了:

加载time.ini-解码time.ini-重写time . ini的内容-在time . ini中执行恶意代码。

流程图如下http://bbs.pediy.com/attachment.php?attachmentid=57347&d=1305987588

下面主要描述time.ini的解码以及time.ini的恶意代码执行(shellcode)的过程:

1.1time.ini解码

解码过程是将加密数据与key1和key2进行两次异或,key2存储在time.ini 0的偏移量处,即前几个字符'0x00505372 ',key1初始为0,每次解码时与解码结果相加变换。

具体流程如下图http://bbs.pediy.com/attachment.php?attachmentid=57346&d=1305987588

简单的代码注释如下:

1;时间的解码ini 200401926/8B4DE8MOV ECX,DWORD PTR [EBP-18] 300401929。| 83 C104加ECX,440040192C。| 894 DE8MOV DWORDPTR [EBP-18],ecx 50040192 f | 892 f DWORDPTR[ebp-18]600401932。|3B55E4cmpedx,dwordptr[ebp-1C]700401935。| 7d 33 jgeshort 0040196 a;解密完成了吗800401937?| 8b4508moveax,dword ptr [ebp8] 90040193a。| 0345e8add eax,dword ptr [ebp-18] 100040193d。| 8b08movecx,dword ptr [eax] 1100400获取加密数据1200401942。| 8b55ecmovedx,dword ptr [EBP-14] 1300401945。| 3355f0 xor edx,dword ptr[EBP-10];Xor1400401948。| 8955ecmovdwordptr [EBP-14],edx150040194b。| 8b45ecmoveax,dword ptr [EBP-14] 160040194e。| 3345f8 xor eax,dword ptr [用key2对第一步的结果进行xor,它来自1700401951。| 8945ecmovdwordptr [EBP-14],eax1800401954。| 8b4df0movcx,dword ptr [EBP-10] 1900401957。| 034.转换key1,用key1和解密的数据做add200040195a。| 894df0movedwordptr [ebp-10],ecx210040195d。| 8b5508movedx,dword ptr [ebp8] 2200401960。地址:EDX 2300401963。|8B45ECmoveax,dwordptr[ebp-14]2400401966。|8902movdwordptr[edx],eax解密数据2500401968。\ ebbcjmpshort00401926

经过以上解码过程,time.ini中的数据已经成为可执行的shellcode。

1.2time.ini恶意代码(外壳代码)执行

1.2.1外壳代码执行的开始位

shellcoede执行的起始位置由time.ini0x8处的偏移量计算,计算方法是time.ini0xc在内存中的位置是matrix加上time.ini0x8的数据偏移量。

具体代码和简单注释如下:

10040150A|.8B4D08movecx,dwordptr[ebp 8]2004 01 50d | . 8 b11 movedx,dwordptr[ecx]3004 01 50 f | . 8955 fcmovdwordptr[ebp-4],edx获取偏移量外壳代码。与time.ini0x8的偏移量为400401512 | .8b4508moveax,dword ptr[ebp 8]500401515 | . 83c 004 add eax,4;Baseaddress获取位置600401518 | . 8945 F8 MovdwordPtr[EBP-8],eax70040151b | .8b4df8movecx,dword ptr[EBP-8]80040151 e | . 034 dfcadecx,dword ptr[shell oep=base address offset:shell code通过计算开始执行的位置或者是900401521 | .0fbe11movsxedx,byteptr通过特征码1100401527 | . 0f 8594000000 jnz 004015 c 1验证shellOEP是否正确

根据上述偏移量输入shellcode后的整体流程如下:

http://bbs.pediy.com/attachment.php?attachmentid=57345&d=1305987588

获取1.2.2.1内核32矩阵:

kernel32矩阵的获取方式是fs:0,论坛的前辈已经详细讲解过了,这里不再赘述。

从1.2.2.2获取API:

病毒拿到API的时候检查断点,简单处理地址,就是不方便把函数地址做成-1,这样动态分析的时候看不到函数名。也许它能躲过一些主要的防御措施。

恢复的方式也很简单,只要nop把00C5036F00C50375的代码掉就行了。

具体代码如下

;断点检测和地址简单处理

100C5036C8038CCcmpbyteptr[eax],0cc当前获取函数是否被下断点200摄氏度5036华氏度747摄氏度费斯霍特00 c 503 f 0300 c 5037148获取的函数地质-1400 c 50372803890 cmpbyter[eax],90;当前指向的位置是否为不,不,如果不是还原地质500 c 503757401 jeshort 00 c 50378600 c 5037740 inceax 1。2 .2 .3遍历进程:

遍历进程寻找explorer.exe的代码很普通不多说了,

1.2.2.4恶意代码注入explorer.exe和对封闭治疗法的在线挂钩-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号

找到explorer.exe后通过OpenProcess(打开流程)打开之,然后读取explorer.exe中封闭治疗法函数的前五字节并保存,这里explorer.exe中封闭治疗法函数地址直接用的自身封闭治疗法的地址

因为大部分情况下不同进程内核32.dll的基质是一样的。这个假设在这里也成立。

有了封闭治疗法的位置以后就可以对explorer.exe的函数进行虎克!虎克了,病毒在进行虎克!虎克之前先将虎克!虎克的目的函数写入了explorer.exe并计算出了虎克!虎克点的代码

100 C5 c 649 ff 10 call dword ptr[eax];readprocessmemory 200 C5 c64 b85 c0测试ax,eax 300 C5 c64 d0s 84 f 3000000每00C5C746400C5C6538B45D6moveax,dword ptr[ebp-2a]500 C5 c 6563d 8 BFF 558 BCM peax,8b 55 ff 8b用特征值比对是否读取正确600 C5 c65 B0 f85(000000 jnz 00 C5 c73 f7c 6666 a 40推40800 C5 c 66368000000推1000900 C5 c 6686814 c 80000推0 c 81141000 C5 c 66 D6 a 00推01100 c 66 fff 75 F8 pushdwordptr[ebp-8]1200 C5呼叫00 C5 c 67b;读取成功在explorer.exe中申请一块内存1300C5C677E7BDout0BD、eax 1400 C5 c 679000 addbyteptr[eax]、al 1500 C5 c 67 b 58 pope ax 1600 C5 c 67 c 2 b 00 subeax、dword ptr[eax]1700 C5 c 67 eff 10 calligrptr[eax]1800 c 6885 c 0 test ax、eax 1900 C5 c 6880每00 c 7462000 c 5 c 688945 f 4 movd tr[ebp-c]保存内存地址2100C5C68B8D45D6leaeax,dword ptr[ebp-2a]2200 C5 c68 EC 600和9movbyteptr[eax],0e 92300 C5 c 691 b 9 F4 C4 c 40000移动CX,0 C4 F4;注入到explorer.exe部分外壳代码(外壳代码)开始执行地址偏移是个营编码值2400C5C696034DF4addecx,dword ptr[ebp-c];计算注入到explorer.exe后外壳代码(外壳代码)开始执行的内存地址2500 c 5 c 6992 b 4,4个亚微米,dword ptr[ebp-1c]2600 c 5 c 69 c 83 e 905个亚微米,5个;计算JMP(消歧义)指令的值(计算虎克!虎克点的代码)2700 C5 c 69 f 894801 movdwordptr[eax 1],ecx 2800 C5 c6a 2c 745 EC 14 c 80000 movdwordptr[ebp-14],0c 8142900 C5 c6a 9c 745 f 000000000 movdwordptr[ebp-10],03000 C5 c 6 B0 c 745 e 80000000 movdwordptr将S7-1200可编程控制器开始解码后的数据写入explorer.exe进程地址空间

将外壳代码(外壳代码)写入目标进程后病毒虎克!虎克的目标进程的内核32。封闭治疗法

具体代码如下:

100 C5 c 719 ff 10调用dword ptr[eax];修改封闭治疗法处的内存读写属性200 C5 c71 b85 c0测试ax,eax 300 C5 c71 d 7427 jeshort 00 C5 c 746400 C5 c71 F6 a 00推送0500 C5 c 7216 a 05推送5600 C5 c 7238d 45 d6leaeax,dword ptr[ebp-2a]700 C5 c 72650 push eax 800 C5 c 727 ff 75 e 4 push DTR[ebp-1c用上一步骤计算好的JMP(消歧义)指令替换封闭治疗法的前5字节

经过上面外壳代码(外壳代码)代码注入和对封闭治疗法的在线挂钩-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号病毒代码已经可以在explorer.exe执行过程中或得执行的权利,

经过在线挂钩-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号-内拉钩号和恶意代码注入两个步骤explorer.exe地址空间内发生了如下图所示的变化

虎克!虎克前010-3500004

虎克!虎克后010-350035

如果explorer.exe调用封闭治疗法这个美国石油学会的话如下所示的恶意代码将获得执行的机会貌似是个下载者,这里不做为重点分析

被写入的恶意外壳代码代码http://bbs.pediy.com/attachment.php?attachmentid=57335&d=1305986160

010-35007搞完收工biggrin.gif

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。