首页
社区
课程
招聘
[原创]一个下载者的详细分析
发表于: 2012-5-31 11:23 31795

[原创]一个下载者的详细分析

2012-5-31 11:23
31795
00401550  /$  55            PUSH EBP
00401551  |.  8BEC          MOV EBP,ESP
00401553  |.  83EC 34       SUB ESP,34
00401556  |.  C745 F4 9A501>MOV DWORD PTR SS:[EBP-C],210509A
0040155D  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
00401560  |.  8945 D8       MOV DWORD PTR SS:[EBP-28],EAX
00401563  |.  8B4D D8       MOV ECX,DWORD PTR SS:[EBP-28]
00401566  |.  8B55 D8       MOV EDX,DWORD PTR SS:[EBP-28]
00401569  |.  0351 3C       ADD EDX,DWORD PTR DS:[ECX+3C]
0040156C  |.  8955 DC       MOV DWORD PTR SS:[EBP-24],EDX
0040156F  |.  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
00401572  |.  8B48 78       MOV ECX,DWORD PTR DS:[EAX+78]
00401575  |.  034D 08       ADD ECX,DWORD PTR SS:[EBP+8]
00401578  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
0040157B  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
0040157E  |.  8B42 24       MOV EAX,DWORD PTR DS:[EDX+24]
00401581  |.  0345 08       ADD EAX,DWORD PTR SS:[EBP+8]
00401584  |.  8945 E0       MOV DWORD PTR SS:[EBP-20],EAX
00401587  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]
0040158A  |.  8B51 20       MOV EDX,DWORD PTR DS:[ECX+20]
0040158D  |.  0355 08       ADD EDX,DWORD PTR SS:[EBP+8]
00401590  |.  8955 E8       MOV DWORD PTR SS:[EBP-18],EDX
00401593  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
00401596  |.  8B48 1C       MOV ECX,DWORD PTR DS:[EAX+1C]
00401599  |.  034D 08       ADD ECX,DWORD PTR SS:[EBP+8]
0040159C  |.  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
0040159F  |.  C745 EC 00000>MOV DWORD PTR SS:[EBP-14],0
004015A6  |.  EB 09         JMP SHORT virussig.004015B1
  
