• 本文实例讲述了VC实现的病毒专杀工具的方法。非常实用,分享给大家供大家参考。具体实现方法如下:

如今病毒木马蠕虫层出不穷,变种也是一个接一个。反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来说确实很有帮助。其实写病毒专杀工具也不像大家想象的那么神秘,利用SDK写个控制台程序来实现病毒专杀,因无须写图形界面,所以简便快捷!你自己也能写!不信?就接着看吧^_^ 废话不说了,接下来就开始谈谈病毒专杀工具的思路及实现方法。

本文中讲解的病毒专杀工具是针对木马、蠕虫等独立的程序而言的广义的病毒而言,而不是指那种自我复制感染PE文件的依附于其他程序的那种狭义的病毒。因为写那种病毒的专杀工具需要PE文件结构等知识,相对而言有点难度,所以我们就先从相对简单点的开始,难的以后再介绍。

对于大多数病毒而言,杀毒的思路其实很简单,那就是:终止病毒的进程、删除自启动项目(一般在注册表中的run*主键下)、删除病毒文件,对设置了文件关联的病毒而言还要修改注册表恢复文件关联。下面将分别陈述。

一.终止进程

以前网上曾有许多朋友问我怎么根据文件名终止指定进程,为什么使用函数 TerminateProcess()不能直接终止指定进程。首先让我们来看看函数TerminateProcess()的声明吧:Bool TerminateProcess(HANDLE hPeocess,UINT uExitCode),其中第一个参数为进程句柄,而不是进程名称(文件名)。那怎样才能获得指定进程的句柄呢?我们可以使用函数OpenProcess (),其原型为:

HANDLE OpenProcess(
DWORD dwDesiredAccess, // 访问标志
BOOL bInheritHandle, // 处理继承的标志
DWORD dwProcessId // 进程标识号,即进程ID
);

最后一个参数就是该进程的ID,进程句柄和进程ID是两回事,这时你可能很郁闷:怎么知道进程ID呢?方法当然有啦!在Windows9X/2000/XP/2003中,微软均提供了用来枚举进程的ToolHelp API系列函数。先运用函数CreateToolhelp32Snapshot()取得快照句柄,然后使用Process32First()以及 Process32Next()枚举当前的进程。枚举过程中会将每一个进程的信息存放到PROCESSENTRY32结构中。 PROCESSENTRY32的原型为:

typedef struct tagPROCESSENTRY32
{
DWORD dwSize; // 结构大小;
DWORD cntUsage; // 此进程的引用计数;
DWORD th32ProcessID; // 进程ID;
DWORD th32DefaultHeapID; // 进程默认堆ID;
DWORD th32ModuleID; // 进程模块ID;
DWORD cntThreads; // 此进程开启的线程计数;
DWORD th32ParentProcessID; // 父进程ID;
LONG pcPriClassBase; // 线程优先权;
DWORD dwFlags; // 保留;
char szExeFile[MAX_PATH]; // 进程全名;
} PROCESSENTRY32;

其中th32ProcessID就是进程的ID,szExeFile为该进程的文件名。所以要终止指定进程,我们可以枚举进程,逐一判断szExeFile是否和我们欲终止的进程名相同,如果相同就取其th32ProcessID参数,然后代入OpenProcess函数,取得目标进程的句柄。这样就可以利用函数TerminateProcess()终止该进程了。我写了个终止指定进程的函数,如下:

void KillProcessFromName(LPCTSTR name)//name为你要终止的进程的名称,Win9X则需包括路径
{
PROCESSENTRY32 pe;//定义一个PROCESSENTRY32结类型的变量
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// 创建快照句柄
pe.dwSize=sizeof(PROCESSENTRY32);//一定要先为dwSize赋值
if (Process32First(hShot,&pe))
{
do
{if (strcmp(pe.szExeFile,name)==0) //判断此进程是否为你要终止的进程
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);//如果是就利用其ID获得句柄
TerminateProcess(hProcess,0);//终止该进程
}
while(Process32Next(hkz,&pe));
}
CloseHandle(hShot);//最后别忘记Close
}

