“鬼影”浅析 - 反病毒,信息安全,网络安全,反木马,病毒资讯平台,安全解决方案,电脑使用技巧,杀毒软件交流,anti-virus,民间反病毒联盟

article/2025/9/19 7:40:48
访问原文


这个鬼影病毒相信大家都比较熟悉,但是最近似乎那个什么XX工作室已经宣布停止开发了,所以逐渐淡出的人们的视线,但是这个病毒的技术含量比较高,值得去学习……


鬼影主体:WMPLAYER.EXE
MD5:f377e0f7c8f1a37cd5c92cf7aea3c8f7 WMPLAYER.EXE
编写语言:不明
类型:可执行文件

1, 开头首先获取一些运行时的必要函数,然后在系统分区下创建"\Program files\MSDN"文件夹
2,通过检测互斥体"Q360MonMutex"是否存在来判断系统中是否装有360安全卫士。

*(1)如果存在则首先从ntdll中获取ZwSystemDebugControl然后,通过ZwQuerySystenInformation获取ntoskrnl(在开启了PAE功能的电脑中ntkrnlpa.exe,下文中提到的Ntoskrnl同样如此)在内存中的基址,然后载入硬盘中的文件来进行计算SSDT表中函数的真实地址,通过ZwSystemDebugControl在R3中还原SSDT表(通常只要是个安全软件都应该拦截了ZwSystemDebugControl的写操作,360很早就拦了,甚至连读操作也拦了一部分,而其实360是没有SSDT HOOK的……
然后在从文件中搜索特征码找到PsLoadImageNotifyRoutine,PsCreateProcessNotifyRoutine,PsCreateThreadNotifyRoutine三个回调表,抹掉里面的回调函数。
(2)遍历进程,找到用户名为"SYSTEM"的卡巴进程(avp.exe),尝试打开进程(这点很疑惑,它用PROCESS_ALL_ACCESS打开的,最后却提升到PROCESS_DUP_HANDLE),然后创建一个事件,计算事件对象到进程PID的偏移,从avp中暴力枚举句柄,直到枚举到一个名为"lBaseNamedObjects\\f953EA60-8D5F-4529-8710-42F8ED3E8CDC"事件句柄,然后远程关闭这个句柄,让卡巴异常退出。
(3)遍历进程,校验进程的公司名,然后通过终止工作对象来终止一些安全进程。

3,释放衍生物到"\Program files\MSDN"文件夹下,有两个驱动。( 一些诸如系统文件夹名由主体在释放后写进衍生物中 )
4,通过互斥体"Jiangmin_WallNotify_Notify"判断系统中是否存在江民杀毒软件。

*如果存在则利用系统的"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DMusic",填写注册表参数为自己的驱动路径后加载驱动,修改注册表使用的是RegRestoreKey而不是RegSetValue,也可以绕过一部分安全软件的注册表监控,绕过江民以及一些HIPS的驱动拦截,如果不存在则通过WDM式的方法加载驱动,创建一个inf以用来加载自身驱动。 由于一般的HIPS只是挂钩ZwLoadDriver函数,而这两种方法都不走ZwLoadDriver,所以可以绕过很多HIPS,当然,现在闹得这么大,更新的HIPS或者杀软都会拦下这种加载方式
5,加载驱动之后,创建一个线程传入解密KEY到atixi.sys,然后延迟删去加载驱动使用的注册表项,然后病毒自删除。

//
病毒衍生物:atixx.sys
MD5:a817419a120931c4d31b4f603ab4b531 atixx.sys
编写语言:不明
类型:驱动

1,首先判断是引导时加载还是正常加载,首次加载为正常加载,对自身的部分字节进行解密来对抗静态分析。
2,通过自身传入的参数DriverObject得到InLoadOrderLinks链表的地址,获取Ntoskrnl的DriverSection,保存下这个DriverSection已经自身的DriverSection
3,判断自身的导入表中的函数是否已经在加载的时候被填写好,如果没有则自己从Ntoskrnl的DriverSection->DllBase获取Ntoskrnl基址然后获取需要使用的函数自己填充导入表
4,从自身的DriverSection->FullDllName中获取自身的全路径,读取数据进行解密和重定位,然后写到执行代码中的相应位置,对抗静态分析
5,创建一个系统线程,入口点代码执行完毕。

系统线程:
(1),获取自身线程的EThread->StartAddress,把它修改为系统函数的地址,伪装成系统自身创建的线程

(2),判断是否为引导时加载,是则长时间等待(等待explorer.exe启动)

(3),从PsTerminateSystemThread中用特征码匹配的方式获取PspTerminateThreadByPointer,然后获取KeInsertQueueApc和KiInsertQueueApc地址,最后挂钩KeInsertQueueApc(这个挂钩很有问题,很多时候会导致关机的时候蓝屏)

(4),从ntoskrnl中读取部分数据进行重定向以及修改以后,然后在HOOK的函数中使用,达到绕过原先安全软件的inlinehook的作用。

(5),从自身EPROCESS中获取ActiveProcessLinks双向链表的地址,遍历链表找到"explorer.exe"进程,然后附加到该进程,之后在进程分配内存安放可执行代码,从该进程中找到一个线程,修改KThread->KAPC_STATE->UserApcPending为1,使这个线程的用户态APC能够尽快交付,最后插入用户态APC到该线程。

*该APC会执行访问网络,下载木马等功能。 (代码未分析)

(6),从自身DriverSection->DllBase中获取自身的内存镜像,然后把从DOS头开始的512个字节用0填充,防止被暴力搜索内存PE头这种方式找到。
(7),线程进入死循环,隔一段时间执行一次扫描函数

*(1)该函数通过NtQuerySystemInformation获取系统中的进程列表,然后使用PsLookupProcessByProcessId依次获取每一个进程的EPROCESS,传入扫描函数

(2)扫描函数首先调用系统函数KdDisableDebugger来屏蔽系统内核调试器(如windbg)

(3)然后把被扫描进程的EPROCESS->Debugport置零,基本所有用户态调试器都依赖这个端口,因为这个操作无差别,所以会导致系统的所有用户态调试器失效

(4)从EPROCESS->SeAuditProcessCreationInfo中获取进程的全路径,打开以后获取该进程的公司名,然后进行算法比较,如果是一些安全软件的进程则通过终止所有线程予以终止 ( 使用的是HOOK时载入的Ntoskrnl部分原始代码,可以绕过一些安全软件的挂钩 ) ,有两个特殊的公司的进程是通过EPROCESS->ObjectTable枚举进程的句柄表,用算法匹配一个对象名,匹配成功则将其关闭。
点击查看大图


写了个小程序试了一下
点击查看大图


点击查看大图


//
病毒衍生物:atixi.sys
MD5:0a12657de987e74423f6205b47112f06 atixi.sys
编写语言:不明
类型:驱动


1,对自身数据进行解密,对抗静态分析,获取KUSER_SHARED_DATA->KdDebuggerEnabled的数值(在内核调试器启动时为1,没有启动时为0),将该数值与解密的KEY相加,修改KEY。
2,读取自身文件到内存使用刚才所说的KEY进行解密,如果KEY被修改,解密出来的代码与原来的代码大相径庭,导致在下面执行的时候蓝屏。
3,对一个系统处理器插入一个DPC,在IDT添加一个门,接受R3传来的参数修改第二次解密的KEY,对抗静态分析。
4,穿还原读写硬盘。
首先尝试使用IDE硬盘的0x1f0和0x3f6寄存器读写硬盘,如果失败则尝试使用0x170和0x376寄存器。如果都失败则访问PCI配置空间(0xcf8和0xcfc寄存器)获取硬盘IO端口。
如果依然失败,则访问PCI配置空间得到硬件的物理地址,将其映射到内存中,然后操作物理硬盘。(未证实)

(理论上可以穿透如影子系统,雨过天晴,冰点等开机还原软件,以及不还原MBR的一键还原软件,如GHOST。但是受硬件类型影响很大,在测试过程中,对于使用SATA硬盘的虚拟机无法写入)

(1)读取硬盘第一个扇区的数据(即MBR)到内存
(2)把真正的MBR写入第二个扇区。
(3)把病毒数据从第三个扇区开始写入,一共56个扇区(28672字节)
(4)把病毒使用的MBR写入第一个扇区


//
感染的MBR:
已经出现比较低级的免杀
1,通过修改0x413的值来增加系统预留内存大小。( 实现这部分的内存的常驻
2,复制数据到高端内存

3,挂钩BIOS提供的13号中断。( 该中断用来在引导时的硬盘数据管理,如读取和写入硬盘数据
判断是否是读操作,如果是,则在调用原中断例程之后,用特征码匹配读取缓冲区中的数据,扫描Ntldr中的BlLoadBootDrivers(特征码为0x74F685F0和0x3D80) 
4, 把原始MBR加载到内存,把控制权交回给原始MBR。
5,挂钩Ntldr!BlLoadBootDrivers下一行的代码
在DBR使用int 13加载Ntldr的时候,病毒重新获得控制权,得到Ntldr!BlLoadBootDrivers下一行的代码地址,进行挂钩。
6,挂钩Ntoskrnl!PspCreateProcess
Ntldr在BlLoadBootDrivers进入钩子处理例程,这时Ntoskrnl已经加载进内存,获取PspCreateProcess地址,进行挂钩
7,启动Atixx.sys实现复活
在钩子处理例程中,判断启动进程的PID是否是4( 即System.exe ),如果是则从感染扇区中读取Atixx.sys代码进行加载,就这样,病毒成功复活。




处理办法:
因为真正的MBR在第二个扇区,直接把第二个扇区的数据写在第一个扇区即可。(病毒没有对其进行保护)



点击查看大图


点击查看大图



[  本帖最后由 天涯一鸿 于 2010-8-2 20:12 编辑  ]

http://chatgpt.dhexx.cn/article/eKhJPB3o.shtml

相关文章

写计算机病毒吗,会写计算机病毒很牛吗

满意答案 djipuh90 2016.02.11 采纳率:52% 等级:12 已帮助:8216人 先假设你说的病毒是os系统病毒,以windows系统为例 类似熊猫烧香这种层次的病毒,大概只能算是非常非常普通的,技术上也没有什么特别之处…

鬼影3分析笔记

这是学习笔记,供自己再次调试回忆,别人看没什么价值,因为写的太乱了。而且有些点自己也没理清 前面是wowocock老师的文档 首先根据教程了解到感染好mbr之后存在磁盘最后的区段的信息有 1.ProtectMode Code是Hook了OsLoader.exe之后获得控制…

鬼影病毒分析报告

鬼影病毒分析报告 一、 鬼影病毒概述 这是一个***下载器,使用了ring3恢复内核钩子、感染磁盘引导区(MBR)、多种方法结束杀毒软件等 技术自启动并对抗杀毒软件。完全感染后,是一个看不到可疑文件、没有启动项、普通重装系统也无法解…

用友与鬼影病毒

昨天一客户打电话,说软件无法登陆。 上门查看现象如下: 用友服务无法启动,双击启动,报错:本地计算机上的用友通服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如性能和日志警…

鬼影病毒

鬼影病毒是指寄生在磁盘 主引导记录(MBR),即使格式化重装系统,也无法清除的病毒。 2010年3月15日,国内某安全中心发现一种被命名为“鬼影”的电脑病毒,由于该病毒成功运行后,在进程中、系统启动…

鬼影病毒6.0分析

原理图 文件名功能1001.exe主模块camhgzsswk.sys释放模块p2phook.sys释放模块的克隆p2pc.ini攻击模块配置文件safemon.dll注入攻击模块beep.sys持久化攻击模块 主模块1001.exe [1]创建用户mima1,运行ipconfig进行掩饰。 [2]释放病毒驱动sys文件。 [3]将病毒驱动注…

鬼影病毒和浏览器锁狼狈为奸,用户浏览器遭强行劫持

鬼影病毒和浏览器锁狼狈为奸,用户浏览器遭强行劫持 据金山毒霸安全实验室监测,发现鬼影病毒变种再次高发,其中一个伪装成阿里旺旺的变种感染量就达1.6万台/天。中毒电脑桌面出现多个图标,浏览器被锁定为go2000.com或soolaa.com&am…

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题.但是MBR和之后的保护模式的代码就不一样啦同学们,纯静态分析,伤不起啊,各种硬编码,…

股票量化分析指标公式是什么?

股票量化分析指标公式是什么?其公式为:量比现成交总手/(过去5日平均每分钟成交量当日累计开市时间)。 股票量化分析指标API调用流程(部分) “股票量化分析指标”是指可以用具体数据反映的指标,比如成交量、市盈率和日…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发4 分析技术指标一系列形态结果

接上一节,我们计算获取了技术指标的结果total_df,结果如下图 我们需要显示股票最近10天的分析结果,对此我们只需要截取total_df前12天数据就可以了。 #获取前12天的数据 total_dftotal_df.iloc[-12:,:] total_df 对应列的数字0~9…

波段炒股看什么指标最准,怎么才能把股票波段做好?

波段炒股看什么指标最准,怎么才能把股票波段做好?股票有不少盈利方式,可是这样的盈利方式,你会吗?做波段盈利的好处在哪里呢? 股票做波段赢利率,针对股票市场的波段操作特点,波段操作…

基于macd、kdj、ma技术指标分析股票多空方向——应用开发3 计算股票相关技术指标数据

接上一节,我们获取了000001.SZ股票过去一年的历史数据stock_df,接下来我们就计算技术指标 所用包 pandas_ta import pandas_ta as ta 关于pandas_ta 可以在GitHub - twopirllc/pandas-ta: Technical Analysis Indicators - Pandas TA is an easy to …

股票 - - 常用指标【下】

股票 - - 常用指标【下】 接上一篇文章,文章地址:八、巴菲特最看重的指标1. 简介 九、快速读懂股票的估值1.前言2.市盈率3.知识点 十、筹码分布 - - 一个一用就上瘾的指标1.一个关于筹码的故事2.关于筹码的形态单峰密集状态双峰密集状态多峰密集形态 3.上述三种形态…

常用技术指标之一文读懂KDJ指标

什么是KDJ指标? KDJ中文名又叫随机指标,英文名叫Stochastic oscillator,由乔治莱恩(George Lane)于20世纪50年代首创,最早用于期货市场。KDJ指标能比较迅速、直观地研判行情,主要用于分析中短期…

史上最全股票指标图文详解(原创)

炒股要把风险放在第一位,盈利放在第二位。 1、成交量(VOL)指标: 定义:股市中的成交量,是指股票或者大盘当日成交量的总手数。成交量指标一般是用柱状图来表示。左面的坐标值与柱子的横向对应处,就是当日当时的成交总手。如当天收盘价高于当天开盘价,成交柱呈红色;…

期货投资心得

期货的K线是什么 K线就是股票期货某个时间段的价格趋势,有四个数据构成,一个是开盘价,收盘价,最高价,最低价。其中k线红色时表示,收盘价高于收盘价;其中k线绿色时表示,收盘价低于收…

量化分析(8)——唐安奇通道

唐安奇通道和布林通道差不多,都是判断超买和超卖的工具,我还是喜欢rsi强度来判断超买和超卖,不过这二者可以相互印证一下。这里简单的画一下图,介绍一下。 # -*- coding: utf-8 -*- """ Created on Thu Oct 19 11…

Python 金融量化 道路突破策略(唐奇安道路突破策略布林带通道及其市场风险)

目录 获取数据1.通道突破简介2.唐奇安通道(Donchian Channel)2.1 唐奇安通道刻画2.2 在K线图中绘制唐奇安上下通道线2.3 Python捕捉唐奇安通道突破2.4 选择不同时间跨度 3.布林带通道3.1 布林带通道概述3.2布林带通道计算方式3.3 开始编码3.4 布林带通道线及K线图绘制3.5 布林带…

常用技术指标之一文读懂BOLL布林线指标

什么是布林线指标? 布林线BOLL指标(Bollinger Bands)是股市技术分析的常用工具之一,由美国金融分析师John Bollinger根据移动平均线和统计学中的标准差原理于1980年代设计出来。 如上图所示,布林线指标由上、中、下三条轨线组成,…

Python绘制BOLL布林线指标图

写在前面布林线(BOLL)技术指标简介BOLL公式详解参数设置 用到的主要Python库Python代码&详解参考文献推荐阅读 写在前面 本文代码部分总结自Packt出版社的《Learn Algorithmic Trading - Fundamentals of Algorithmic Trading》(图1&…