首页
社区
课程
招聘
[原创]山寨熊猫烧香病毒分析
发表于: 2009-5-16 00:33 25398

[原创]山寨熊猫烧香病毒分析

2009-5-16 00:33
25398

【文章标题】: 山寨熊猫烧香病毒分析
【文章作者】: dttom
【作者邮箱】: [email]dttom2006@gmail.com[/email]
【作者主页】: http://hi.baidu.com/dttom
【软件名称】: cool_gamesetup.exe
【下载地址】: 自己搜索下载
【加壳方式】: 两层壳
【编写语言】: Delphi
【使用工具】: OllyICE\IDA\VMWARE
【操作平台】: WINXP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  这个病毒在我们单位的局域网泛滥,找到一个样本后,分析了一下。病毒伪装成nod32杀毒软件图标。
  1、脱壳,病毒加了两层壳:
  第一层 NsPacK V3.1 -> LiuXingPing


0044D82F > 9C pushfd
0044D830 60 pushad
0044D831 E8 00000000 call 0044D836
0044D836 5D pop ebp
0044D837 83ED 07 sub ebp, 7
0044D83A 8D9D 71FCFFFF lea ebx, dword ptr [ebp-38F]
0044D840 8A03 mov al, byte ptr [ebx]
0044D842 3C 00 cmp al, 0
0044D844 74 10 je short 0044D856

......

004115C1 90 nop
004115C2 8B2C08 mov ebp, dword ptr [eax+ecx]
004115C5 2C 08 sub al, 8
004115C7 8B45 45 mov eax, dword ptr [ebp+45]
004115CA 90 nop
004115CB 8B45 45 mov eax, dword ptr [ebp+45]
004115CE 90 nop
004115CF 8B45 45 mov eax, dword ptr [ebp+45]
004115D2 90 nop
004115D3 8B45 45 mov eax, dword ptr [ebp+45]
004115D6 90 nop
004115D7 90 nop
004115D8 8B45 45 mov eax, dword ptr [ebp+45]
004115DB ^ E9 20FAFEFF jmp 00401000


00401000 B8 B8A34400 mov eax, 0044A3B8
00401005 50 push eax
00401006 64:FF35 0000000>push dword ptr fs:[0]
0040100D 64:8925 0000000>mov dword ptr fs:[0], esp
00401014 33C0 xor eax, eax
00401016 8908 mov dword ptr [eax], ecx
00401018 50 push eax
00401019 45 inc ebp
0040101A 43 inc ebx
0040101B 6F outs dx, dword ptr es:[edi]
0040101C 6D ins dword ptr es:[edi], dx

bp VirtualFree F9两次后,向下找到
.....
00980B2B 8B46 0C mov eax, dword ptr [esi+C]
00980B2E 03C7 add eax, edi
00980B30 5D pop ebp
00980B31 5E pop esi
00980B32 5F pop edi
00980B33 5B pop ebx
00980B34 C3 retn ;返回到 0044A458 (Cool_Gam.0044A458)
......

0044A456 FFD7 call edi
0044A458 8985 3F130010 mov dword ptr [ebp+1000133F], eax ; Cool_Gam.00429104
0044A45E 8BF0 mov esi, eax
0044A460 8B4B 14 mov ecx, dword ptr [ebx+14]
0044A463 5A pop edx
0044A464 EB 0C jmp short 0044A472
0044A466 03CA add ecx, edx
0044A468 68 00800000 push 8000
0044A46D 6A 00 push 0
0044A46F 57 push edi
0044A470 FF11 call dword ptr [ecx]
0044A472 8BC6 mov eax, esi
0044A474 5A pop edx
0044A475 5E pop esi
0044A476 5F pop edi
0044A477 59 pop ecx
0044A478 5B pop ebx
0044A479 5D pop ebp
0044A47A FFE0 jmp eax ;跳到程序入口


00428920 /$ 53 push ebx
00428921 |. 68 60894200 push 00428960 ; /FileName = "netapi32.dll"
00428926 |. E8 65E4FDFF call <jmp.&kernel32.LoadLibraryA> ; \LoadLibraryA
0042892B |. 8BD8 mov ebx, eax
0042892D |. 68 70894200 push 00428970 ; /netshareenum
00428932 |. 53 push ebx ; |hModule
00428933 |. E8 E0E3FDFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00428938 |. A3 703A4300 mov dword ptr [433A70], eax
0042893D |. 68 80894200 push 00428980 ; /netapibufferfree
00428942 |. 53 push ebx ; |hModule
00428943 |. E8 D0E3FDFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00428948 |. A3 683A4300 mov dword ptr [433A68], eax
0042894D |. 68 70894200 push 00428970 ; /netshareenum
00428952 |. 53 push ebx ; |hModule
00428953 |. E8 C0E3FDFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00428958 |. A3 6C3A4300 mov dword ptr [433A6C], eax
0042895D |. 5B pop ebx
0042895E \. C3 retn

