【API】检查进程是否存在 - CreateToolhelp32Snapshot
2017-04-18 01:07
399 查看
1 学习目标
今天静态逆向mydocument病毒时,看到病毒代码为了防止自身被调试会先检测杀毒软件和调试工具的进程是否存在。如果没有杀毒软件则释放真正的病毒文件,提前熟悉一下枚举进程的反汇编代码。2 编程思路
2.1 代码原理
这是一段检测指定进程是否存在的代码,使用CreateToolhelp32Snapshot这个API获取进程信息。然后对比有没有杀毒软件的进程。2.2 编写思路
将这几个功能封装成一个函数。1、 定义TCHAR数组,数组中存放要检测的进程名
2、获取进程信息
3、遍历进程名
4、对比是否存在指定的进程名
如果检测到有相关的进程名,函数返回值为TRUE,否则为FALSE
3 参考文章
判断指定的进程或程序是否存在方法http://blog.csdn.net/yeahhook/article/details/6942414
Anti-Debug之父进程检测以及根据进程名检测
http://www.52pojie.cn/thread-193804-1-1.html
4 实现流程
4.1 编程环境
操作系统:windows 7编译器版本:vs 2010
4.2 前置API函数
// 获取进程的快照以及堆,模块,这些进程和线程使用。 CreateToolhelp32Snapshot() // 存放快照进程信息的一个结构体 PROCESSENTRY32 // Process32First是一个进程获取函数 ,利用process32First函数来获得第一个进程的句柄。 Process32First() // Process32Next是一个进程获取函数,利用Process32Next函数来获得下一个进程的句柄。 Process32Next() // 关闭句柄 CloseHandle()
4.3 C++代码
#include "stdafx.h" #include <windows.h> #include <tchar.h> #include <TlHelp32.h> BOOL EnumProcessName(); int main() { if (EnumProcessName()) { MessageBox(NULL, _T("检测到OD"), _T("结果"), MB_OK); } else { MessageBox(NULL, _T("没有检测到OD"), _T("结果"), MB_OK); } return 0; } BOOL EnumProcessName() { TCHAR szOLLYDBG[] = _T("OLLYDBG.EXE"); //要检测的OD进程名 TCHAR sz52[] = _T("吾爱破解.EXE"); TCHAR szICey[] = _T("ICEYOD.EXE"); TCHAR szODICE[] = _T("OLLYICE.EXE"); TCHAR szWINDBG[] = _T("WINGUARD.EXE"); TCHAR szTestQQ[] = _T("QQ.EXE"); //测试QQ进程是否存在 PROCESSENTRY32 pe; pe.dwSize = sizeof(PROCESSENTRY32); HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (INVALID_HANDLE_VALUE == hSnap) { MessageBox(NULL, _T("创建进程失败"), _T("错误"), MB_ICONERROR); return FALSE; } if (Process32First(hSnap, &pe)) { do { if (lstrcmpi(szOLLYDBG, pe.szExeFile) == 0 || lstrcmpi(sz52, pe.szExeFile) == 0 || lstrcmpi(szICey, pe.szExeFile) == 0 || lstrcmpi(szODICE, pe.szExeFile) == 0 || lstrcmpi(szWINDBG, pe.szExeFile) == 0|| lstrcmpi(szTestQQ, pe.szExeFile) == 0) { return TRUE; } } while (Process32Next(hSnap, &pe)); } CloseHandle(hSnap); return FALSE; //其余都返回FALSE }
运行截图
相关文章推荐
- VB.Net检查进程是否存在及关闭进程
- 在系统中检测指定的窗口是否已经打开,检查某进程是否存在
- 在系统中检测指定的窗口是否已经打开,检查某进程是否存在
- 利用脚本检查个进程是否存在
- 检查程序进程是否存在/强制杀掉程序进程
- centos 里 检查进程是否存在
- 检查进程是否存在
- Linux C语言检查进程是否存在
- 检查程序进程是否存在/强制杀掉程序进程
- 检查进程是否存在
- linux下php检查进程是否存在
- Windows中检查某一进程是否存在
- Zookeeper实例ZkClient API-检查节点是否存在
- Zookeeper实例原生API--检查节点是否存在
- 检查进程是否存在
- MFC/C++检查文件是否存在
- 一个判断进程是否存在的shell
- SQL Server 2005 : 检查某个表是否存在的SQL语句
- 检查数据是否已经存在的存储过程!
- 在VC里如何检查一个文件是否存在