我的博客小站

一款魔兽盗号木马分析

这款魔兽盗号木马是模仿“多玩魔兽盒子”欺骗用户从而进行盗号的,请看“多玩魔兽盒子”官方网站:http://wow.duowan.com/wowbox1/,

木马模仿的钓鱼网站:http://www.tudouw.com/ 。可以看出做得很相似,稍不留意的话就会被钓鱼。大家该问了,这样的网站怎么会访问到的啊,

如果魔兽玩家通过百度搜索“多玩魔兽盒子”,第一页便会有这个钓鱼网站。可以看出万恶的百度给它做了竞价排名,这就叫做为虎作伥、周助为虐,

这个百度得记一大过,它只会圈钱了。网络太可怕了,什么都不敢相信了……

 

再说这个木马,除了网页上做得很相似外。它的下载文件也和真正的“多玩魔兽盒子”差不多,只是稍微大了一些,因为捆绑了一个木马。

下载后运行,它会先释放出真正的“多玩魔兽盒子”并运行,此时木马也被释放并运行,但是用户不会察觉有什么一样。

 

木马释放出一个m9.exe,通过调用命令行:

net stop cryptsvc

sc config cryptsvc start = disabled

sc delete cryptsvc

关闭文件保护系统,并将原始系统dll文件:ksuer.dll,midimap.dll,msimg32.dll分别改名为:yuksuer.dll,yumidimap.dll,yumsimg32.dll。

并将木马dll:system.dll替换掉原始系统dll文件:ksuer.dll,midimap.dll,msimg32.dll。另外还备份一份sysapp10.dll文件在系统目录下。

dllcache中的上述三个系统dll文件也被替换位木马dll,魔兽安装目录下也会多了ksuer.dll,midimap.dll,msimg32.dll几个文件,也是木马dll。

通过查看木马dll可以看出,里面的导出函数有一部分做了重定向,实际上是劫持了上述的几个dll文件。

m9.exe最后通过rundll32.exe调用木马dll的导出函数ServerMain传递m9的文件路径进去,目的是让木马dll的这个函数帮助删除m9文件。

 

木马dll

如果当前注入的进程是wow.exe,删除其目录下的scan.dll,scan.dll.new,据说这两个文件是魔兽的木马/外挂扫描模块。

修改send,recv,sendto函数开头的代码,应该是做了hook。

会有枚举魔兽窗口,以及截图相关的操作,具体意义不详。

通过RegisterShellHookWindow和SetWindowLong(GWL_WNDPROC)拦截窗口创建,这个可以确定运行的是不是魔兽世界进程,其他进程可以直接忽略。

这个RegisterShellHookWindowWH_CBT钩子一样强劲,大家可以学习下。

 

下面讲解主要盗号技术:特征码定位拦截。

我截取了木马中的一些特征并稍作整理如下:

10001D47  |.  C645 F4 8B    mov     byte ptr [ebp-C], 8B
10001D4B |. C645 F5 33 mov byte ptr [ebp-B], 33
10001D4F |. C645 F6 03 mov byte ptr [ebp-A], 3
10001D53 |. C645 F7 F0 mov byte ptr [ebp-9], 0F0
10001D57 |. C645 F8 B9 mov byte ptr [ebp-8], 0B9
10001D5B |. C645 F9 55 mov byte ptr [ebp-7], 55
??
??
??
ff
ff

8B3303F0B955??????FFFF

--------------------
528D85??FB50
---------------

10001F66 |. C645 F8 8B mov byte ptr [ebp-8], 8B
10001F6A |. C645 F9 55 mov byte ptr [ebp-7], 55
10001F6E |. C645 FA 10 mov byte ptr [ebp-6], 10
10001F72 |. C645 FB 89 mov byte ptr [ebp-5], 89
10001F76 |. C645 FC 4B mov byte ptr [ebp-4], 4B
10001F7A |. C645 FD 10 mov byte ptr [ebp-3], 10

8B5510894B10

169FA36

0169FA30 |> \8B45 08 mov eax, dword ptr [ebp+8]
0169FA33 |. 8B4D 0C mov ecx, dword ptr [ebp+C]
0169FA36 |. 8B55 10 mov edx, dword ptr [ebp+10]


