09月24, 2015

VS竞技游戏平台刷流量木马说明

已经是2015年了,也到了我们这群85后集体奔三的年份了……虽然在我国平均年龄已经超过73岁的今天,奔三的岁数绝对谈不到老,但也已经不在是青春少年了,也已经有了一些值得回忆的东西了——比如VS竞技游戏平台,当年大学翘课留在宿舍里上VS平台打CS和War3的场景还历历在目(广大学生党朋友请勿模仿,好好学习天天向上你才不会像我现在一样搬砖,大家共勉)。然而时过境迁,恐怕谁也想不到事隔多年再次提起VS竞技游戏平台的缘由,竟会是因为一个木马……

00000000b 基本情况

近日,360安全响应中心捕获了一款刷流量木马,本来很平常的一个木马,竟然因为该文件带有的数字签名而变得不那么平常了。数字签名“Guangzhou WeiSi Software CO.,ltd”恰恰就是VS竞技游戏平台的官方签名:
001_签名
为了验证,我们便从官网下载了目前最新版的VS竞技游戏平台客户端。

版本 : 5.1.0.0
MD5 : 1D09D7C84FE2AF4483D897EACB497BDD
SHA1 : 21FBD99D8211974347037AA6B11DBA42712336B0

00000001b 下载与释放

首先比较可疑的就是VS的主程序VSClient,但看代码可能看不出什么,只是在拼一个下载地址而已:
002_拼接地址
而实际运行起来之后,批量下载回来的文件中,就夹杂了一个“怪东西”:
003_下载
这个resource.exe被启动后,会轮询如下地址,发现可用则下载对应的文件到本地缓存中:
004_地址轮询
005_下载缓存
如此一来,我们的两位主角,此时就被下载回来了:
006_dvdata
007_dwn
而在dwn.exe程序的初始化代码与窗口消息循环代码之间的部分,被插入了一段代码,功能很简单——加载dvdata.dll并执行其StartGameTask函数:
008_loadandrun
这样,程序运行关系就比较明朗了:
009_关系

00000010b 诡异的双胞胎

拿到这个dvdata.dll的时候还出现了一个小插曲。我们惊讶的发现在VS的安装路径根目录下,原本就有一个dvdata.dll文件。经对比,这两个文件版本一致,签名一致,但内容却不同……这在一家有着版本控制流程的正规软件公司,绝对是一个非常严重的失误!又或者说……根本不是失误?
010_版本一致

00000011b StartGameTask

既然前文代码已经指明了方向,我们就果断跟进,去看看dvdata.dll的StartGameTask函数到底做了什么。根据和正常的那个同名文件的对比,发现这个函数的改动还是非常大的,核心点在于对一个域名为“t1.2018cn.com”的服务器的访问:
011_域名
成功找到服务器后,该会向服务器发送一段UDP数据:
012_数据抓包
数据是编码过的,为了更易读,我们对数据做了解码。
发出数据解码后内容如下,可以看到,我的mac地址、系统版本、IE版本、flash版本等信息,都被传到了服务器上:

<?xml version="1.0" encoding="gb2312" ?>
<r>
<id v="pnpstat"/>
<mac v="00:0C:29:56:21:B0"/>
<sys_ver v="5.1.2600.2"/>
<ie_ver v="6.0.2900.5512"/>
<flash_ver v="15,0,0,223"/>
<ver v="11"/>
</r>

而接收数据解码后内容如下,也是一段XML。而内容,则是四个视频网址(根据对方服务器配置,内容会变化):

<?xml version="1.0" encoding="gb2312" ?>
<flow mem="750000" save_cookies="3" id="72">
<item type="99" port="80" auto="300"/>
<item type="3" text="http://download.letv.com/apixml/barSpread/barSpread_3565.html"/> 
<item type="2" text="3"/> 
<item type="2" text="3"/> 
<item type="2" text="8"/>

<item type="3" text="http://capp.bali15.com/capp.html" param="2" start="1" rand="0" sand="0"/> 
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="500,500,0,0" param="0" start="0" rand="0" sand="0"/> 
<item type="2" text="170" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="0,0,0,0" param="0" start="0" rand="0" sand="0"/>
<item type="6" text="720,190,10,10" param="0" start="0" rand="0" sand="0"/>
<item type="6" text="720,190,10,10" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="500,500,0,0" param="0" start="0" rand="0" sand="0"/>   
<item type="2" text="260" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="0,0,0,0" param="0" start="0" rand="0" sand="0"/>

<item type="3" text="http://capp.bali15.com/capp.html" param="2" start="1" rand="0" sand="0"/> 
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="500,500,0,0" param="0" start="0" rand="0" sand="0"/> 
<item type="2" text="380" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="0,0,0,0" param="0" start="0" rand="0" sand="0"/>


<item type="3" text="http://capp.bali15.com/capp.html" param="2" start="1" rand="0" sand="0"/> 
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="2" text="5" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="500,500,0,0" param="0" start="0" rand="0" sand="0"/> 
<item type="2" text="380" param="0" start="0" rand="0" sand="0"/>
<item type="14" text="0,0,0,0" param="0" start="0" rand="0" sand="0"/>
</flow>

而在获取这个xml之前,函数就已经创建了一个名为“flush_res_data”的文件映射,而此时,正好将这个xml的内容,放到映射当中:
013_创建文件映射
014_放入文件映射
至此,准备工作就算是告一段落了。最后的激情要开始了——调用rundll32再次加载dvdata.dll本身,只是这次调用的是StartGameTaskLine函数:
030_StartGameTaskLine

00000100b StartGameTaskLine

与上面的代码遥相呼应的——StartGameTaskLine运行后做的第一件事就是打开那个名为“flush_res_data”的文件映射,从中获取xml内容
041_获取mapping
而拿到列表之后,自然是开刷了。如是往复,“生生不息”:
043_刷
除了上面列出的几个视频网站,刷的最多的果然还是……

http://a.u005.com/hao123/ ==> http://www.hao123.com/?tn=97691562_hao_pg
http://ha.u005.com/a/a.html ==> http://www.hao123.com/?tn=98970868_hao_pg
http://cha77.181839.com/go/cha77.html ==>
http://www.hao123.com/?tn=97095659_hao_pg
http://www.hao123.com/?tn=96181616_hao_pg
http://123.811166.com/a1/index.html ==> http://www.hao123.com/?tn=91722286_hao_pg
http://mik.da2wen.com/link/mik.html ==> http://www.hao123.com/?tn=95901816_hao_pg
http://fm389.044045.com/go/fm389.html ==>
http://www.hao123.com/?tn=91552706_hao_pg
http://ha.u005.com/link/ ==> http://www.hao123.com/?tn=90687202_hao_pg
http://zh.kaishizou.com/08/1.html ==> http://www.hao123.com/?tn=91169204_hao_pg
http://sbhz.yaypool.com/hao123/sbhz.html ==> http://www.hao123.com/?tn=97538869_hao_pg

00000101b 最后

这个时代赚钱不易,但无论如何也不该消费用户对一款软件的信任。一款软件的辉煌来之不易,且行且珍惜。

本文链接:http://blogs.360.cn/post/about_flow_trojan_in_vs_game_platform.html

-- EOF --

Comments