【API】检查进程是否存在 - CreateToolhelp32Snapshot
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
}
运行截图

【API】检查进程是否存在 - CreateToolhelp32Snapshot的更多相关文章
- Unix系统编程()检查进程的存在
检查进程的存在 kill系统调用还有另一重功用.若将参数sig指定为0(即所谓空信号),则无信号发送. 相反,kill仅会去执行错误检查,查看是否可以向目标进程发送信号. 从另一角度来看,这意味着,可 ...
- 使用Native API 创建进程
使用 Native API 创建进程 最近几个星期一直在研究这个题目.因为关于方面的资料比较多(可以看下面的参考文章),所以开始时以为很快就结束了.谁知道真正动起手来才发现有很多要考虑的地方,不过还好 ...
- 拦截API 注入进程
本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...
- 检查进程启动情况,开始时间、启动时间、启动进程数、进程数是否正确、PID
#!/bin/sh bin=$(cd ``;pwd) cd ${bin} ### 定义检查函数 chk(){ programName=$ correctNum=$ programSubName=$ # ...
- Android开发-API指南-进程与线程
Processes and Threads 英文原文:http://developer.android.com/guide/components/processes-and-threads.html ...
- check if a linux process is done using bash 检查进程是否在运行
# cat > check_process_is_end.sh while truedo sleep 30 # seconds res=`ps -ef | grep RNAhybrid` ...
- Android Api 检查參数状态Api
转载请注明出处:http://blog.csdn.net/droyon/article/details/39938677 在进行Android应用程序开发中,android提供了一个非常好的工具类,来 ...
- 微信小程序API~检查登录状态
wx.checkSession(Object object) 检查登录态是否过期. 通过 wx.login 接口获得的用户登录态拥有一定的时效性.用户越久未使用小程序,用户登录态越有可能失效.反之如果 ...
- java 检查进程是否存在
以nginx进程为例子 private final static String NAME_STRING = "nginx.exe"; //传入进程名称processName pub ...
随机推荐
- MT【68】一边柯西一边舍弃
求$\sqrt{x-5}+\sqrt{24-3x}$的最值. 通常考试时会考你求最大值,常见的方式有三角代换,这里给如下做法: 证明:$\sqrt{x-5}+\sqrt{24-3x}=\sqrt{x- ...
- 让一个继承unittest.TestCase的类下的setUp和tearDown只执行一次
知道unittest单元测试框架的朋友应该都知道, 执行继承了unittest.TestCase的类下每个test开头的方法(就是用例)时,都会执行setUp和tearDown,如下面的例子所示: i ...
- python 忽略警告
import warningswarnings.filterwarnings("ignore")看起来整洁一点...
- 用selenium获取cookies
前言:由于登录反爬措施的越来越麻烦,甚至出现了12306这种看图识物的无敌验证码,我只能说,我选择死亡.这就衍生出了使用selenium来获取获取cookies. 实例:获取qq空间cookies,亲 ...
- UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There W ...
- MIME 类型(HttpContext.Response.ContentType)列表
按照内容类型排列的 Mime 类型列表 类型/子类型 扩展名 application/envoy evy application/fractals fif application/futurespla ...
- 斯坦福大学公开课机器学习:监督学习在行人检测的应用(supervised learning for pedestrian detection)
对于下图,左边是行人,作为阳性例子,赋值y=1,右边是景物,作为阴性例子,赋值y=0; 步长概念: 如下图所示,步长表示绿色框框移动的距离,有时候也称为滑动参数stride,如果一次移动一个像素,则称 ...
- mysql 多表管理修改
update t_res_ys,cms_article_data,cms_article set cms_article_data.jsdata=t_res_ys.jsdata ,cms_articl ...
- WCF开发实战系列四:使用Windows服务发布WCF服务
WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...
- Eclipse鼠标点击变量高亮显示时好时坏的BUG
Eclipse有一个BUG,就是鼠标点击某个变量会高亮显示所有这个变量 会有时高亮有时不高亮,修复这个BUG就是替换Eclipse 安装目录plugins目录下的org.eclipse.e4.ui.w ...