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
}

运行截图

最新文章

  1. 获取SQLSERVER所有库 所有表 所有列 所有字段信息
  2. 慕课网-安卓工程师初养成-6-5 使用循环操作 Java 中的数组
  3. U盘FAT32转换NTFS格式
  4. Python单步调试
  5. ORACLE 语句关联统计
  6. POJ 2828 Buy Tickets (线段树 单点更新 变形)
  7. FZU-竞技游戏
  8. 创建TabBar
  9. 跨域访问之CORS
  10. JDBC数据源 使用JNDI连接池实现数据库的连接
  11. springboot集合jpa使用
  12. json格式的中文输出显示
  13. BMP文件解析
  14. SOD框架的Model、连接数据库及增删改查
  15. 错误类型“Microsoft.Office.Interop.Word.ApplicationClass”未定义构造函数
  16. 我的互联网30年。永远的8U8 永远的Y365
  17. (惊艳)基于谷底最小值的阈值的图像分割(改进HSV中的H分量可以用imhist(H)提取)
  18. Java移动文件到另外一个目录
  19. TTFB
  20. redis 任务队列

热门文章

  1. JavaScript 数据类型检测总结
  2. MT【206】证明整数数列
  3. LOJ #6270. 数据结构板子题 (离线+树状数组)
  4. 姿态角(Euler角):yaw pitch roll
  5. 【转】 cJSON 源码解析
  6. easyui-treegrid的案例
  7. react组件在项目中的应用(基础知识)
  8. JasperReport 中踩过的坑
  9. mac subLime3 JSON 格式化插件安装
  10. 困惑2----(已经OK)