在使用时只要在main()主函数里调用函数KillProcessFromName(),把参数设为你要终止的进程的名称即可,Win9X则需包括路径。还有一点值得注意一下,就是别忘了#include

二.删除文件

这一步骤很简单,调用函数DeleteFile()即可,Bool DeleteFile(LPCTSTR lpFilename),把lpFilename设要指向删除的文件的文件名的指针即可,可包含具体路径。

三.修改注册表,删除启动项以及文件关联

首先用函数RegOpenKeyEx()打开目标主键,RegOpenKeyEx()函数原型为:

LONG RegOpenKeyEx(
HKEY hKey,// 将要打开的键的句柄
LPCTSTR lpSubKey,// 指向将要打开的包含子建的名称字符串指针
DWORD ulOptions,// 为保留字,必须为NULL
REGSAM samDesired,// 访问权限
PHKEY phkResult//指向打开键的句柄指针
);

获得句柄后用函数RegSetValueEx()进行修改键值,函数原型为:

LONG RegSetValueEx(
HKEY hKey, //当前打开的键的句柄
LPCTSTR lpValueName, //指向非空的包含要查询的值名称的字符串指针
DWORD Reserved, //保留值,必须为NULL
DWORD dwType,//键值类型,比如REG_SZ、REG_DWORD等
CONST BYTE * lpData , //指向键值数据的指针,注意此变量类型,不是LPCTSTR!
DWORD cbData//指向保存设定值长度变量的指针,以字节为单位
);

当然也可以用函数RegDeleteValue()来删除键值。操作完毕后别忘了用函数RegCloseKey()来Close。

使用这些函数很简单,只要把相应的参数换为你要删除或修改注册表的相应数值,唯一值得注意的是RegSetValueEx()函数中第5个参数的类型是BYTE而不是LPCTSTR!通过这些就可以很方便删除指定启动项以及恢复文件关联,为了便于大家理解,我举个修复EXE文件关联的例子,大家修改相应的参数就可以适用其它键值的修改,换用RegDeleteValue函数就可以实现删除自启动项:

HKEY hKey;
LPCTSTR data1="/"%1/" %*";//EXE文件默认的open方式,”%1/"表EXE文件本身
DWORD lResult=RegOpenKeyEx(HKEY_CLASSES_ROOT,"exefile//shell//open//command",0,KEY_WRITE,&hKey);
if(lResult==ERROR_SUCCESS)
RegSetValueEx(hKey,"",NULL,REG_SZ,(LPBYTE)data1,9);//修改键值
RegCloseKey(hKey);

到这里,一个病毒专杀工具的模型就已初步完成了,大家自己编写时只需把文中函数的形参换为你要杀的目标病毒的相应特征数据编译即可。这个是个简单的专杀工具,只能对付普通的木马、蠕虫等病毒,大家应具体情况具体分析,根据具体情况扩充该程序功能,比如有些木马是通过修改win.ini、system.ini来实现自动运行,我们就需操作文件删除相应数据,除此之外,有时还需添加终止服务、卸载DLL模块、进入RING0操作等功能。

