病毒木马查杀第011篇:QQ盗号木马之专杀工具的编写

一、前言

由于我已经在《病毒木马查杀第004篇:熊猫烧香之专杀工具的编写》中编写了一个比较通用的专杀工具的框架,而这个框架对于本病毒来说,经过简单修改也是基本适用的,所以本文就不讨论那些重叠的知识,只针对这个病毒特有的方面来讨论专杀工具的编写,然后将其进行组合,就是完整的针对于本病毒的专杀工具了。

二、原理讨论

对于本病毒而言,其最大的特色就在于使用了进程守护技术。病毒运行后,同时有三个病毒进程存在,关闭其中的任何一个,由于还有两个病毒进程的存在,那么被关闭的又会被重新开启。要解决这个问题,不能靠“手速”来将三个病毒进程同时关闭,而是应当采取其他办法。我在《安全类工具制作第004篇:进程管理器(上)》中曾经讨论过,遇到这种情况就应当将那几个进程先暂停再关闭。一般来说,进程是不能够直接暂停的,当定位到了想要暂停的进程后,应当将该进程下的所有线程暂停,那么该进程也就停止了。而经过实际测试,利用那篇文章中所编写的进程管理器,是能够成功关闭那三个进程的。弄清楚了原理,那么接下来就是需要编程实现了。

三、代码编写

我们需要将三个病毒进程一一暂停,之后再结束。为简单起见,这里创建的是Win32控制台应用程序。代码如下:

#include "windows.h"
#include "stdio.h"
#include "tlhelp32.h"

int main()
{
/////////////////////////////////////////////////////////////////////
// 程序首先要暂停病毒进程
/////////////////////////////////////////////////////////////////////
	printf("开始查杀病毒进程...\n");
	// 给系统内所有的进程拍个快照
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if ( hSnap == INVALID_HANDLE_VALUE )
	{
        printf("进程快照创建失败!\n");
        return 0;
	}

	PROCESSENTRY32 Pe32 = { 0 };
    // 在使用这个结构前,先设置它的大小
    Pe32.dwSize = sizeof(PROCESSENTRY32);
    // 遍历进程快照
    BOOL bRet = Process32First(hSnap, &Pe32);
	// 通过循环来暂停病毒进程
	while ( bRet )
	{
	    // 三个进程名称进行匹配
		if ( strcmp(Pe32.szExeFile, "severe.exe")==0 || strcmp(Pe32.szExeFile, "conime.exe")==0 || strcmp(Pe32.szExeFile, "tfidma.exe")==0)
		{
		    // 创建线程快照
			HANDLE thSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, Pe32.th32ProcessID);
            if ( thSnap == INVALID_HANDLE_VALUE )
			{
                printf("%s线程快照创建失败!\n",Pe32.szExeFile);
                return 0;
			}

            THREADENTRY32 Te32 = { 0 };
            // 在使用这个结构前,先设置它的大小
			Te32.dwSize = sizeof(THREADENTRY32);
            // 遍历线程快照
			BOOL tbRet = Thread32First(thSnap, &Te32);
            // 通过循环来暂停病毒进程中的所有线程
            while ( tbRet )
			{
                //判断线程所属
                if ( Te32.th32OwnerProcessID == Pe32.th32ProcessID )
                {
                    // 打开线程
					HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, Te32.th32ThreadID);
                    // 暂停线程
					SuspendThread(hThread);
                    // 关闭线程句柄
                    CloseHandle(hThread);
                }
                tbRet = Thread32Next(thSnap, &Te32);
			}
			printf("%s进程暂停成功!\n",Pe32.szExeFile);
			CloseHandle(thSnap);
		}
		bRet = Process32Next(hSnap, &Pe32);
	}
/////////////////////////////////////////////////////////////////////
// 程序接下来要结束病毒进程
/////////////////////////////////////////////////////////////////////
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if ( hSnap == INVALID_HANDLE_VALUE )
	{
        printf("进程快照创建失败!\n");
        return 0;
	}

    // 在使用这个结构前,先设置它的大小
    Pe32.dwSize = sizeof(PROCESSENTRY32);
    // 遍历进程快照
    bRet = Process32First(hSnap, &Pe32);
	// 通过循环来结束病毒进程
	while ( bRet )
	{
	    // 三个进程名称进行匹配
		if ( strcmp(Pe32.szExeFile, "severe.exe")==0 || strcmp(Pe32.szExeFile, "conime.exe")==0 || strcmp(Pe32.szExeFile, "tfidma.exe")==0)
		{
		    HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, Pe32.th32ProcessID);
            TerminateProcess(hProcess, 0);
			printf("病毒进程%s成功结束!\n",Pe32.szExeFile);
            CloseHandle(hProcess);
		}
		bRet = Process32Next(hSnap, &Pe32);
	}

	printf("病毒进程清理完毕!\n");
    CloseHandle(hSnap);
	getchar();
	return 0;
}

上述程序可以编译成功。

四、程序测试

为了测试这次只针对于病毒进程的专杀工具,我将病毒样本和本程序均拷贝到虚拟机中,然后执行病毒程序,最后执行本专杀工具:

图1 专杀工具的测试

经测试可知,本专杀工具是有效的,便不再赘述。

五、小结

利用进程守护技术确实可以令病毒更加顽固且难以对付,需要进行特别处理才能够将其消灭。本文所讨论的方法也可以运用于其他方面,有待各位读者的发掘。

时间: 2024-10-19 21:35:54

病毒木马查杀第011篇:QQ盗号木马之专杀工具的编写的相关文章

