病毒木马查杀实战第011篇:QQ盗号木马之专杀工具的编写
前言
由于我已经在《病毒木马查杀第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 专杀工具的测试
经测试可知,本专杀工具是有效的,便不再赘述。
小结
利用进程守护技术确实可以令病毒更加顽固且难以对付,需要进行特别处理才能够将其消灭。本文所讨论的方法也可以运用于其他方面,有待各位读者的发掘。
病毒木马查杀实战第011篇:QQ盗号木马之专杀工具的编写的更多相关文章
- 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀
前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...
- 病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御
前言 这次我与大家分享的是我所总结的关于JS下载者脚本木马的分析与防御技术.之所以要选择这样的一个题目,是因为在日常的病毒分析工作中,每天都会遇到这类病毒样本,少则几个,多则几十个(当然了,更多的样本 ...
- 病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析
前言 按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见<病毒木马查杀第008篇:熊猫烧香之病毒查杀总结 ...
- 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析
前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...
- 病毒木马查杀实战第020篇:Ring3层主动防御之基本原理
前言 假设说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后.杀软一般都会弹出一个对话框提示我们,下载的程序非常可能是恶意程序,建议删除之类的.或者杀软就不提示.直接删除了:或 ...
- 病毒木马查杀实战第015篇:U盘病毒之脱壳研究
前言 因为我们的终于目标是编写出针对于这次的U盘病毒的专杀工具.而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示.假设真是如此,那么就有必要在此分析出病毒的命名规律等特征,然 ...
- 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现
前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...
- 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写
前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专 ...
- 病毒木马查杀实战第022篇:txt病毒研究
前言 反病毒爱好者们非常喜欢讨论的一个问题就是,现在什么样的病毒才算得上是主流,或者说什么样的病毒才是厉害的病毒呢?我们之前的课程所解说的都是Ring3层的病毒.所以有些朋友可能会觉得.那么Ring0 ...
随机推荐
- 微信小程序onReachBottom第二次失效
当整个页面就是一个view包着一个轮播.一个横向scroll-view和一个纵向scroll-view onReachBottom方法只执行一次 解决方法:
- POJ-1321棋盘问题(简单深搜)
简单搜索step1 POJ-1321 这是第一次博客,题目也很简单,主要是注意格式书写以及常见的快速输入输出和文件输入输出的格式. 递归的时候注意起始是从(-1,-1)开始,然后每次从下一行开始递归. ...
- 通达OA 越权访问-2013/2015版本
漏洞参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/9.html 复现 根据⽹上的通达 OA的源码找这些敏感地址,如: /general/syst ...
- Windows下用户手册
(1)net user(查看系统用户) (2)net user 用户名(查看具体某个系统用户详细信息) (3)net user 用户名 密码 /add(在本地组成员创建新用户,此时为Users组) ...
- EmEditor, 在正则使用()匹配后 使用$1 $2进行对括号内的值进行引用
$1表示第一个括号,$2表示第二个括号,以此类推
- 从零开始编写一个BitTorrent下载器
从零开始编写一个BitTorrent下载器 BT协议 简介 BT协议Bit Torrent(BT)是一种通信协议,又是一种应用程序,广泛用于对等网络通信(P2P).曾经风靡一时,由于它引起了巨大的流量 ...
- 【图像处理】OpenCV+Python图像处理入门教程(五)阈值处理
这篇随笔介绍使用OpenCV进行图像处理的第五章 阈值处理. 5 阈值处理 阈值是指像素到达某临界值.阈值处理表示像素到达某临界值后,对该像素点进行操作和处理. 例如:设定一幅图像素阈值为200,则 ...
- IPFS矿池集群方案详解
IPFS作为一项分布式存储技术,可以说是web3.0发展的基石.关于IPFS的产业,如存储.技术.矿机.矿池等也发展得非常迅速. 什么是单机挖矿? 单机挖矿就是一台机器就是一个节点,一台机器就完成挖矿 ...
- Forms身份验证 知识总结
最简单的Forms验证实现方法:FormsAuthentication.SetAuthCookie()方法,传递一个登录名即可FormsAuthentication.SignOut()方法退出Form ...
- 《C++反汇编与逆向分析技术揭秘》--算术运算和赋值
一.加法 1.Debug下: 14: int nVarOne0 = 1 + 5 - 3 * 6;//编译时计算得到结果 00C0550E C7 45 F8 F4 FF FF FF mov dword ...