.text:004015A8 loc_4015A8:                             ; CODE XREF: sub_401550+E4j
.text:004015A8                 mov     edx, [ebp+IndexOfName]
.text:004015AB                 add     edx, 1          ; 计数器加1
.text:004015AE                 mov     [ebp+IndexOfName], edx
.text:004015B1
.text:004015B1 loc_4015B1:                             ; CODE XREF: sub_401550+56j
.text:004015B1                 mov     eax, [ebp+kernel_DataDirectory]
.text:004015B4                 mov     ecx, [ebp+IndexOfName]
.text:004015B7                 cmp     ecx, [eax+18h]  ; kernel_NumberOfNames
.text:004015BA                 jnb     short loc_401639
.text:004015BC                 mov     [ebp+var_2C], 627D1Bh
.text:004015C3                 mov     edx, [ebp+kernel_AddressOfNames]
.text:004015C6                 mov     eax, [edx]
.text:004015C8                 add     eax, [ebp+arg_0]
.text:004015CB                 mov     [ebp+APInameStr], eax
.text:004015CE                 mov     ecx, [ebp+APInameStr]
.text:004015D1                 movzx   edx, byte ptr [ecx]
.text:004015D4                 cmp     edx, 47h        ; G
.text:004015D7                 jnz     short loc_40162B
.text:004015D9                 mov     eax, [ebp+APInameStr]
.text:004015DC                 movzx   ecx, byte ptr [eax+1]
.text:004015E0                 cmp     ecx, 65h        ; e
.text:004015E3                 jnz     short loc_40162B
.text:004015E5                 mov     edx, [ebp+APInameStr]
.text:004015E8                 movzx   eax, byte ptr [edx+2]
.text:004015EC                 cmp     eax, 74h        ; t
.text:004015EF                 jnz     short loc_40162B
.text:004015F1                 mov     ecx, [ebp+APInameStr]
.text:004015F4                 movzx   edx, byte ptr [ecx+3]
.text:004015F8                 cmp     edx, 50h        ; P
.text:004015FB                 jnz     short loc_40162B
.text:004015FD                 mov     eax, [ebp+APInameStr]
.text:00401600                 movzx   ecx, byte ptr [eax+8]
.text:00401604                 cmp     ecx, 64h        ; d
.text:00401607                 jnz     short loc_40162B
.text:00401609                 mov     [ebp+var_34], 8B28h
.text:00401610                 mov     edx, [ebp+IndexOfName]
.text:00401613                 mov     eax, [ebp+kernel_AddressOfNameOrdinals]
.text:00401616                 movzx   ecx, word ptr [eax+edx*2]
.text:0040161A                 mov     [ebp+IndexOfAddr], ecx
.text:0040161D                 mov     edx, [ebp+IndexOfAddr]
.text:00401620                 mov     eax, [ebp+kernel_AddressOfFunctions]
.text:00401623                 mov     eax, [eax+edx*4]
.text:00401626                 add     eax, [ebp+arg_0]
.text:00401629                 jmp     short loc_40163B
.text:0040162B ; ---------------------------------------------------------------------------
.text:0040162B
.text:0040162B loc_40162B:                             ; CODE XREF: sub_401550+87j
.text:0040162B                                         ; sub_401550+93j ...
.text:0040162B                 mov     ecx, [ebp+kernel_AddressOfNames]
.text:0040162E                 add     ecx, 4
.text:00401631                 mov     [ebp+kernel_AddressOfNames], ecx
.text:00401634                 jmp     loc_4015A8
.text:00401639 ; ---------------------------------------------------------------------------
.text:00401639
.text:00401639 loc_401639:                             ; CODE XREF: sub_401550+6Aj
.text:00401639                 xor     eax, eax
.text:0040163B
.text:0040163B loc_40163B:                             ; CODE XREF: sub_401550+D9j
.text:0040163B                 mov     esp, ebp
.text:0040163D                 pop     ebp
.text:0040163E                 retn                    ; 返回GetProcAddress的地址
.text:004015D1                 movzx   edx, byte ptr [ecx]
.text:004015D4                 cmp     edx, 47h        ; G
.text:004015D7                 jnz     short loc_40162B
.text:004015D9                 mov     eax, [ebp+APInameStr]
.text:004015DC                 movzx   ecx, byte ptr [eax+1]
.text:004015E0                 cmp     ecx, 65h        ; e
.text:004015E3                 jnz     short loc_40162B
.text:004015E5                 mov     edx, [ebp+APInameStr]
.text:004015E8                 movzx   eax, byte ptr [edx+2]
.text:004015EC                 cmp     eax, 74h        ; t
.text:004015EF                 jnz     short loc_40162B
.text:004015F1                 mov     ecx, [ebp+APInameStr]
.text:004015F4                 movzx   edx, byte ptr [ecx+3]
.text:004015F8                 cmp     edx, 50h        ; P
.text:004015FB                 jnz     short loc_40162B
.text:004015FD                 mov     eax, [ebp+APInameStr]
.text:00401600                 movzx   ecx, byte ptr [eax+8]
.text:00401604                 cmp     ecx, 64h        ; d
mov     edx, [ebp+IndexOfName]
mov     eax, [ebp+kernel_AddressOfNameOrdinals]
movzx   ecx, word ptr [eax+edx*2]
mov     [ebp+IndexOfAddr], ecx
mov     edx, [ebp+IndexOfAddr]
mov     eax, [ebp+kernel_AddressOfFunctions]
mov     eax, [eax+edx*4]
add     eax, [ebp+arg_0]
loc_401706:
mov     eax, [ebp+VTrtualAllocTx]
mov     byte ptr [eax+1], 69h ; i
mov     ecx, [ebp+VTrtualAllocTx]
mov     byte ptr [ecx+0Ch], 45h ; E
mov     edx, [ebp+var_214] ; 4
add     edx, offset dword_403000
mov     [ebp+var_280], edx
mov     eax, [ebp+var_280]
push    eax
call    sub_401390      ; 返回传入地址的前一个DWORD地址的值
add     esp, 4
mov     [ebp+Size], eax
mov     ecx, [ebp+VTrtualAllocTx]
push    ecx
mov     edx, [ebp+handle_kernel32]
push    edx
call    [ebp+GetProcAddress] ; 获取VirtualAllocEx的地址
mov     VirtualAllocEx, eax
mov     eax, [ebp+Size]
push    eax
call    sub_4013A0      ; 声请指定大小的内存空间
add     esp, 4
mov     [ebp+Dst], eax
mov     ecx, [ebp+Size]
push    ecx             ; Size
push    0               ; Val
mov     edx, [ebp+Dst]
push    edx             ; Dst
call    memset          ; 将刚刚申请的内存空间初始化为0
add     esp, 0Ch
mov     eax, [ebp+Size]
mov     [ebp+FreeVirtualSize], eax
push    ebp
mov     ebp, esp
push    40h             ; PAGE_EXECUTE_READWRITE
push    3000h           ; MEM_COMMIT | MEM_RESERVE
mov     eax, [ebp+arg_0]
push    eax
push    0
push    0FFFFFFFFh
call    VirtualAllocEx     ;之前得到的VirtualAllocEx的地址
pop     ebp
retn
  text:00401793                 mov     ecx, [ebp+BeCopyedDataNum] ; 从0x403004处开始,每0x5A数据拷贝到申请的内存中(每次间隔0xA大小的数据)
  .text:00401796                 cmp     ecx, [ebp+Size] ;初始为0
  .text:0040179C                 jnb     short loc_40181B ; 判断是否还有可用的空闲内存
  .text:0040179E                 mov     edx, [ebp+FreeVirtualSize]
  .text:004017A4                 push    edx
  .text:004017A5                 mov     eax, [ebp+UsedVirtualSize]
  .text:004017AB                 push    eax
  .text:004017AC                 call    sub_4013C0      ; 判断还能拷贝的数据大小
  .text:004017B1                 add     esp, 8
  .text:004017B4                 mov     [ebp+NumberOfCopyData], eax
  .text:004017BA                 mov     ecx, [ebp+NumberOfCopyData]
  .text:004017C0                 push    ecx
  .text:004017C1                 mov     edx, [ebp+var_280]  ;var_280为0x403004
  .text:004017C7                 add     edx, [ebp+IndexSourceStr]
  .text:004017CD                 push    edx
  .text:004017CE                 mov     eax, [ebp+Dst]
  .text:004017D4                 add     eax, [ebp+BeCopyedDataNum]
  .text:004017D7                 push    eax
  .text:004017D8                 call    sub_4013F0      ; 从一个内存区域拷贝指定数据至另一个内存块
  .text:004017DD                 add     esp, 0Ch
  .text:004017E0                 mov     ecx, [ebp+var_220] ; 源字符串的间隔(大小为10)
  .text:004017E6                 add     ecx, [ebp+UsedVirtualSize]
  .text:004017EC                 add     ecx, [ebp+IndexSourceStr]
  .text:004017F2                 mov     [ebp+IndexSourceStr], ecx
  .text:004017F8                 mov     edx, [ebp+BeCopyedDataNum]
  .text:004017FB                 add     edx, [ebp+UsedVirtualSize]
  .text:00401801                 mov     [ebp+BeCopyedDataNum], edx
  .text:00401804                 mov     eax, [ebp+FreeVirtualSize]
  .text:0040180A                 sub     eax, [ebp+NumberOfCopyData] ; 减去已经填充的数据大小
  .text:00401810                 mov     [ebp+FreeVirtualSize], eax
  .text:00401816                 jmp     loc_401793      ; 从0x403004处开始,每0x5A数据拷贝到申请的内存中(每次间隔0xA大小的数据)
  .text:0040141E                 mov     edx, [ebp+arg_4]
  .text:00401421                 add     edx, [ebp+var_8]
  .text:00401424                 movzx   eax, byte ptr [edx]
  .text:00401427                 mov     [ebp+var_10], eax
  .text:0040142A                 mov     [ebp+var_C], 96E8FDh
  .text:00401431                 mov     ecx, [ebp+var_10]
  .text:00401434                 add     ecx, [ebp+var_C]
  .text:00401437                 mov     edx, [ebp+arg_0]
  .text:0040143A                 add     edx, [ebp+var_8]
  .text:0040143D                 mov     [edx], cl
  .text:0040143F                 mov     eax, [ebp+arg_0]
  .text:00401442                 add     eax, [ebp+var_8]
  .text:00401445                 movzx   ecx, byte ptr [eax]
  .text:00401448                 sub     ecx, 961788h
  .text:0040144E                 mov     edx, [ebp+arg_0]
  .text:00401451                 add     edx, [ebp+var_8]
  .text:00401454                 mov     [edx], cl
  .text:00401456                 mov     eax, [ebp+arg_0]
  .text:00401459                 add     eax, [ebp+var_8]
  .text:0040145C                 mov     cl, [eax]
  .text:0040145E                 sub     cl, 1
  .text:00401461                 mov     edx, [ebp+arg_0]
  .text:00401464                 add     edx, [ebp+var_8]
  .text:00401467                 mov     [edx], cl
  .text:00401469                 mov     eax, [ebp+arg_0]
  .text:0040146C                 add     eax, [ebp+var_8]
  .text:0040146F                 movzx   ecx, byte ptr [eax]
  .text:00401472                 sub     ecx, 0D174h
  .text:00401478                 mov     edx, [ebp+arg_0]
  .text:0040147B                 add     edx, [ebp+var_8]
  .text:0040147E                 mov     [edx], cl

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (30)
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
2
先站位,吃饭去了,回来继续排版
2012-5-31 11:25
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主,分析出来了再继续牛逼一点写出专杀??我很期待。
2012-5-31 12:00
0
雪    币: 183
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这个必须顶一个!!!
2012-5-31 13:45
0
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主不错啊....up...........呵呵...
2012-5-31 14:03
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
6
前面应该是个私壳
2012-5-31 15:24
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
7
楼主辛苦了,多谢分享
Downloader比较适合刚开始练手,不过这上面的花指令倒不大可能会干扰到杀毒软件什么,另外.pl是波兰不是俄罗斯

