病毒木马查杀实战第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 ...
随机推荐
- go map嵌套 map的value可以是任意类型
在日常编程中,除了使用内置的数据类型,还会使用一些复杂的自定义数据类型,比如map K为string,V为数组.先了解一下go对map的基本设定: map的key可以是任意内置的数据类型(如int), ...
- CCF(引水入城:60分):最大流+ISAP算法
引水入城 201703-5 这从题目分析来看很像最大流的问题,只需要增加一个超级源点和一个超级汇点就可以按照题意连边再跑最大流算法. 因为数据量太大了,肯定会超时.但是没有想到可行的解决方法. #in ...
- SQL-MYSQL的时间格式转换(持续补充)
======================SQLSERVER===================================== SELECT CONVERT(varchar(100), GE ...
- MyBatis(三):自定义持久层框架实现
代码已上传至码云:https://gitee.com/rangers-sun/mybatis 新建Maven工程 架构端MyPersistent.使用端MyPersistentTest,使用端引入架构 ...
- MD摘要算法
import static org.junit.Assert.*; import java.security.MessageDigest; //消息摘要 public class MDCoder { ...
- css行高
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- Blind Super-Resolution Kernel Estimation using an Internal-GAN 论文解读
背景与思路来源 目前 SR 模型中合成 LR 使用的模糊核问题 目前大多数 SR 的 model 都是用的合成下采样图片来进行训练的,而这些合成的图片常常使用的是 MATLAB 里面的 imresiz ...
- ch1_6_2求解删除公共字符问题
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符.例如,输入"They are students."和"aeiou",则删除之后的第一个字符串变成&q ...
- OpenCV图像处理中“找圆技术”的使用
一.为什么"找圆" 圆是基本图形的一种,更为重要的是,自然情况下采集的图像,很少大量存在"圆":但凡存在的,大都是人工的,那么就必然代表特定的意义,从而 ...
- Android Studio中Switch控件有关 thumb 和 track 用法
•任务 •属性 android:track:底部的图片(灰->绿) android:thumb:设置 Switch 上面滑动的滑块,也就是上图中的白色圆形滑块 •switch_thumb 点击 ...