别一言不合就退杀软

0x1 前言

随着游戏产业的不断发展,外挂行业也变得热门。许多游戏玩家为了能在游戏中获得远超于他人的发展速度开始大量使用外挂,而在外挂中嵌入木马进行盗号或者远程控制的行为层出不穷,加上外挂作者要求用户关闭杀软“躲避查杀”等因素,外挂是否安全成为未知数。最近,360互联网安全中心接到用户反馈,在关闭360安全卫士和360杀毒使用外挂之后,360安全卫士和360杀毒竟然无法重新打开。究竟是何原因导致这一情况的发生?让我们来探个究竟。

0x2 样本综述

该游戏外挂是一款常见的网游外挂,由主程序“xxx火车加速辅助V3.5免费版”引导启动,主要功能由同文件夹下的“fcb.dll”和“fcz.dll”(实际为exe文件)实现,其中“fcb.dll”负责外挂的功能实现,“fcz.dll”负责界面的生成,问题就出在“fcb.dll”上。
001

图1 外挂程序功能实现图

0x3 样本执行流程

该样本的主要功能隐藏极深,需通过逐级调用才能进入核心部分执行主要功能。除此之外,该样本感染多个系统文件,几乎所有涉及网络连接的程序都会调用这些文件。由于程序是通过连接服务器获取下一步执行所需的文件,外挂代码也是通过服务器下载到本地配置执行,一旦别有用心者用恶意代码替换原本的功能代码,将对玩家的计算机造成极大的危害。以下是样本执行的流程。
002

图2 外挂执行流程图

0x4 样本具体分析

(1)  fcb.dll

程序使用单个字符逐个加载的方式构成字符串来获取敏感API,此举多用于躲避杀软的静态检测,可以看出,该程序从一开始就有意与杀软对抗。
003

图3 单字符逐个加载获得敏感字符串

        在进行准备工作之后,程序从服务器上下载代码写入“Meq6.tmp”文件中,并执行该文件。
004

图4 从服务器获取代码

005

图5 执行代码

(2) Meq6.tmp

“Meq6.tmp”功能和“fcb.dll”相同,即从服务器下载代码写入临时文件后执行。

(3) Jri6.tmp

Jri6.tmp可以说是所有程序的调度中心,它不仅负责创建劫持文件,也负责创建主要功能执行文件,而写入其他文件的代码也是从该程序数据段中获取,因此该程序是整个运行流程中最重要的一环。

程序首先动态调用权限修改函数“RtlAdjustPrivilege”进行提权操作,使程序拥有SE_DEBUG_PRIVILEGE权限。
006

图6 调用“RtlAdjustPrivilege”函数提权

        接着程序通过创建事件判断系统中是否已运行相同进程。
007

图7 判断系统中是否已运行相同进程

        然后程序判断自身的运行环境,若当前用户不是管理员则通过“runas”命令修改运行环境。可以看出,作为一个外挂程序,却想方设法进行提权操作,行为相当可疑。
008

图8 使用“runas”命令使程序以管理员身份运行

        完成一系列提权操作后,程序调用“timeSetEvent”函数以一定周期执行回调函数。
009

图9 以一定周期执行函数

        在回调函数fptc中,创建一系列临时文件劫持系统关键dll文件“iphlpapi.dll”,“rasadhlp.dll”和“midimap.dll”。这些dll主要和底层的网络操作有关,因此当dll遭到劫持后,所有联网的程序都会被感染。

010

图10 执行dll劫持

        由于这些dll存在于目录“C:\Windowssystem32”下,在该目录下的文件会受到保护,无法进行普通的复制,删除,修改等操作。因此程序调用了SFC.dll的5号函数,该函数可以在一段60s的时间中解除指定文件的文件保护。
011

图11 解除文件保护

        当三个关键dll遭到劫持后,所有调用相关dll的进程都会被感染,dll入口指向作者指定的代码。在这段代码中,调用了“LoadLibrary”函数加载“sxload.tmp”文件。
加载sxql.tmp

图12 被感染后的系统dll加载恶意tmp文件

(4) sxload.tmp

sxload.tmp主要是充当加载器的功能,调用“LoadLibrary”函数加载“sxlq.tmp”文件。

(5) sxlq.tmp

在进行完一系列的创建与加载之后,该程序的真实面目才显现出来,在“sxlq.tmp”中有两个执行模块,通过判断当前模块名称来进行选择。当当前进程是游戏进程时则执行外挂的功能,当当前进程为“360Safe.exe”或“360sd.exe”时,则结束当前进程。

012

图13 程序结束360相关进程

        可以看出,程序是利用“iphlpapi.dll”,“rasadhlp.dll”和“midimap.dll”使用的广泛性做文章。由于许多进程都会调用这几个系统dll,当这些dll遭到劫持后,生成的“sxlq.tmp”文件就能顺藤摸瓜找到调用它们的进程,并进行相应的操作。由于被调用的dll和调用者同属一个进程,dll可以轻松地结束进程。和其他程序相同,360安全卫士和360杀毒相关程序也会调用这些dll,因此也就出现了关闭杀软后无法重新打开的情况。

0x5 总结

俗话说,“十挂九毒”。外挂可能会让玩家有一飞冲天的感觉,也可能把玩家拉到危险的漩涡之中。许多外挂都会用各种手段暗示或者明示使用者——“关了杀软才能用喔”,但真的关闭杀软后,用户也就失去了实时的保护,一旦外挂中携带恶意代码,就算重新开启杀软往往也只是“亡羊补牢”。实际上,在外挂不具有恶意功能的前提下,外挂和杀软是可以共存的。所以必须提醒各位玩家,在使用外挂时务必保持杀软运行,这样才能拥有更加安全的游戏环境。