本帖最后由 安静的小酒吧 于 2015-12-29 14:14 编辑
Tear(窗口撕裂)病毒分析--我在吾爱的第五个样本分析 安静的小酒吧 基本信息 样本名称:Tear(窗口撕裂).exe 样本来源:卡饭论坛(http://bbs.kafan.cn/thread-1861298-1-1.html) 样本大小:52KB MD5:458CA58C53F2C8156A6E909E9431C68E SHA-1:C2928EBF61B97FC4603C61FC069F72309FE54F0C
感染现象: 直接上图,6的不行!还有撕裂的音效哦!
行为分析 0x00 先查壳,VB写的 0x01 VB的代码逆的不多,尤其不喜欢动态调试VB的程序,去爱盘下一个VB Decompiler,人进去直接看源码 代码结构十分简单,简单分析之后结构如下: 0x02 看到上面的流程图就很明白了吧,简单流程就是初始化完成后设置了一个2000ms的定时器,定时检查是否有可见的窗口,如果有就进行“撕裂”,然后Paly一个撕裂的音效。 0x03 撕裂窗口原理 A.随机产生撕裂的形状,随机算法就不分析了 [Visual Basic .NET] 纯文本查看 复制代码 Dim var_12C As Global[/align] loc_0040388A: On Error Resume Next
loc_004038B2: Randomize(10)//产生一个随机数
loc_004038D2: If var_407334 <> 0 Then GoTo loc_004038F0
loc_004038DE: var_eax = %cobj
loc_004038E4: var_16C = vbNullString
loc_004038EE: GoTo loc_004038FA
loc_004038F0: 'Referenced from: 004038D2
loc_004038F0: var_16C = vbNullString
loc_004038FA: 'Referenced from: 004038EE
loc_0040391B: var_7C = Global.Screen
loc_00403920: var_130 = var_7C
loc_0040397B: var_124 = Global.Width
loc_00403983: var_138 = var_124
loc_004039C9: If var_407334 <> 0 Then GoTo loc_004039E7
loc_004039D5: var_eax = %cobj
loc_004039DB: var_178 = vbNullString
loc_004039E5: GoTo loc_004039F1
loc_004039E7: 'Referenced from: 004039C9
loc_004039E7: var_178 = vbNullString
loc_004039F1: 'Referenced from: 004039E5
loc_00403A12: var_80 = Global.Screen
loc_00403A17: var_140 = var_80
loc_00403A7A: var_148 = Global.TwipsPerPixelX
loc_00403AD7: cdq
loc_00403AD8: idiv ecx
loc_00403ADA: var_4C = CLng(var_124)
loc_00403AFE: If var_407334 <> 0 Then GoTo loc_00403B1C
loc_00403B0A: var_eax = %cobj
loc_00403B10: var_184 = vbNullString
loc_00403B1A: GoTo loc_00403B26
loc_00403B1C: 'Referenced from: 00403AFE
loc_00403B1C: var_184 = vbNullString
loc_00403B26: 'Referenced from: 00403B1A
loc_00403B47: var_7C = Global.Screen
loc_00403B4C: var_130 = var_7C
loc_00403BA7: var_124 = Global.Height
loc_00403BAC: var_138 = var_124
loc_00403BEF: If var_407334 <> 0 Then GoTo loc_00403C0D
loc_00403BFB: var_eax = %cobj
loc_00403C01: var_190 = vbNullString
loc_00403C0B: GoTo loc_00403C17
loc_00403C0D: 'Referenced from: 00403BEF
loc_00403C0D: var_190 = vbNullString
loc_00403C17: 'Referenced from: 00403C0B
loc_00403C38: var_80 = Global.Screen
loc_00403C3D: var_140 = var_80
loc_00403CA0: var_148 = Global.TwipsPerPixelY
loc_00403CFD: cdq
loc_00403CFE: idiv ecx
loc_00403D00: var_54 = CLng(var_124)
loc_00403D60: var_44 = CLng(vbNullString)
loc_00403E5C: var_eax = GetWindowRect(hWin, var_64)//获取窗口的位置,并计算大小
loc_00403E7A: var_68 = var_5C - var_64
loc_00403E90: var_74 = var_58 - var_60
B 撕裂效果的实现 撕裂效果的实现使用了两个比较特殊的函数CreatePolygonRgn和SetWindowRgn, [Visual Basic .NET] 纯文本查看 复制代码 loc_004063B6: var_eax = CreatePolygonRgn(edx+0000000Ch+var_384, var_24, 2)
loc_004063EB: var_eax = SetWindowRgn(hWin, CreatePolygonRgn(edx+0000000Ch+var_384, var_24, 2), -1)
其中CreatePolygonRgn,创建一个由一系列点围成的区域。windows在需要时自动将最后点与第一点相连以封闭多边形 SetWindowRgn设置了一个窗口的区域.只有被包含在这个区域内的地方才会被重绘,而不包含在区域内的其他区域系统将不会显示。其中最后一个参数为-1表示NULL,空值,这样的话就不会显示出来。 所以结合这两个函数的功能就可以知道,撕裂窗口原理是先产生一个封闭的包围,然后让这个封闭的包围不显示出来。 查杀方法 打开任务管理器,结束对应进程就可以。
小结 这是一个很小型的病毒样本,没有隐藏行为,没有太多的恶意感染现象,只是产生一个比较好玩的效果。 那么问题来了:这到底是算一个恶搞的软件还是一个病毒样本呢? 或许这就像好人和坏人的区别一样吧,两者之间并没有很明显的界限。只是你看的角度决定而已吧。
样本在这(解压密码:52pojie):
Tear.zip
(19.71 KB, 下载次数: 63)
|