专杀工具编写思路(转)相关推荐

  1. 杀毒我做主:病毒专杀工具自己编写

    如今病毒木马层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来 说确实很有帮助.其实写病毒专杀工具也不像大家想象的那么神秘, ...

  2. c#编写病毒专杀工具(一)

    如今病毒木马蠕虫层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费提供病毒专杀工具,这个举措对普通用户来说 确实很有帮助.其实写病毒专杀工具也不像大家想象的那么神 ...

  3. 熊猫烧香专杀工具的编写

    文章目录 熊猫烧香专杀工具 一.终止病毒的进程 终止进程的思路: 二.删除文件 三.修改注册表,删除启动项 下面来回顾一下分析的熊猫烧香: 熊猫烧香专杀工具 (注:本篇文章是参考了其他的一些技术文章) ...

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

    前言 如果是非感染型的病毒,完成行为分析之后,就可以开始编写专杀工具了.当然对于我们这次研究的对象--"熊猫烧香"来说,其实通过之前的行为分析,我们并没有得出它的所有恶意行为,毕竟 ...

  5. 最新Viking(维金)病毒专杀工具,纯VB编写。(升级版)

    维金的泛滥愈演愈烈,10月份发布了几个专杀工具帮助千百万计的用户脱离苦海,近日又接到了很多用户发来的维金病毒报告邮件,没想到这个病毒比原来更猖獗了.原来的工具源码在一次意外中丢失,这次又狠下心重新编写 ...

  6. 最新Viking(维金)病毒专杀工具,纯VB编写。

    Viking的肆虐让很多受害者忍无可忍,更可气的是专业软件公司提供的专杀工具竟然无法彻底清除.       无奈之余自己动手写了一个,请需要的朋友到这里下载:http://www.chenoe.com ...

  7. 自己动手写个病毒专杀工具

    下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdf 大数据测试过程.策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 此 ...

  8. ARP病毒专杀工具 ARP病毒***原理和解决方案

    ARP病毒清除方法: ARP病毒专杀工具下载地址:  趋势科技ARP病毒专杀工具 下载后解压缩,运行包内TSC.exe文件,不要关让它一直运行完,最后查看report文档便知是否中毒. PS:新ARP ...

  9. 肢解“文件夹图标”病毒,制作专杀工具——“郑大扫帚”

    肢解"文件夹图标"病毒,制作专杀工具--"郑大扫帚" 回想2009年7-8月份,学校机房被"文件夹图标病毒"变成了病毒"集散地&q ...

最新文章

  1. idea ctrl+shift+f快捷键失效
  2. 子之错父之过什么意思_胎教是什么意思?胎教有何意义?
  3. 无法识别system.web.extensions的处理方法
  4. HarmonyOS之调试分析打印HiLog日志
  5. UESTC_秋实大哥与花 2015 UESTC Training for Data StructuresProblem B
  6. openstack horizon国际化分析
  7. Java 反射机制和动态代理是基于什么原理,了解过吗?
  8. Hadoop单点安装(伪分布式)
  9. JAVA     MyFirst.java
  10. nginx+keepalived构建主备负载均衡代理服务器
  11. 小米2S ROM重分区
  12. 由于找不到npptool.dll,无法继续执行代码
  13. android 两边圆角,Android自定义View实现带4圆角或者2圆角的效果
  14. 惠普暗夜精灵2怎么打开后盖_散热为何如此优秀?HP暗影精灵II代拆解
  15. Objective-C中的instancetype和id区别
  16. WinCC控件之ShockwaveFlash
  17. 2022-07-10 第七小组 闫馨月 学习笔记
  18. NAS映射网络驱动器如何操作?
  19. 月经贴——.net前景何妨!
  20. 计算机一级理论课及答案,计算机一级考试理论题及答案课案.doc

热门文章

  1. 揭秘全球首个火星车数字人背后的百度数字人技术
  2. 鸿蒙大陆罪恶深渊哪里出,新魔界官方全面解析罪恶深渊生存要点
  3. 剑指数据仓库-Hive02
  4. linux 纪元时间转换,[转]Linux下时间函数time gettimeofday
  5. LeetCode 刷题之路(python版)
  6. 【箱型图】如何看箱型图
  7. 国内终端安全防护市场报告发布 360网神排行第一
  8. Mole and Abandoned Mine
  9. python歌词图表分析_用终端显示歌词的方法来实战学习python的基础知识
  10. java遍历易百教程_Java LineNumberReader示例