D9E0DEC1DD1C2450

894DF88BC8

0FB6888501????51

83C004508B4DE883C104


------------------------------

8B3303F0B955??????FFFF 123F005
528D85??FB????50 10ba4f0
8B5510894B10 169FA36
D9E0DEC1DD1C2450 11C3570 16C831E
56508B425CFFD05F5E8BE55D 123eeea
894DF88BC8 11C3547 135E269 14C19D0 161EF74 16BFFBE
0FB6888501????51 155C346 进入魔兽世界的时候会断下
83C004508B4DE883C104 10b362a

67452301

016E8318 |. DF6D F8 fild qword ptr [ebp-8]
016E831B |. 83EC 08 sub esp, 8
016E831E |. D9E0 fchs
016E8320 |. DEC1 faddp st(1), st
016E8322 |. DD1C24 fstp qword ptr [esp]
016E8325 |. 50 push eax
016E8326 |. E8 552DADFF call 011BB080

上面的特征都有一定的意义,我这里取一个典型的例子来说明。

56508B425CFFD05F5E8BE55D

这段特征在魔兽世界进程里搜索到后,是一段代码:

001AEEEA 56 push esi
001AEEEB 50 push eax
001AEEEC 8B42 5C mov eax,dword ptr ds:[edx+5C]
001AEEEF FFD0 call eax

找到后就对上面的地址处下断点,并在魔兽世界的账号密码登录框中输入后点击登录,便中段下来,通过观察寄存器或者堆栈信息就能看到明文的账号和密码。

用回溯法找到几个关键的调用代码:

0155A070  /$  55            push    ebp
0155A071 |. 8BEC mov ebp, esp
0155A073 |. 803D 04DDBE01>cmp byte ptr [1BEDD04], 0
0155A07A |. 0F84 16010000 je 0155A196
0155A080 |. 833D ACD7BE01>cmp dword ptr [1BED7AC], 0
0155A087 |. 0F84 09010000 je 0155A196
0155A08D |. 833D B4D7BE01>cmp dword ptr [1BED7B4], 0
0155A094 |. 0F84 FC000000 je 0155A196
0155A09A |. 833D 90D2BE01>cmp dword ptr [1BED290], 0
0155A0A1 |. 0F85 EF000000 jnz 0155A196
0155A0A7 |. 8B45 08 mov eax, dword ptr [ebp+8]
0155A0AA |. 85C0 test eax, eax
0155A0AC |. 0F84 0C010000 je 0155A1BE
0155A0B2 |. 8038 00 cmp byte ptr [eax], 0
0155A0B5 |. 0F84 03010000 je 0155A1BE
0155A0BB |. 56 push esi
0155A0BC |. 8B75 0C mov esi, dword ptr [ebp+C]
0155A0BF |. 85F6 test esi, esi
0155A0C1 |. 0F84 D1000000 je 0155A198
0155A0C7 |. 803E 00 cmp byte ptr [esi], 0
0155A0CA |. 0F84 C8000000 je 0155A198
0155A0D0 |. 83C9 FF or ecx, FFFFFFFF
0155A0D3 |. 890D 34E5A301 mov dword ptr [1A3E534], ecx
0155A0D9 |. 890D 38E5A301 mov dword ptr [1A3E538], ecx
0155A0DF |. 890D 3CE5A301 mov dword ptr [1A3E53C], ecx
0155A0E5 |. 890D 40E5A301 mov dword ptr [1A3E540], ecx
0155A0EB |. C605 D0D7BE01>mov byte ptr [1BED7D0], 0
0155A0F2 |. C705 98D7BE01>mov dword ptr [1BED798], 0
0155A0FC |. C705 90D2BE01>mov dword ptr [1BED290], 1
0155A106 |. C705 F8D7BE01>mov dword ptr [1BED7F8], 0
0155A110 |. 8A08 mov cl, byte ptr [eax]
0155A112 |. BA 98D2BE01 mov edx, 01BED298 ; ASCII "WANG1111"
0155A117 |. 84C9 test cl, cl
0155A119 |. 74 25 je short 0155A140
0155A11B |. EB 03 jmp short 0155A120
0155A11D | 8D49 00 lea ecx, dword ptr [ecx]
0155A120 |> 81FA 97D7BE01 /cmp edx, 01BED797
0155A126 |. 73 18 |jnb short 0155A140
0155A128 |. 80F9 7C |cmp cl, 7C
0155A12B |. 75 06 |jnz short 0155A133
0155A12D |. 3848 01 |cmp byte ptr [eax+1], cl
0155A130 |. 75 01 |jnz short 0155A133
0155A132 |. 40 |inc eax
0155A133 |> 0FB608 |movzx ecx, byte ptr [eax]
0155A136 |. 40 |inc eax
0155A137 |. 880A |mov byte ptr [edx], cl
0155A139 |. 8A08 |mov cl, byte ptr [eax]
0155A13B |. 42 |inc edx
0155A13C |. 84C9 |test cl, cl
0155A13E |.^ 75 E0 \jnz short 0155A120
0155A140 |> 68 98D2BE01 push 01BED298 ; ASCII "WANG1111"
0155A145 |. C602 00 mov byte ptr [edx], 0
0155A148 |. E8 EE352000 call 0175D73B
0155A14D |. 68 B8838F01 push 018F83B8 ; ASCII "CANCEL"
0155A152 |. 68 60848C01 push 018C8460 ; ASCII "%s"
0155A157 |. 6A 03 push 3
0155A159 |. E8 D2F70300 call 01599930
0155A15E |. 0FB615 D1D7BE>movzx edx, byte ptr [1BED7D1]
0155A165 |. 52 push edx
0155A166 |. 56 push esi
0155A167 |. 68 98D2BE01 push 01BED298 ; ASCII "WANG1111"
0155A16C |. E8 3F4BCEFF call 0123ECB0
0155A171 |. 8BC6 mov eax, esi
0155A173 |. 83C4 1C add esp, 1C
0155A176 |. 8D50 01 lea edx, dword ptr [eax+1]
0155A179 |. 8DA424 000000>lea esp, dword ptr [esp]
0155A180 |> 8A08 /mov cl, byte ptr [eax]
0155A182 |. 40 |inc eax
0155A183 |. 84C9 |test cl, cl
0155A185 |.^ 75 F9 \jnz short 0155A180
0155A187 |. 2BC2 sub eax, edx
0155A189 |. 50 push eax
0155A18A |. 6A 00 push 0
0155A18C |. 56 push esi
0155A18D |. E8 7E3FC2FF call 0117E110
0155A192 |. 83C4 0C add esp, 0C
0155A195 |. 5E pop esi
0155A196 |> 5D pop ebp
0155A197 |. C3 retn
0155A198 |> 6A 00 push 0
0155A19A |. 6A FF push -1
0155A19C |. 68 9CE09001 push 0190E09C ; ASCII "LOGIN_ENTER_PASSWORD"
0155A1A1 |. E8 4AD70300 call 015978F0
0155A1A6 |. 50 push eax
0155A1A7 |. 68 90DF9001 push 0190DF90 ; ASCII "OKAY"
0155A1AC |. 68 CC4F8D01 push 018D4FCC ; ASCII "%s%s"
0155A1B1 |. 6A 03 push 3
0155A1B3 |. E8 78F70300 call 01599930
0155A1B8 |. 83C4 1C add esp, 1C
0155A1BB |. 5E pop esi
0155A1BC |. 5D pop ebp
0155A1BD |. C3 retn
0155A1BE |> 6A 00 push 0
0155A1C0 |. 6A FF push -1
0155A1C2 |. 68 88E09001 push 0190E088 ; ASCII "LOGIN_ENTER_NAME"
0155A1C7 |. E8 24D70300 call 015978F0
0155A1CC |. 50 push eax
0155A1CD |. 68 90DF9001 push 0190DF90 ; ASCII "OKAY"
0155A1D2 |. 68 CC4F8D01 push 018D4FCC ; ASCII "%s%s"
0155A1D7 |. 6A 03 push 3
0155A1D9 |. E8 52F70300 call 01599930
0155A1DE |. 83C4 1C add esp, 1C
0155A1E1 |. 5D pop ebp
0155A1E2 \. C3 retn

 

