文章目录

  • 熊猫烧香专杀工具
      • 一.终止病毒的进程
      • 终止进程的思路:
      • 二.删除文件
      • 三.修改注册表,删除启动项
    • 下面来回顾一下分析的熊猫烧香:

熊猫烧香专杀工具

(注:本篇文章是参考了其他的一些技术文章)

一.终止病毒的进程

终止进程的思路:
  • 利用ToolHelpAPI获得快照句柄,而后再利用Process32FirstProcess32Next枚举当前的进程,枚举的过程当中获取结构体ProcessEntry32这个结构体里面的相关信息(包括进程名和进程ID);
  • 找到目标进程之后,利用OpenProcess获取当前的进程句柄,最后再利用TerminateProcess终止病毒进程.
二.删除文件

调用DeleteFile即可:

Bool DeleteFile (LPCTSTR lpFilename);

把lpFilename设为要指向删除的文件的文件名的指针即可,可以包含具体路径.

三.修改注册表,删除启动项

RegOpenKeyEx()打开目标主键,并返回句柄,然后利用RegSetValueEx进行修改键值,最后可以利用RegSetValueEx来删除键值,最后利用RegCloseKey来进行关闭;

以上三条为最基本的建议!具体的实际情况还要随机应变,进行适当扩展!

下面来回顾一下分析的熊猫烧香:

先回顾一下这个病毒的几个行为:

  • 该病毒首先创建了一个名为“spoclsv.exe”的进程,该进程在系统目录文件下面
  • 向外发送数据包,连接上网
  • 删除安全类软件在注册表中的启动项
  • 在注册表中创建svcshare,用于在开机时启动位于在系统目录下面的创建的spoclsv.exe
  • 修改注册表,使得隐藏文件无法通过普通的设置进行显示
  • 将自身拷贝至根目录,并命名为"setup.exe",同时创建"autorun.inf"用于病毒的自启动,这两个文件属性都为隐藏.
  • 创建名为"Desktop_.ini"的隐藏文件
  • 在命令行模式下使用net share命令来取消系统中的共享

针对第二点需要说明的是,由于将病毒本体删除了之后,此问题将得一解决,针对第三点需要说明的是,用户只需自行设置将让杀毒软件关闭即可

故本专杀工具主要面向的是剩下的五点

本工具主要使用MFC来编写,