对了,有个小窍门可以参考一下。常用的结构(例如PE,TEB等等),可以写个脚本自动添加,需要用得时候调用一下,然后在代码中相应的变量上点T,或是直接对结构起始地址点Alt+Q,那样可读性好所以理解起来容易很多
2012-5-31 15:46
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
支持,支持,顶。
2012-5-31 15:49
0
雪    币: 406
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
Win32/Karagany.I!packed
2012-5-31 15:53
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
10
谢谢乌龟大师的指点,另我查IP看到应该是俄罗斯的。
2012-5-31 17:10
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
11
谢谢,听小胖说你在他旁边,平时多欺负他吧,呵呵。
2012-5-31 17:11
0
雪    币: 1024
活跃值: (240)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
12
got it
2012-5-31 17:24
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
顶了再说

下来看看
2012-5-31 21:49
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
14
呵呵,注意查询IP是个很好的习惯,不过。。。

相对而言,我们猜猜某人如果注册特定国家一级域名的话。。。
是更可能注册一个其他国家的域名然后指向本国的IP,还是更可能注册本国域名然后指向其他国家的IP?

好吧猜测归猜测,我们一步步分析

1. 先打开一级域名osa.pl看看,自动跳转到另一个波兰域名bee.pl
2. 再看osa.pl的whois记录,这是个06就注册了的私人域名,但表面上看起来没有正式启用
3. 这个域名最初是通过一家波兰境内的域名服务商az.pl注册的,但在09年后换了另一家塞浦路斯的离案波兰域名服务商dropped.pl
4. 一级osa.pl本身指向的是一个分配给加拿大的IP地址184.107.53.150, 而本贴提到的二级域名paziza.osa.pl指向的是另一个分配给俄罗斯的虚拟主机和主机托管服务商“Digital Networks CJSC”管辖下的IP地址79.137.226.87,注意osa.pl本身不是不是免费二级域名服务商
5. IP地址79.137.226.87的HTTP服务器似乎停止响应了,但IP还Ping的通,不排除随时恢复的可能。另一方面,这个地址还至少托管了5个域名,adultplaythings.biz,massatrabl.info,onstarted.info,savewindows.ru,statisco.org。全部是去年或今年才注册的私人域名。
6. 再看看一级域名osa.pl指向的这个加拿大IP184.107.53.150,这个地址至少托管了5个波兰一级域名345.pl,bee.pl,bij.pl,orge.pl,osa.pl,全部都自动跳转到bee.pl,并不定期自动随机选择一种语言显示“站点正在建设中”。注意这5个一级域名全都是05-06年通过不同波兰域名服务商注册的私人域名。

