“灵隐”木马黑吃灰:绑架数十款游戏外挂实现恶意推广

本文讲的是 “灵隐”木马黑吃灰:绑架数十款游戏外挂实现恶意推广今年6月,360安全卫士对“灵隐”木马做了预警。最近一段时间,这伙木马又开始活跃,我们也接到不少网友反馈称受到木马干扰,浏览器被篡改,部分软件被删除。我们对这个木马的最新一批传播源做了一次分析。

传播

此类木马传播,仍然是通过打包修改各种外挂,捆绑木马程序,再通过网盘和各类游戏论坛传播。

通过分析传播者的文件列表可以看到作者打包了几十款外挂用来传播这一木马:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图1

有近400多个文件分享记录:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图2

安装

木马在安装过程中,会检测是否有安全软件运行,如果有则木马不进行安装。

这也是木马需要通过外挂打包传播的一个原因,使用外挂时,用户可能会关闭杀毒软件,给木马可乘之机!

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图3

当关闭杀软之后,这个外挂开始下载木马到本地执行j[.]92dz.win:8080/bag/jc_102.zip

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图4

分析时捕获的下载木马:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图5

木马释放一对DLL劫持程序

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图6

通过注册Installed Components实现开机自启动:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图7

之后木马启动svchost.exe并挂起(如果安装有360会试图启动360DeskAna.exe并注入)

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图8

将恶意代码写入到svchost.exe内存中并恢复进程

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图9

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图10

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图11

危害:

1.   劫持浏览器,篡改浏览器快捷方式

木马会篡改数十款浏览器的快捷方式,添加导航。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图12

向任务栏锁定快捷方式

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图13

2.删除系统中安装的某些软件。

木马会通过注册表查找ADSafe安装目录,如果发现则结束ADSafe.exe和ADSafeSvc.exe进程,并删除整个ADSafe安装目录(猜测是防止ADSafe影响其推广的导航收入)

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图14

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图15

3.进行软件推广

木马会常驻系统,并定时访问云控列表,将加密的列表下载到%Temp%data.tmp文件中

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图16

解密后可以看到其推广列表:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图17

其中,开头部分的页面为推广导航页,用于修改浏览器首页

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图18

后半部分内容为推广软件列表,可以进行云控推广。

4.进行木马更新并与防护软件对抗

木马在%windir%font目录下保存了多个配置文件

HX_Protect.ttf
ZT_Exe.ttf
ZT_Dll.ttf
HX_EXE_Pid.ttf

其中,ZT_Exe.ttf和ZT_Dll.ttf分布记录被利用exe和木马dll的路径。

HX_EXE_Pid.ttf这个记录当前木马进程PID

HX_Protect.ttf这个记录当前已被修改的首页

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图19

木马内部还内置了一组木马更新地址:

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图20

目前更新地址传播的是一组迅雷thundershell.exe的DLL劫持程序,功能上和之前安装的木马完全一致。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图21

同时,木马会循环查找两个窗口,若发现类名为“360ClassUploadFileNotify”的窗口,则会模拟鼠标点击其按钮。猜测是要退出该窗口。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图22

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图23

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图24

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图25

而若发现类名为“TXGuiFoundation”的窗口,则将其隐藏

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图26

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图27

另外我们发现这款木马,也会通过进程列表判断网吧环境或系统中是否有影子系统。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图28

如果在网吧系统中,一些劫持功能不会执行。

非网吧系统下,会释放mydll.dll并设置为隐藏

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图29

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图30

完成后,加载该dll

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图31

该dll主要做浏览器劫持,但由于木马调用时出错,导致该调用会崩溃。

追溯:

这个木马从4月30号出现以来经历了几次大规模传播,下面是我们统计到的木马的传播趋势。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图32

通过对其CC域名的注册信息查询

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图33

可以看到域名是:

烟台润秋网络科技有限公司 主体注册的

同一个邮箱还注册了域名hongrensoft.cn 但访问量一直不高

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图34

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图35

因为域名注册信息,网站信息并不一定真实,但木马的控制和传播方的信息一致,由此我们猜测,456网盘维护者和“灵隐”木马的维护者应该是同一伙人。

另外,我们发现的传播源还包括789网盘(789xz.com),从注册用户名看,是同一个维护者。

灵隐木马黑吃灰:绑架数十款游戏外挂实现恶意推广

图36




原文发布时间为:2017年8月8日
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
下面是一个简单的React实现四级联动的例子: ```jsx import React, { useState } from "react"; const options = { "浙江省": { "杭州市": { "西湖区": ["西湖街道", "灵隐街道"], "上城区": ["中山北路街道", "南星街道"] }, "宁波市": { "海曙区": ["中山东路街道", "白云街道"], "江东区": ["庄桥街道", "七塘街道"] } }, "江苏省": { "南京市": { "玄武区": ["梅园新村街道", "红山街道"], "秦淮区": ["夫子庙街道", "集庆门街道"] }, "苏州市": { "姑苏区": ["虎丘街道", "石路街道"], "吴中区": ["香山街道", "越溪街道"] } } }; function Cascader() { const [province, setProvince] = useState("浙江省"); const [city, setCity] = useState("杭州市"); const [district, setDistrict] = useState("西湖区"); const [street, setStreet] = useState("西湖街道"); const handleProvinceChange = (e) => { setProvince(e.target.value); setCity(Object.keys(options[e.target.value])[0]); setDistrict(Object.keys(options[e.target.value][Object.keys(options[e.target.value])[0]])[0]); setStreet(options[e.target.value][Object.keys(options[e.target.value])[0]][Object.keys(options[e.target.value][Object.keys(options[e.target.value])[0]])[0]][0]); }; const handleCityChange = (e) => { setCity(e.target.value); setDistrict(Object.keys(options[province][e.target.value])[0]); setStreet(options[province][e.target.value][Object.keys(options[province][e.target.value])[0]][0]); }; const handleDistrictChange = (e) => { setDistrict(e.target.value); setStreet(options[province][city][e.target.value][0]); }; const handleStreetChange = (e) => { setStreet(e.target.value); }; return ( <div> <select value={province} onChange={handleProvinceChange}> {Object.keys(options).map((option) => ( <option key={option} value={option}> {option} </option> ))} </select> <select value={city} onChange={handleCityChange}> {Object.keys(options[province]).map((option) => ( <option key={option} value={option}> {option} </option> ))} </select> <select value={district} onChange={handleDistrictChange}> {Object.keys(options[province][city]).map((option) => ( <option key={option} value={option}> {option} </option> ))} </select> <select value={street} onChange={handleStreetChange}> {options[province][city][district].map((option) => ( <option key={option} value={option}> {option} </option> ))} </select> </div> ); } export default Cascader; ``` 在这个例子中,我们使用了`useState`来管理四个状态:`province`、`city`、`district`和`street`,分别代表省、市、区和街道。我们通过`select`元素来实现四级联动,每一级的选项都是根据上一级的选项来动态生成的。 当省份选项发生改变时,我们需要根据选中的省份来动态生成城市选项,同时也需要把城市、区和街道的选项重置为默认值。当城市选项发生改变时,我们需要根据选中的城市来动态生成区选项,并重置街道选项为默认值。当区选项发生改变时,我们需要根据选中的区来动态生成街道选项。当街道选项发生改变时,我们只需要更新`street`状态的值即可。 上述代码只是一个简单的例子,实际情况下可能会更加复杂。但是原理是相同的:通过状态来实现四级联动,根据当前选中的选项来动态生成下一级选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值