//1.在内存中查找病毒是否存在
bool C专杀工具Dlg::FindTargetProcrss(char *pszProcessName, DWORD *dwpid)
{bool bFind = false;HANDLE hprocessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hprocessSnap ==INVALID_HANDLE_VALUE){return bFind;}PROCESSENTRY32 pe = {0};pe.dwSize = sizeof(pe);BOOL bRet = Process32First(hprocessSnap,&pe);while (bRet){if (lstrcmp(pe.szExeFile,(LPCWSTR)pszProcessName)==0){*dwpid = pe.th32ProcessID;bFind = true;break;}bRet = Process32Next(hprocessSnap,&pe);}CloseHandle(hprocessSnap);return bFind;
}//2.提升权限,访问一些受限制的系统资源
bool C专杀工具Dlg::EnableDebugPrivilege(char * pszPrivilege)
{HANDLE hToken = INVALID_HANDLE_VALUE;LUID luid;TOKEN_PRIVILEGES tp;BOOL bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);if (bRet == FALSE){return bRet;}bRet = LookupPrivilegeValue(NULL, (LPCWSTR)pszPrivilege, &luid);//这里需要进行类型转换,将pszPrivilege转换成LPCWSTR类型if (bRet == FALSE){return bRet;}tp.PrivilegeCount = 1;tp.Privileges[0].Luid = luid;tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);return bRet;
}DWORD CRC32(BYTE* ptr, DWORD Size)
{DWORD crcTable[256], crcTmp1;//动态生成CRC-32表for (int i = 0; i < 256; i++){crcTmp1 = i;for (int j = 8; j > 0; j--){if (crcTmp1 & 1) crcTmp1 = (crcTmp1 >> 1) ^ 0xEDB88320L;else crcTmp1 >>= 1;}crcTable[i] = crcTmp1;}//计算CRC32值DWORD crcTmp2 = 0xFFFFFFFF;while (Size--){crcTmp2 = ((crcTmp2 >> 8) & 0x00FFFFFF) ^ crcTable[(crcTmp2 ^ (*ptr)) & 0xFF];ptr++;}return (crcTmp2 ^ 0xFFFFFFFF);
}//主函数:!!!!!!!!!!!!!!!!!!!
void C专杀工具Dlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码//char * pszProcessName;DWORD dwpid = 0;bool bRet = false;CString csTxt;//1.在内存中查找病毒是否存在,如果找到spoclsv.exe进程,则结束掉它,并删除病毒程序本身bRet= FindTargetProcrss("spoclsv.exe", &dwpid);if (bRet == true){CString csTXT = _T("检查系统内存...\r\n");csTXT += _T("系统中存在病毒内存:spoclsv.exe\r\n");csTXT += _T("准备进行查杀...\r\n");SetDlgItemText(IDC_LIST1,csTXT);//IDC_LIST1要与对应的控件IDC对应//提升权限bRet = EnableDebugPrivilege((char *)SE_DEBUG_NAME);//这里也要进行类型转换//if (bRet == FALSE){csTxt += _T("提升权限失败\r\n");}else{csTxt += _T("提升权限成功!\r\n");}SetDlgItemText(IDC_LIST1, csTxt);// 打开并尝试结束病毒进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwpid);if (hProcess == INVALID_HANDLE_VALUE){csTxt += _T("无法结束病毒进程\r\n");return;}bRet = TerminateProcess(hProcess, 0);if (bRet == FALSE){csTxt += _T("无法结束病毒进程\r\n");return;}csTxt += _T("病毒进程已经结束\r\n");SetDlgItemText(IDC_LIST1, csTxt);CloseHandle(hProcess);}else{csTxt += _T("系统中不存在spoclsv.exe病毒进程\r\n");}Sleep(10);// 查杀磁盘中是否存在名为spoclsv.exe的病毒文件char szSysPath[MAX_PATH] = { 0 };GetSystemDirectory((LPWSTR)szSysPath, MAX_PATH);lstrcat((LPWSTR)szSysPath, (LPCWSTR)"\\drivers\\spoclsv.exe");csTxt += _T("检查硬盘中是否存在spoclsv.exe文件...\r\n");if (GetFileAttributes((LPCWSTR)szSysPath) == (DWORD)0xFFFFFFFF){csTxt += _T("spoclsv.exe病毒文件不存在\r\n");}else{csTxt += _T("spoclsv.exe病毒文件存在,正在计算散列值\r\n");HANDLE hFile = CreateFile((LPWSTR)szSysPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){AfxMessageBox(_T("Create Error"));return;}DWORD dwSize = GetFileSize(hFile, NULL);if (dwSize == 0xFFFFFFFF){AfxMessageBox(_T("GetFileSize Error"));return;}BYTE *pFile = (BYTE*)malloc(dwSize);if (pFile == NULL){AfxMessageBox(_T("malloc Error"));return;}DWORD dwNum = 0;ReadFile(hFile, pFile, dwSize, &dwNum, NULL);// 计算spoclsv.exe的散列值!!!!!!!!!!!!DWORD dwCrc32 = CRC32(pFile, dwSize);if (pFile != NULL){free(pFile);pFile = NULL;}CloseHandle(hFile);// 0x89240FCD是“熊猫烧香”病毒的散列值if (dwCrc32 != 0x89240FCD){csTxt += _T("spoclsv.exe校验和验证失败\r\n");}else{csTxt += _T("spoclsv.exe校验和验证成功,正在删除...\r\n");// 去除文件的隐藏、系统以及只读属性DWORD dwFileAttributes = GetFileAttributes((LPCWSTR)szSysPath);dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;SetFileAttributes((LPCWSTR)szSysPath, dwFileAttributes);// 删除spoclsv.exebRet = DeleteFile((LPCWSTR)szSysPath);if (bRet){csTxt += _T("spoclsv.exe病毒被删除!\r\n");}else{csTxt += _T("spoclsv.exe病毒无法删除\r\n");}}}SetDlgItemText(IDC_LIST1, csTxt);Sleep(10);/////  删除每个盘符下的setup.exe与autorun.inf,以及Desktop_.ini///char szDriverString[MAXBYTE] = { 0 };char *pTmp = NULL;//获取字符串类型的驱动器列表  GetLogicalDriveStrings(MAXBYTE, (LPWSTR)szDriverString);pTmp = szDriverString;while (*pTmp){char szAutorunPath[MAX_PATH] = { 0 };char szSetupPath[MAX_PATH] = { 0 };lstrcat((LPWSTR)szAutorunPath, (LPCWSTR)pTmp);lstrcat((LPWSTR)szAutorunPath, (LPCWSTR)"autorun.inf");lstrcat((LPWSTR)szSetupPath,(LPCWSTR)pTmp);lstrcat((LPWSTR)szSetupPath, (LPCWSTR)"setup.exe");if (GetFileAttributes((LPCWSTR)szSetupPath) == 0xFFFFFFFF){csTxt += pTmp;csTxt += _T("setup.exe病毒文件不存在\r\n");}else{csTxt += pTmp;csTxt += _T("setup.exe病毒文件存在,正在进行计算校验和...\r\n");HANDLE hFile = CreateFile((LPCWSTR)szSetupPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){AfxMessageBox(_T("Create Error"));return;}DWORD dwSize = GetFileSize(hFile, NULL);if (dwSize == 0xFFFFFFFF){AfxMessageBox(_T("GetFileSize Error"));return;}BYTE *pFile = (BYTE*)malloc(dwSize);if (pFile == NULL){AfxMessageBox(_T("malloc Error"));return;}DWORD dwNum = 0;ReadFile(hFile, pFile, dwSize, &dwNum, NULL);DWORD dwCrc32 = CRC32(pFile, dwSize);if (pFile != NULL){free(pFile);pFile = NULL;}CloseHandle(hFile);if (dwCrc32 != 0x89240FCD){csTxt += _T("校验和验证失败\r\n");}else{csTxt += _T("校验和验证成功,正在删除...\r\n");// 去除文件的隐藏、系统以及只读属性DWORD dwFileAttributes = GetFileAttributes((LPCWSTR)szSetupPath);dwFileAttributes &= ~FILE_ATTRIBUTE_HIDDEN;dwFileAttributes &= ~FILE_ATTRIBUTE_SYSTEM;dwFileAttributes &= ~FILE_ATTRIBUTE_READONLY;SetFileAttributes((LPCWSTR)szSetupPath, dwFileAttributes);// 删除setup.exebRet = DeleteFile((LPCWSTR)szSetupPath);if (bRet){csTxt += pTmp;csTxt += _T("setup.exe病毒被删除!\r\n");}else{csTxt += pTmp;csTxt += _T("setup.exe病毒无法删除\r\n");}}}// 去除文件的隐藏、系统以及只读属性DWORD dwFileAttributes = GetFileAttributes((LPCWSTR)szAutorunPath);}