综合这些因素考虑,以下2种可能比较大
1. 这个Downloader的幕后运作者是个懂俄语的波兰人(个人觉得这个可能最大)
2. 是个黑了波兰人域名的俄罗斯人(对于一个没正式启用的域名,被黑的可能性不大,倒是这么多注册了多年的一级域名一直没有用不说,反而随即选择一种语言显示“站点正在建设中”让我觉得很诡异)

当然,也可能是某位牛哥同时黑了波兰人的域名和老毛子的服务器,不过这个概率小了点
不过这里至少说明了一点,这位幕后先生,虽说可能说不上是专业的,至少也是认真的,也许在不远的将来我们还会看到他的其他动作

这里可能扯得太多了。主要是想说明一点,偶尔运气好的时候,可能会从一些蛛丝马迹中找出别的故事来
2012-5-31 22:02
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
15
最后不妨再Google一下关键字"osa.pl malware",

大量的搜索结果,这应该够说明这家伙是个波兰人了,
有时间和兴趣的朋友无妨继续查下去,我就不唠叨了

通常Downloader本身的内容有限,但如果能找出一些背后运作者的故事,一些客户会感兴趣的
2012-5-31 22:11
0
雪    币: 316
活跃值: (128)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
16
膜拜乌龟大师!
2012-6-1 00:15
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
乌龟大师牛人啊
2012-6-1 09:18
0
雪    币: 44
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
老大很厉害很牛逼
2012-6-1 12:37
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
实在看不下去了,太长了,毅力啊!
2012-6-1 16:21
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
等上班了试试这个。
2012-6-2 22:48
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢分析  谢谢分享
2012-6-8 08:04
0
雪    币: 303
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
灰长牛。。。
2012-6-8 08:37
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
23
mark,真尼玛详细
2012-6-8 09:53
0
雪    币: 1681
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
itf
24
MARK 谢谢分享了 !!!!!!!!!!!!!!!
2012-6-12 21:54
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
25
赞下乌龟大师的后续分析
专业的病毒分析不仅仅在于分析病毒本身,对于幕后的团伙及产业链,也同样需要去了解,知己知彼才能制定更有效的对抗策略。
2012-6-14 01:13
0
游客
登录 | 注册 方可回帖
返回
//