0123ECB0  /$  55            push    ebp
0123ECB1 |. 8BEC mov ebp, esp
0123ECB3 |. 81EC 00050000 sub esp, 500
0123ECB9 |. 803D 6005AF01>cmp byte ptr [1AF0560], 0
0123ECC0 |. 74 27 je short 0123ECE9
0123ECC2 |. 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123ECC8 |. 85C9 test ecx, ecx
0123ECCA |. 74 16 je short 0123ECE2
0123ECCC |. 8B01 mov eax, dword ptr [ecx]
0123ECCE |. 8B90 D0000000 mov edx, dword ptr [eax+D0]
0123ECD4 |. 6A 01 push 1
0123ECD6 |. FFD2 call edx
0123ECD8 |. C705 6405AF01>mov dword ptr [1AF0564], 0
0123ECE2 |> C605 6005AF01>mov byte ptr [1AF0560], 0
0123ECE9 |> 56 push esi
0123ECEA |. 57 push edi
0123ECEB |. 8B7D 08 mov edi, dword ptr [ebp+8]
0123ECEE |. 6A 40 push 40
0123ECF0 |. 57 push edi
0123ECF1 |. 33F6 xor esi, esi
0123ECF3 |. E8 B801F4FF call 0117EEB0
0123ECF8 |. 83C4 08 add esp, 8
0123ECFB |. 85C0 test eax, eax
0123ECFD |. 74 05 je short 0123ED04
0123ECFF |. BE 01000000 mov esi, 1
0123ED04 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123ED0A |. 85C9 test ecx, ecx
0123ED0C |. 74 56 je short 0123ED64
0123ED0E |. 8B01 mov eax, dword ptr [ecx]
0123ED10 |. 8B90 D8000000 mov edx, dword ptr [eax+D8]
0123ED16 |. FFD2 call edx
0123ED18 |. 83F8 01 cmp eax, 1
0123ED1B |. 75 04 jnz short 0123ED21
0123ED1D |. 85F6 test esi, esi
0123ED1F |. 74 18 je short 0123ED39
0123ED21 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123ED27 |. 8B01 mov eax, dword ptr [ecx]
0123ED29 |. 8B90 D8000000 mov edx, dword ptr [eax+D8]
0123ED2F |. FFD2 call edx
0123ED31 |. 85C0 test eax, eax
0123ED33 |. 75 26 jnz short 0123ED5B
0123ED35 |. 85F6 test esi, esi
0123ED37 |. 74 22 je short 0123ED5B
0123ED39 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123ED3F |. 85C9 test ecx, ecx
0123ED41 |. 74 0C je short 0123ED4F
0123ED43 |. 8B01 mov eax, dword ptr [ecx]
0123ED45 |. 8B90 D0000000 mov edx, dword ptr [eax+D0]
0123ED4B |. 6A 01 push 1
0123ED4D |. FFD2 call edx
0123ED4F |> C705 6405AF01>mov dword ptr [1AF0564], 0
0123ED59 |. EB 09 jmp short 0123ED64
0123ED5B |> 833D 6405AF01>cmp dword ptr [1AF0564], 0
0123ED62 |. 75 65 jnz short 0123EDC9
0123ED64 |> 6A 00 push 0
0123ED66 |. 85F6 test esi, esi
0123ED68 |. 74 21 je short 0123ED8B
0123ED6A |. 68 7C030000 push 37C
0123ED6F |. 68 D83A8E01 push 018E3AD8 ; ASCII ".\ClientServices.cpp"
0123ED74 |. 68 28120000 push 1228
0123ED79 |. E8 621CFEFF call 012209E0
0123ED7E |. 85C0 test eax, eax
0123ED80 |. 74 2A je short 0123EDAC
0123ED82 |. 8BC8 mov ecx, eax
0123ED84 |. E8 17051500 call 0138F2A0
0123ED89 |. EB 23 jmp short 0123EDAE
0123ED8B |> 68 7E030000 push 37E
0123ED90 |. 68 D83A8E01 push 018E3AD8 ; ASCII ".\ClientServices.cpp"
0123ED95 |. 68 90110000 push 1190
0123ED9A |. E8 411CFEFF call 012209E0
0123ED9F |. 85C0 test eax, eax
0123EDA1 |. 74 09 je short 0123EDAC
0123EDA3 |. 8BC8 mov ecx, eax
0123EDA5 |. E8 66C01400 call 0138AE10
0123EDAA |. EB 02 jmp short 0123EDAE
0123EDAC |> 33C0 xor eax, eax
0123EDAE |> A3 6405AF01 mov dword ptr [1AF0564], eax
0123EDB3 |. 8B30 mov esi, dword ptr [eax]
0123EDB5 |. E8 A6FEFFFF call 0123EC60
0123EDBA |. 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EDC0 |. 50 push eax
0123EDC1 |. 8B86 CC000000 mov eax, dword ptr [esi+CC]
0123EDC7 |. FFD0 call eax
0123EDC9 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EDCF |. 57 push edi
0123EDD0 |. E8 2B3AFFFF call 01232800
0123EDD5 |. 8B0D 8405AF01 mov ecx, dword ptr [1AF0584]
0123EDDB |. 8379 30 00 cmp dword ptr [ecx+30], 0
0123EDDF |. 74 75 je short 0123EE56
0123EDE1 |. A1 8897AA01 mov eax, dword ptr [1AA9788]
0123EDE6 |. 83F8 08 cmp eax, 8 ; Switch (cases 0..8)
0123EDE9 |. 0F87 81000000 ja 0123EE70
0123EDEF |. FF2485 F8EE23>jmp dword ptr [eax*4+123EEF8]
0123EDF6 |> 833D A0CDA601>cmp dword ptr [1A6CDA0], 3 ; Cases 0,7 of switch 0123EDE6
0123EDFD |. 57 push edi
0123EDFE |. 75 13 jnz short 0123EE13
0123EE00 |. 68 283D8E01 push 018E3D28 ; ASCII "%s#EU"
0123EE05 |. 68 00050000 push 500
0123EE0A |. 8D95 00FBFFFF lea edx, dword ptr [ebp-500]
0123EE10 |. 52 push edx
0123EE11 |. EB 55 jmp short 0123EE68
0123EE13 |> 68 203D8E01 push 018E3D20 ; ASCII "%s#US"
0123EE18 |. 68 00050000 push 500
0123EE1D |. 8D85 00FBFFFF lea eax, dword ptr [ebp-500]
0123EE23 |. 50 push eax
0123EE24 |. EB 42 jmp short 0123EE68
0123EE26 |> 57 push edi ; Cases 2,3,6,8 of switch 0123EDE6
0123EE27 |. 68 283D8E01 push 018E3D28 ; ASCII "%s#EU"
0123EE2C |. EB 2E jmp short 0123EE5C
0123EE2E |> 57 push edi ; Case 1 of switch 0123EDE6
0123EE2F |. 68 183D8E01 push 018E3D18 ; ASCII "%s#KR"
0123EE34 |. 68 00050000 push 500
0123EE39 |. 8D95 00FBFFFF lea edx, dword ptr [ebp-500]
0123EE3F |. 52 push edx
0123EE40 |. EB 26 jmp short 0123EE68
0123EE42 |> 57 push edi ; Cases 4,5 of switch 0123EDE6
0123EE43 |. 68 103D8E01 push 018E3D10 ; ASCII "%s#CN"
0123EE48 |. 68 00050000 push 500
0123EE4D |. 8D85 00FBFFFF lea eax, dword ptr [ebp-500]
0123EE53 |. 50 push eax
0123EE54 |. EB 12 jmp short 0123EE68
0123EE56 |> 57 push edi
0123EE57 |. 68 60848C01 push 018C8460 ; ASCII "%s"
0123EE5C |> 68 00050000 push 500
0123EE61 |. 8D8D 00FBFFFF lea ecx, dword ptr [ebp-500]
0123EE67 |. 51 push ecx
0123EE68 |> E8 8324FEFF call 012212F0
0123EE6D |. 83C4 10 add esp, 10
0123EE70 |> 8B55 0C mov edx, dword ptr [ebp+C] ; Default case of switch 0123EDE6
0123EE73 |. 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EE79 |. 52 push edx
0123EE7A |. 8D85 00FBFFFF lea eax, dword ptr [ebp-500]
0123EE80 |. 50 push eax
0123EE81 |. E8 EA38FFFF call 01232770
0123EE86 |. 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EE8C |. 8A55 10 mov dl, byte ptr [ebp+10]
0123EE8F |. 8891 E7100000 mov byte ptr [ecx+10E7], dl
0123EE95 |. 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EE9B |. 8B01 mov eax, dword ptr [ecx]
0123EE9D |. 8B90 D8000000 mov edx, dword ptr [eax+D8]
0123EEA3 |. FFD2 call edx
0123EEA5 |. 83F8 01 cmp eax, 1
0123EEA8 |. 75 0A jnz short 0123EEB4
0123EEAA |. A1 7405AF01 mov eax, dword ptr [1AF0574]
0123EEAF |. 8B70 28 mov esi, dword ptr [eax+28]
0123EEB2 |. EB 05 jmp short 0123EEB9
0123EEB4 |> BE 5F9E8C01 mov esi, 018C9E5F
0123EEB9 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EEBF |. 8B11 mov edx, dword ptr [ecx]
0123EEC1 |. 8B82 D8000000 mov eax, dword ptr [edx+D8]
0123EEC7 |. FFD0 call eax
0123EEC9 |. 83F8 01 cmp eax, 1
0123EECC |. 75 0B jnz short 0123EED9
0123EECE |. 8B0D 7005AF01 mov ecx, dword ptr [1AF0570]
0123EED4 |. 8B41 28 mov eax, dword ptr [ecx+28]
0123EED7 |. EB 09 jmp short 0123EEE2
0123EED9 |> 8B15 7805AF01 mov edx, dword ptr [1AF0578]
0123EEDF |. 8B42 28 mov eax, dword ptr [edx+28]
0123EEE2 |> 8B0D 6405AF01 mov ecx, dword ptr [1AF0564]
0123EEE8 |. 8B11 mov edx, dword ptr [ecx]
0123EEEA |. 56 push esi
0123EEEB |. 50 push eax
0123EEEC |. 8B42 5C mov eax, dword ptr [edx+5C]
0123EEEF |. FFD0 call eax
0123EEF1 |. 5F pop edi
0123EEF2 |. 5E pop esi
0123EEF3 |. 8BE5 mov esp, ebp
0123EEF5 |. 5D pop ebp
0123EEF6 \. C3 retn