(注:本篇文章也是对其他的一些技术文章整理:)

熊猫烧香专杀工具的编写相关推荐

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

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

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

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

  3. 程序之家系列教程之手把手教你写熊猫烧香病毒专杀工具

    (作者:chenhui530,论坛 http://chenhui530.com ) 前言       经过去年和熊猫烧香.威金等病毒的"斗争",我也累了,"程序之家病毒专 ...

  4. 熊猫烧香病毒分析与专杀工具

    先看看专业分析: Jacks.exe setup.exe 熊猫烧香 尼姆亚 解决方案 档案编号:CISRT2006078 病毒名称:Trojan-PSW.Win32.QQRob.ec(Kaspersk ...

  5. 超级巡警熊猫烧香之金猪报喜专杀工具v1.8下载

    DSWLAB 出品(dswlab@gmail.com)本工具实现检测和清除.修复感染熊猫烧香病毒的文件,对熊猫烧香的未知变种具备侦测和处理能力,可以处理目前众多熊猫烧香病毒家族和相关变种,清除后的文件 ...

  6. 专杀工具编写思路(转)

    本文实例讲述了VC实现的病毒专杀工具的方法.非常实用,分享给大家供大家参考.具体实现方法如下: 如今病毒木马蠕虫层出不穷,变种也是一个接一个.反病毒公司以及各大安全公司随着影响很大的病毒的出现都会免费 ...

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

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

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

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

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

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

最新文章

  1. java+jvm+log_java9 gc log参数迁移
  2. Ubuntu使用mutt收、发、回复邮件(mutt+msmtp+fetchmail+procmail
  3. 解决com.xpand.. starter-canal 依赖引入问题
  4. 2008年1月19日 微软(北京).NET俱乐部 线下休闲活动-滑雪
  5. 双机之间的串行通信设计 c语言编程,双机串行通信设计精品.doc-资源下载人人文库网...
  6. NVIDIA DLI 深度学习培训 | 北京站年后即将开班
  7. ES6/07/Array的扩展方法,...扩展运算符,Array.from(),(arr.find(),arr.findIndex()和arr.includes())模板字符串,Set数据结构
  8. elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
  9. Ant Design引入Echarts
  10. mysql 支持全文搜索_MySQL全文本搜索:启用全文本搜索支持
  11. prototype.js学习(3)函数绑定
  12. 2017年全国大学生电子竞赛电源A题
  13. 了解速率控制模式Rate Control Mode-CBR,VBR,CRF(x264、x265、vpx)
  14. CISCO 6509 三层交换机配置
  15. 【网页期末作业】用HTML+CSS做一个漂亮简单的学校官网
  16. [线性代数]向量2-范数三角不等式证明
  17. matlab 网络分析仪,N5244A网络分析仪安捷伦N5244A
  18. 【Tableau Desktop 企业日常技巧16】Tableau下载和安装ODBC驱动 连接MySQL方法及过程详解
  19. 什么软件可以搜python题_Python答题神器下载-Python百万答题软件 _5577安卓网
  20. NP=P,一种解决方案

热门文章

  1. Micro 编辑器中文帮助文档
  2. 常用数据分析方法:方差分析及实现!
  3. java 坦克机器人_[转]人工智能 Java 坦克机器人系列: 神经网络,下部
  4. lora信号测试小助手_LoRa无线直饮水表的优势体现在哪里?
  5. (二)Cityscapes数据集简介
  6. Office 365 函数之Concatenate 字符连接函数
  7. Windows软件打包工具
  8. 移动应用开发测试工具Bugtags集成和使用教程
  9. 使用现代C++如何避免bugs(上)
  10. ora-01017: 用户名/口令无效; 登录被拒绝