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的更多相关文章

  1. Unix系统编程()检查进程的存在

    检查进程的存在 kill系统调用还有另一重功用.若将参数sig指定为0(即所谓空信号),则无信号发送. 相反,kill仅会去执行错误检查,查看是否可以向目标进程发送信号. 从另一角度来看,这意味着,可 ...

  2. 使用Native API 创建进程

    使用 Native API 创建进程 最近几个星期一直在研究这个题目.因为关于方面的资料比较多(可以看下面的参考文章),所以开始时以为很快就结束了.谁知道真正动起手来才发现有很多要考虑的地方,不过还好 ...

  3. 拦截API 注入进程

    本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...

  4. 检查进程启动情况,开始时间、启动时间、启动进程数、进程数是否正确、PID

    #!/bin/sh bin=$(cd ``;pwd) cd ${bin} ### 定义检查函数 chk(){ programName=$ correctNum=$ programSubName=$ # ...

  5. Android开发-API指南-进程与线程

    Processes and Threads 英文原文:http://developer.android.com/guide/components/processes-and-threads.html ...

  6. 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` ...

  7. Android Api 检查參数状态Api

    转载请注明出处:http://blog.csdn.net/droyon/article/details/39938677 在进行Android应用程序开发中,android提供了一个非常好的工具类,来 ...

  8. 微信小程序API~检查登录状态

    wx.checkSession(Object object) 检查登录态是否过期. 通过 wx.login 接口获得的用户登录态拥有一定的时效性.用户越久未使用小程序,用户登录态越有可能失效.反之如果 ...

  9. java 检查进程是否存在

    以nginx进程为例子 private final static String NAME_STRING = "nginx.exe"; //传入进程名称processName pub ...

随机推荐

  1. luogu2312 [NOIp2015]解方程 (秦九韶)

    秦九韶算法:多项式$a_0+a_1x+a_2x^2+...+a_nx^n=a_0+x(a_1+x(a_2+...+(xa_n))..)$,这样对于一个x,可以在O(n)求出结果 为了避免高精度,我们同 ...

  2. [HEOI2013]SAO ——计数问题

    题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...

  3. 使用React.cloneElement()给子组件传值

    React提供了一个克隆组件的API: React.cloneElement( element, [props], [...child] ) 可以利用该方法,给子组件传值,使用如下: class Pa ...

  4. MATLAB:增加噪声,同时多次叠加噪声图和原图以及求平均图像(imnoise,imadd函数)

    本次涉及了对原图像增加高斯噪声.多次叠加原图和高斯噪声图以及叠加后的平均图像. close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear all; clc; R ...

  5. 元组&哈希&字典

    1.元组(1)特性:不可变(不能修改.添加.删除),可以做切片 元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变(元组里套用列表,列表中的值可变)(2)功能: index count ...

  6. GO语言的进阶之路-初探GO语言

    GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难 ...

  7. Golang面向过程编程-函数

    Golang面向过程编程-函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是函数 简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的 ...

  8. python 压缩文件为zip后删除原文件

    压缩.log 文件为zip后删除原文件 需要注意:本人作为小白,该脚本需要和.log在一起,后面有时间需要改正. #!/usr/local/python/bin/python #-*-coding=u ...

  9. Nginx 403 forbidden多种原因及故障模拟重现

    访问Nginx出现状态码为403 forbidden原因及故障模拟 1) nginx配置文件里不配置默认首页参数或者首页文件在站点目录下没有 1 index index.php index.html  ...

  10. NPOI学习笔记

    NPOI最简单的创建一个Excel,并且在指定单元格内填写一些数据 HSSFWorkbook workbook = new HSSFWorkbook(file); ISheet sheet = wor ...