“MJ”病毒技术细节

本病毒是一个驱动型病毒,并专门感染扩展名为.sys的驱动文件。

    在病毒感染体程序中有“zjjmj2002”字样,根据以往的病毒分析经验并结合该样本的上下文来看,这应该是作者特意留下的签名。

    被感染的驱动程序文件加载后依次执行如下几部分操作:

    1.获取ntoskrnl.exe和hal.dll的基址:

    对于ntoskrnl的基址,病毒通过驱动入口函数的返回地址来寻找ntoskrnl的基址,对返回地址循环按页对齐向前遍历,搜索有效的DOS头。对于hal.dll的基址,病毒通过调用MmGetSystemRoutineAddress获取HalInitSystem的地址,再以该地址用搜索ntoskrnl基址相同的方法获取基址。

    2.获取Native API地址:

    该病毒采用搜索导入表对比函数名校验值的方法获取本地API地址。在该病毒入口偏移0x14处保存了两个函数名校验值的表,分别对应ntoskrnl和hal.dll。这两个表每个表项为一个DWORD值,以一个为0的DWORD值为结尾,每个DWORD值是一个函数名的校验值。在对应ntoskrnl.exe的表中有36个校验值,在对应hal.dll的表中有4个校验值。病毒在获取ntoskrnl和hal.dll的基址后,搜索其导入表,对比函数名的校验值和这两个表中的校验值,以此来获取API地址。

    3.执行病毒体:

    病毒在获取重定位地址、获取API地址等初始化后,调用ExAllocatePool函数分配大小为0x1000的内存块并将病毒体复制写入,然后跳到病毒体偏移0x3D8处开始执行。

    4.钩取 NtOpenFile:

    病毒首先通过打开文件、建立文件映射的方式读取ntdll.dll文件中的信息(导出函数索引等),以便挂钩 NtOpenFile函数,来达到感染用户访问的驱动文件的目的。该病毒尝试打开ntdll.dll时使用了硬编码的字符串“C:/Windows/System32/ntdll.dll”,如果目标系统与其不符合,将无法实现其它hook和感染工作。病毒通过修改cr0寄存器标志位的方法关闭写保护,然后修改NtOpenFile入口处5个字节的代码。病毒将NtOpenFile的前5个字节复制,然后改写为“Jmp xxxx”,hook过程的地址在病毒体偏移0x5C1处。

    5.循环反调试检测:

    在对NtOpenFile挂钩后,病毒将新分配内存并将病毒体偏移0x733处长度为0x93大小的代码写入,并将代码中调用系统API的地方填入正确的地址,然后调用这段代码(新分配内存区域的偏移0处)。在这段代码中,病毒对病毒体(内存中)的代码进行校验,以此来检查在病毒体代码上是否有软件断点。如果发现代码被改变,将通过调用KebugCheck(传参数0xE5)的方法使系统蓝屏崩溃。在这段代码中,病毒通过调用KeInitializeDpc、KeInitializeTimer、KeSetTimer来构建了一个定时循环结构。病毒将这段代码的开始地址作为DeferredRoutine传给KeInitializeDpc函数建立Dpc(延迟过程调用),然后将Dpc传给KeSetTimer函数,时间间隔为100毫秒,这样这段代码就会每隔100毫秒被执行一遍,定时循环检测病毒体的代码是否被改变。

    6.返回原文件入口点:

    在病毒体偏移0x58A处,是一条病毒在感染时写入的“Jmp 原入口点”指令,病毒在执行完前边所述的操作后,通过这条指令返回被感染的文件的入口点执行。

    7.NtOpenFile钩子过程:

    在Hook过程中,病毒记录调用地址,然后将一个位于病毒体内地址的地址压入堆栈,然后运行被复制的原NtOpenFile开始处的5个字节的代码并跳回到NtOpenFile继续执行。通过压入指向病毒体内的地址,使NtOpenFile返回后首先被病毒控制,病毒会检查打开的文件的扩展名是否是“.sys”,如是调用感染函数感染文件。

    8.感染驱动程序文件:

    病毒修改被感染驱动程序文件的最后一个节,将其扩大0x1000字节大小,并修改其属性使其可写、可执行,病毒将病毒体写入扩大的部分。病毒修改被感染文件的PE结构使其入口点指向病毒的入口(病毒体偏移0x200处),计算原驱动程序文件的入口点的相对位置,并以“Jmp 原入口点”的形式保存原入口点地址,以便病毒体执行完其功能后跳回原文件入口点执行。最后,病毒重新计算并写入被感染文件的校验和,以确保被感染的驱动程序文件能正常加载。

    另外,在病毒体偏移0xB2C处还有部分代码并没有被使用的,猜测该病毒仍有继续更新的可能。

安全建议:

    1 安装正版杀毒软件、个人防火墙和卡卡上网安全助手,并及时升级,瑞星杀毒软件每天至少升级三次。

    2 使用“瑞星系统安全漏洞扫描”,打好补丁,弥补系统漏洞。

    3 不浏览不良网站,不随意下载安装可疑插件。

    4 不接收QQ、MSN、Emial等传来的可疑文件。

    5 上网时打开杀毒软件实时监控功能。

    6 把网银、网游、QQ等重要软件加入到“瑞星帐号保险柜”中,可以有效保护密码安全。

清除办法:

    瑞星杀毒软件清除办法:

    安装瑞星杀毒软件,升级到19.47.02版以上,对电脑进行全盘扫描,按照软件提示进行操作,即可彻底查杀。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值