病毒木马查杀第004篇:熊猫烧香之专杀工具的编写

一.前言 如果是非感染型的病毒,完成行为分析之后,就可以开始编写专杀工具了.当然对于我们这次研究的对象--"熊猫烧香"来说,其实通过之前的行为分析,我们并没有得出它的所有恶意行为,毕竟还没有对其进行逆向分析.所以这里仅针对我们上一篇文章所得出的结果,来进行专杀工具的编写.一般来说,专杀工具既可以用批处理实现,又可以用编程语言编写,但是现实中更多的还是用后者进行制作的,因为其更加严谨.灵活.因此我这里会使用C++来写一个简单的"熊猫烧香"专杀程序. 二.病毒行为回顾与

病毒木马查杀第009篇:QQ盗号木马之手动查杀

一.前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香"是一款比较简单的病毒,它并没有采取一些特别强的自我保护技术,所以我们完全可以"徒手"解决.但是这次研究的恶意程序就没那么简单,它采取了进程保护的技术,使得我们不能够使用常规手法对其实现查杀.所以这次我引入了两个工具--icesword与autoruns,以达到查杀的目的. 二.病毒的基

病毒木马查杀第012篇:QQ盗号木马之逆向分析

一.前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇2500字左右)也仅仅分析了病毒的三分之一,而且还没分析到病毒的核心部分.主要也是因为那是我这个系列为大家分析的第一个病毒,为了将一些原理性的东西说清楚,所以文章略显冗长,也主要是照顾一下初学的朋友,摒弃那些高大上的东西,将我的实际分析过程完整地呈现出来.相信大家在认真阅读完那三篇文章后,都能够掌握基本的分析方

QQ盗号木马

前言    这是一系列的QQ盗号木马,但是因为这个系列的木马被加上了Themida系列的强壳.所以无法对他是如何获取到QQ号信息进行分析.但是不阻碍我们对他的某些恶意行为的分析 样本信息 加壳信息:Unknown Packer-Protector , 7 sections -> CRC is Set !<- 样本行为 0x01加强壳保护自身 这个木马是被加了强壳的而且用最新版本的查壳工具还不能够查出他是什么壳,但是在调试的过程中我发现它是加了一个Themida壳.     0x02混淆视听打开

简单qq盗号木马分析

简单分析流程: 查壳,发现没壳,那就载入OD直接分析吧 1.调用LoadStringW函数炒资源里加载字符串资源到Buffer中,为后面窗口类名做准备 2.创建窗口,创建了一个主窗口和两个子窗口 3.创建主窗口和两个Edit类型的子窗口,并且通过调用API设置创建风格,并且设置一个文本框为只可读另外一个设置为密文文本 4.用随机的方式填充字符串,填充的字符串"密码错误,请重新输入",""a=x12x&b=_)&c=(*.)","&

病毒木马查杀第008篇:熊猫烧香之病毒查杀总结

一.前言 之前用了六篇文章的篇幅,分别从手动查杀.行为分析.专杀工具的编写以及逆向分析等方面,对"熊猫烧香"病毒的查杀方式做了讨论.相信大家已经从中获取了自己想要的知识,希望大家在阅读完这几篇文章后,能够有一种"病毒也不过如此"的感觉,更希望这些文章能够为有志于在未来参与到反病毒工作的朋友,打下坚实的理论基础.以下就是我在这几篇文章的分析中所总结出来的一些知识点,分为静态分析与动态分析两个方面进行讨论,并加入了一些延伸知识,为大家查漏补缺. 二.病毒的静态分析 静态

病毒木马查杀实战第026篇:“白加黑”恶意程序研究(上)

前言 众所周知,传统的恶意程序都是由单一文件构成的,从而实现某一种或者几种恶意功能.而这类的恶意程序为了避免被发现以及被查杀,往往会采用五花八门的自我隐藏技术以及免杀技术,病毒程序的作者很多时候也是脑洞大开,为了对抗杀软的查杀也是无所不用其极.我们每天所处理的恶意文件里面,反查杀手段运用得最好的就是脚本木马,关于这类程序,我在之前的<病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御>这篇博文中也做过简单的论述.可是,不论恶意程序如何进化,杀软厂商总有各种各样的方法来应对现有的以及未知

病毒木马查杀第002篇:熊猫烧香之手动查杀

一.前言 作为本系列研究的开始,我选择"熊猫烧香"这个病毒为研究对象.之所以选择这一款病毒,主要是因为它具有一定的代表性.一方面它当时造成了极大的影响,使得无论是不是计算机从业人员,都对其有所耳闻:另一方面是因为这款病毒并没有多高深的技术,即便是在当时来讲,其所采用的技术手段也是很一般的,利用我们目前掌握的知识,足够将其剖析.因此,我相信从这个病毒入手,会让从前没有接触过病毒研究的读者打消对病毒的恐惧心理,在整个学习的过程中开个好头. 本篇文章先研究如何对"熊猫烧香"

病毒木马查杀实战第018篇:病毒特征码查杀之基本原理

本系列教程版权归"i春秋"所有,转载请标明出处.        本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 在本系列的导论中,我曾经在"病毒查杀方法"中简单讲解过特征码查杀这种方式.而我也在对于实际病毒的专杀工具编写中,使用过CRC32算法来对目标程序进行指纹匹配,从而进行病毒判定.一般来说,类似于MD5以及CRC32这样的算法,在病毒大规模爆发时是可以提高查杀效率的,但是传统的更为常用的方法是采用以静态分析文