0040750C /$ 53 push ebx ; TXPlatf0.00433A8C
0040750D |. 83C4 D0 add esp, -30
00407510 |. 8D4424 04 lea eax, dword ptr [esp+4]
00407514 |. 50 push eax ; /phToken
00407515 |. 6A 20 push 20 ; |DesiredAccess = TOKEN_ADJUST_PRIVILEGES
00407517 |. E8 9CF7FFFF call <jmp.&kernel32.GetCurrentProcess>; |[GetCurrentProcess
0040751C |. 50 push eax ; |hProcess
0040751D |. E8 9EF6FFFF call <jmp.&ADVAPI32.OpenProcessToken> ; \OpenProcessToken
00407522 |. 8D4424 08 lea eax, dword ptr [esp+8]
00407526 |. 50 push eax ; /pLocalId
00407527 |. 68 A8754000 push 004075A8 ; |sedebugprivilege
0040752C |. 6A 00 push 0 ; |SystemName = NULL
0040752E |. E8 85F6FFFF call <jmp.&ADVAPI32.LookupPrivilegeVa>; \LookupPrivilegeValueA
00407533 |. 8B4424 08 mov eax, dword ptr [esp+8]
00407537 |. 894424 24 mov dword ptr [esp+24], eax
0040753B |. 8B4424 0C mov eax, dword ptr [esp+C]
0040753F |. 894424 28 mov dword ptr [esp+28], eax
00407543 |. C74424 20 010>mov dword ptr [esp+20], 1
0040754B |. 33DB xor ebx, ebx
0040754D |. 895C24 2C mov dword ptr [esp+2C], ebx
00407551 |. 54 push esp ; /pRetLen
00407552 |. 8D4424 14 lea eax, dword ptr [esp+14] ; |
00407556 |. 50 push eax ; |pPrevState
00407557 |. 6A 10 push 10 ; |PrevStateSize = 10 (16.)
00407559 |. 8D4424 2C lea eax, dword ptr [esp+2C] ; |
0040755D |. 50 push eax ; |pNewState
0040755E |. 6A 00 push 0 ; |DisableAllPrivileges = FALSE
00407560 |. 8B4424 18 mov eax, dword ptr [esp+18] ; |
00407564 |. 50 push eax ; |hToken
00407565 |. E8 46F6FFFF call <jmp.&ADVAPI32.AdjustTokenPrivil>; \AdjustTokenPrivileges
0040756A |. 8B4424 08 mov eax, dword ptr [esp+8]
0040756E |. 894424 14 mov dword ptr [esp+14], eax
00407572 |. 8B4424 0C mov eax, dword ptr [esp+C]
00407576 |. 894424 18 mov dword ptr [esp+18], eax
0040757A |. C74424 10 010>mov dword ptr [esp+10], 1
00407582 |. 83CB 02 or ebx, 2
00407585 |. 895C24 1C mov dword ptr [esp+1C], ebx
00407589 |. 54 push esp ; /pRetLen
0040758A |. 6A 00 push 0 ; |pPrevState = NULL
0040758C |. 8B4424 08 mov eax, dword ptr [esp+8] ; |
00407590 |. 50 push eax ; |PrevStateSize
00407591 |. 8D4424 1C lea eax, dword ptr [esp+1C] ; |
00407595 |. 50 push eax ; |pNewState
00407596 |. 6A 00 push 0 ; |DisableAllPrivileges = FALSE
00407598 |. 8B4424 18 mov eax, dword ptr [esp+18] ; |
0040759C |. 50 push eax ; |hToken
0040759D |. E8 0EF6FFFF call <jmp.&ADVAPI32.AdjustTokenPrivil>; \AdjustTokenPrivileges
004075A2 |. 83C4 30 add esp, 30
004075A5 |. 5B pop ebx
004075A6 \. C3 retn

0040705C /$ 53 push ebx ; (initial cpu selection)
0040705D |. BB 80364300 mov ebx, 00433680
00407062 |. 833B 00 cmp dword ptr [ebx], 0
00407065 |. 0F85 35010000 jnz 004071A0
0040706B |. 68 B8714000 push 004071B8 ; /kernel32.dll
00407070 |. E8 9BFCFFFF call <jmp.&kernel32.GetModuleHandleA> ; \GetModuleHandleA
00407075 |. 8903 mov dword ptr [ebx], eax
00407077 |. 833B 00 cmp dword ptr [ebx], 0
0040707A |. 0F84 20010000 je 004071A0
00407080 |. 68 C8714000 push 004071C8 ; /createtoolhelp32snapshot
00407085 |. 8B03 mov eax, dword ptr [ebx] ; |
00407087 |. 50 push eax ; |hModule
00407088 |. E8 8BFCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040708D |. A3 84364300 mov dword ptr [433684], eax
00407092 |. 68 E4714000 push 004071E4 ; /heap32listfirst
00407097 |. 8B03 mov eax, dword ptr [ebx] ; |
00407099 |. 50 push eax ; |hModule
0040709A |. E8 79FCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040709F |. A3 88364300 mov dword ptr [433688], eax
004070A4 |. 68 F4714000 push 004071F4 ; /heap32listnext
004070A9 |. 8B03 mov eax, dword ptr [ebx] ; |
004070AB |. 50 push eax ; |hModule
004070AC |. E8 67FCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
004070B1 |. A3 8C364300 mov dword ptr [43368C], eax
004070B6 |. 68 04724000 push 00407204 ; /heap32first
004070BB |. 8B03 mov eax, dword ptr [ebx] ; |
004070BD |. 50 push eax ; |hModule
004070BE |. E8 55FCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
004070C3 |. A3 90364300 mov dword ptr [433690], eax
004070C8 |. 68 10724000 push 00407210 ; /heap32next
004070CD |. 8B03 mov eax, dword ptr [ebx] ; |
004070CF |. 50 push eax ; |hModule
004070D0 |. E8 43FCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
004070D5 |. A3 94364300 mov dword ptr [433694], eax
004070DA |. 68 1C724000 push 0040721C ; /toolhelp32readprocessmemory
004070DF |. 8B03 mov eax, dword ptr [ebx] ; |
004070E1 |. 50 push eax ; |hModule
004070E2 |. E8 31FCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
004070E7 |. A3 98364300 mov dword ptr [433698], eax
004070EC |. 68 38724000 push 00407238 ; /process32first
004070F1 |. 8B03 mov eax, dword ptr [ebx] ; |
004070F3 |. 50 push eax ; |hModule
004070F4 |. E8 1FFCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
004070F9 |. A3 9C364300 mov dword ptr [43369C], eax
004070FE |. 68 48724000 push 00407248 ; /process32next
00407103 |. 8B03 mov eax, dword ptr [ebx] ; |
00407105 |. 50 push eax ; |hModule
00407106 |. E8 0DFCFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040710B |. A3 A0364300 mov dword ptr [4336A0], eax
00407110 |. 68 58724000 push 00407258 ; /process32firstw
00407115 |. 8B03 mov eax, dword ptr [ebx] ; |
00407117 |. 50 push eax ; |hModule
00407118 |. E8 FBFBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040711D |. A3 A4364300 mov dword ptr [4336A4], eax
00407122 |. 68 68724000 push 00407268 ; /process32nextw
00407127 |. 8B03 mov eax, dword ptr [ebx] ; |
00407129 |. 50 push eax ; |hModule
0040712A |. E8 E9FBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040712F |. A3 A8364300 mov dword ptr [4336A8], eax
00407134 |. 68 78724000 push 00407278 ; /thread32first
00407139 |. 8B03 mov eax, dword ptr [ebx] ; |
0040713B |. 50 push eax ; |hModule
0040713C |. E8 D7FBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00407141 |. A3 AC364300 mov dword ptr [4336AC], eax
00407146 |. 68 88724000 push 00407288 ; /thread32next
0040714B |. 8B03 mov eax, dword ptr [ebx] ; |
0040714D |. 50 push eax ; |hModule
0040714E |. E8 C5FBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00407153 |. A3 B0364300 mov dword ptr [4336B0], eax
00407158 |. 68 98724000 push 00407298 ; /module32first
0040715D |. 8B03 mov eax, dword ptr [ebx] ; |
0040715F |. 50 push eax ; |hModule
00407160 |. E8 B3FBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00407165 |. A3 B4364300 mov dword ptr [4336B4], eax
0040716A |. 68 A8724000 push 004072A8 ; /module32next
0040716F |. 8B03 mov eax, dword ptr [ebx] ; |
00407171 |. 50 push eax ; |hModule
00407172 |. E8 A1FBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00407177 |. A3 B8364300 mov dword ptr [4336B8], eax
0040717C |. 68 B8724000 push 004072B8 ; /module32firstw
00407181 |. 8B03 mov eax, dword ptr [ebx] ; |
00407183 |. 50 push eax ; |hModule
00407184 |. E8 8FFBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
00407189 |. A3 BC364300 mov dword ptr [4336BC], eax
0040718E |. 68 C8724000 push 004072C8 ; /module32nextw
00407193 |. 8B03 mov eax, dword ptr [ebx] ; |
00407195 |. 50 push eax ; |hModule
00407196 |. E8 7DFBFFFF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0040719B |. A3 C0364300 mov dword ptr [4336C0], eax
004071A0 |> 833B 00 cmp dword ptr [ebx], 0
004071A3 |. 74 09 je short 004071AE
004071A5 |. 833D 84364300>cmp dword ptr [433684], 0
004071AC |. 75 04 jnz short 004071B2
004071AE |> 33C0 xor eax, eax
004071B0 |. 5B pop ebx
004071B1 |. C3 retn
004071B2 |> B0 01 mov al, 1
004071B4 |. 5B pop ebx
004071B5 \. C3 retn

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (31)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
仔细阅读中...
2009-5-16 07:56
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
见过这个样本 感谢分析
学习一下
2009-5-16 10:02
0
雪    币: 612
活跃值: (996)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
看完了,分析得清晰仔细,呵呵,如果LZ能再把感染部分也分析一下,那就更棒了...
感谢LZ的分享,学习学习!
2009-5-16 14:43
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我在虚拟机解压完,病毒尽然跑到我本机上来了
2009-5-16 15:48
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
00427163 |. B8 94724200 mov eax, 00427294 ; 360tray.exe
00427168 |. E8 8307FEFF call 004078F0
0042716D |. 84C0 test al, al
0042716F |. 75 0E jnz short 0042717F
00427171 |. B8 A8724200 mov eax, 004272A8 ; safeboxtray.exe
00427176 |. E8 7507FEFF call 004078F0

查杀进程  ......
2009-5-16 16:14
0
雪    币: 534
活跃值: (240)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在流行山寨???
2009-5-16 18:28
0
雪    币: 220
活跃值: (721)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你单位全是WIN2000的机器?默认的共享都没关?
2009-5-16 18:54
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
感染部分只要下断  bp  CreateFileA    bp ReadFile  bp WriteFile   就可以跟踪到,我文章写的不好,还有个下载列表也写漏了,不过大家可以用IDA的解密IDC解开。调试的时候见病毒将exe的图标提取到系统temp文件夹,可能是想感染后再将exe写回去,可能是没处理好,最好exe报废。


不会吧?



不是Win2K的机器,是XP默认的共享没关
2009-5-16 20:22
0
雪    币: 266
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
分析的 貌似很专业  尤其是 解密的那部分  
一般情况下的分析 只是看住 病毒操作的那块内存 找到解密之后的内容 就算了事了

LZ还分析了 过程  强大  啊
2009-5-16 21:14
0
雪    币: 104
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你的虚拟机和主机联网了吧
2009-5-17 20:31
0
雪    币: 1373
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
分析得清晰,学习了。
2009-5-17 23:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
山寨版的东西怎么泛滥到这种地步了!?
2009-5-17 23:33
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了。。。
2009-5-18 01:43
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
貌似现在还没流行起来嘛,我们这里貌似没
2009-5-18 09:12
0
雪    币: 279
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
这个样本还会写UNC共享文件的..
感染后的文件还是比较好修复的..
被感染的文件尾位如下
002A2D2E2D2A312E7363722E65786502363635363001

312E7363722E657865       该值表值原文件名,此例为1.scr
3636353630                    该值表示原文件大小,此例为66560
2A2D2E2D2A                   被感染的文件特征,存在该特征就可以进行修复。
00的前一位置开始,向前推66560偏移大小,复制出来。删除感染文件并重命名为如上原文件名。
0201都是标志位。
2009-5-18 10:25
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
我这里有个被破坏的SCR文件,比较了一下,觉得无法修复?请楼上指教?
上传的附件:
  • p.rar (231.39kb,6次下载)
2009-5-18 11:57
0
雪    币: 279
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
看看是不是你要的

由于这个样本没有校验之前有没有被自己感染过,所以会造成重复感染..
而重复感染的文件,基本上都会被废掉..
上传的附件:
2009-5-18 13:28
0
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
19
我试了一下exe文件也可以修复,谢谢提示
2009-5-18 14:52
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
感染部分只要下断  bp  CreateFileA    bp ReadFile  bp WriteFile   就可以跟踪到,我文章写的不好,还有个下载列表也写漏了,不过大家可以用IDA的解密IDC解开。调试的时候见病毒将exe的图标提取到系统temp文件夹,可能是想感染后再将exe写回去,可能是没处理好,最好exe报废。

不会是写偏移感染吧?
2009-5-19 08:55
0
雪    币: 423
活跃值: (11)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
21
大致看了下,做个标记,有时间仔细体会。
2009-5-19 10:07
0
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
22
ding~~~~
2009-5-19 12:32
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
我中了
现在还没办法处理呢!先崩溃一个!
2009-5-19 13:18
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
24
支持,学习中……
2009-5-19 14:56
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
厉害,分析得很好啊。
2009-5-21 21:18
0
游客
登录 | 注册 方可回帖
返回
//