珞珈山水BBS电脑网络程序人生 → 单文区文章阅读

单文区文章阅读 [返回]
发信人: CMS (★C.M.S★CMS★一片冰心在玉壶★), 信区: Programm
标  题: 看看雅虎助手是如何迫害“兔子”和“360安全卫士”的(zz
发信站: 珞珈山水BBS站 (Wed Sep 20 21:46:45 2006), 转信

这几天研究了一下雅虎助手是如何干扰360卫士的,发现如果安装雅虎助手的时候不安
装3721就不会有问题,看来问题出在3721上了。于是在安装雅虎助手的时候选择安装37
21,结果问题果然出现了,联想到前几天在360论坛上看到vcmfc提到雅虎助手/3721通过
一个系统CBT钩子干扰“360安全卫士”和“兔子”,于是特别留意了一下系统钩子运行
的情况。安装了雅虎助手之后,我先运行了一个自编的系统钩子检查程序AntiHook.exe
,果然立刻发现了雅虎助手安装的钩子,yhelper.dll
yhelper.dll没有加密措施,对“360安全卫士”和“兔子”的迫害代码随处可见,比如
,下面的代码是从Runonce中删除“兔子”和“360”的启动项,干扰这两个程序的运行

.text:53002C9E loc_53002C9E:                           ; CODE XREF: sub_5300
2993+285
.text:53002C9E                 mov     esi, ds:SHDeleteValueA
.text:53002CA4                 mov     ebx, offset pszSubKey ; "SOFTWARE\\Mi
crosoft\\Windows\\CurrentVersi"...
.text:53002CA9                 push    offset pszValue ; "Super Rabbit Winsp
eed"
.text:53002CAE                 mov     edi, 80000002h
.text:53002CB3                 push    ebx             ; pszSubKey
.text:53002CB4                 push    edi             ; hkey
.text:53002CB5                 call    esi ; SHDeleteValueA
.text:53002CB7                 push    offset a360safe_0 ; "360Safe"
.text:53002CBC                 push    ebx             ; pszSubKey
.text:53002CBD                 push    edi             ; hkey
.text:53002CBE                 call    esi ; SHDeleteValueA
.text:53002CC0                 pop     ebp
.text:53002CC1                 pop     ebx
    上面的代码只是小手段,下面才是真正导致“360安全卫士”和“兔子”无法运行的
“罪魁祸首”,这段代码运行的时候yhelper.dll钩子已经被安装(钩)到应用程序进程
空间中了,所以已经可以访问被钩程序进程空间中的资源了,来看看代码:
.text:53001BF2 loc_53001BF2:                           ; CODE XREF: DllMain(
x,x,x)+50 j
.text:53001BF2                 mov     ecx, offset unk_53006740
.text:53001BF7                 call    sub_53002E25
.text:53001BFC                 push    1               ; int
.text:53001BFE                 push    offset aWinspeed ; "WINSPEED"
.text:53001C03                 call    sub_53002993
.text:53001C08                 push    1               ; int
.text:53001C0A                 push    offset a360safe ; "360SAFE"
.text:53001C0F                 call    sub_53002993
.text:53001C14                 add     esp, 10h
.text:53001C17                 jmp     short loc_53001C42
.text:53001C19 ; -----------------------------------------------------------
----------------
关键点是函数sub_53002993,这个函数接受一个字符串参数,就是“360安全卫士”和“
兔子”的进程名称,sub_53002993是函数做什么呢?很简单,就是先调用GetModuleFil
eName()得到当前Hook的进程名称,然后通过字符串比较确定是不是“360安全卫士”和
“兔子”。如果是就通过API钩子的方式Hook以下API:
DeleteFileA
TerminateProcess
RegDeleteKeyA
RegDeleteValueA
OpenProcess
DeleteFileW
MoveFileExW
MoveFileW
MoveFileExA
MoveFileWithProgressA
MoveFileWithProgressW
RegDeleteKeyW
RegDeleteValueW
ShellExecuteA
采用的方式很老套,就是修改API函数的前五个字节为一个跳转语句,跳到钩子程序中的
处理函数,在处理函数中根据情况进行一下过滤。下面以雅虎助手用于替换DeleteFile
A的处理函数为例,看看它都做了些什么。这个处理函数功能很简单,就是过滤一下要删
除的文件,当检测到“兔子”和“safe360”在删除与自己相关的东西时就不执行删除工
作,直接返回成功欺骗这两个程序,看看对DeleteFileA的处理函数:
.text:5300217B ; int __stdcall YhDeleteFileA(char *)
.text:5300217B YhDeleteFileA   proc near               ; 函数名字是我命名的
               .......................................    ;省略一些代码

--
╭               ▄▆▄▁   ╭           ╭             ▁▁  
╰ ╱∨╲ ╭    ◢◣▂    ╰ ╱∨╲ ╭ ╰ ╱∨╲ ╭ ▕恭迎▏
           フ    "︿ ベ            フ           フ▕大驾▏
 welcome to        ﹤ ,       welcome to                ▔▔  
     武大化院 .╰﹀╯                  ccms           
* 特邀嘉宾CMS*   * 欢迎光临(http://www.chem.whu.edu.cn/)


※ 来源:·珞珈山水BBS站 bbs.whu.edu.cn·[FROM: 202.114.73.*]
[返回单文区目录]

武汉大学BBS 珞珈山水站 All rights reserved.
wForum , 页面执行时间:10.790毫秒