几处函数的入口均能看到账号和密码的明文,至于木马是利用特征定位后直接读取变量的内容还是做了hook跳转后截取,都是可以获取的。

这里只是揭示下它使用的技术原理,大家可以自行挖掘。

 

最后忘了说下,这个木马已经不能成功盗号了,魔兽世界能检测到此木马的,运行魔兽世界后要么crash,要么给出提示说感染了某某盗号木马,还一直有语音提示:

警报警报……

 

下面说下魔兽世界:

第一次接触魔兽是大学里头的室友在玩,很是入迷,整天都能听到“我离得太远了”、“我需要靠近一些”的声音。觉得这一定是当时一款目前比较好玩的游戏。

能让他们不上课不睡觉的玩。

现在下载下来体验,有几十个GB的大小,实在是太庞大了。不过画面我不喜欢,感觉太粗糙了,至少我不会去玩,我对画面的要求太高了。不过最新的CG做得不错。

wow主程序没有加壳,可以直接分析,反调试也不强,我等小菜鸟都可以分析。里面的账号密码啥的都是明文存在,对于盗号者来说太简单了。

但是它是成功的,与其做那么多的工作在安全上面,倒不如多花点心思在如何做好游戏上面。这一点国人是无法相比的,国产游戏与日俱增,做得那是啥啊一个比一个垃圾,

就看谁会炒作。虽然我不玩魔兽,但是我知道它为啥能吸引人,我挺你!

 





posted on 2011-12-12 14:10  BIGSING  阅读(2233)  评论(0编辑  收藏  举报

导航

我的博客小站