文章目录

  • 功能技术模块
    • 进程遍历
    • WIN API
      • CreateToolhelp32Snapshot
      • Process32First
      • PROCESS32Next
    • 编码实现
    • 运行效果图
    • 判断是否存在杀软
    • 运行效果

功能技术模块

病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如获取用户隐私的办公文件或是账号密码,或是控制肉鸡,或是进行加密磁盘文件然后进行勒索。

进程遍历

进程遍历指的是获取在计算机系统上运行的所有进程信息,包括用户进程和系统进程。通过获取进程信息,可以判断是否存在杀软进程,是否有可利用进程,是否运行在虚拟机中,甚至可以分析用户的工作环境等,所以获取系统进程信息是一种不可获取的标志性功能。

本文介绍应用最广泛的进程快照技术来实现进程的遍历

WIN API


CreateToolhelp32Snapshot

获取进程信息为指定的进程、进程使用的堆,模块,线程建立一个快照

函数声明:

HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD, dwFlags,
DWORD, th32ProcessID)

参数说明:

  • dwFlags:指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。
含义
TH32CS_INHERIT 声明快照句柄是可继承的
TH32CS_SNAPALL 在快照中包含系统中的所有进程和线程
TH32CS_SNAPHEAPLIST 在快照中包含th32ProcessID中指定进程的所有堆
TH32CS_SNAPMODULE 在快照中包含th32ProcessID中指定进程的所有模块
TH32CS_SNAPPROCESS 在快照中包含系统中的所有进程
TH32CS_SNAPTHREAD 在快照中包含系统中的所有线程
  • th32ProcessID:指定将要快照的进程ID,如果该参数为0,则表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下应该忽略该参数,快照所有进程。

返回值:

  • 执行成功,返回快照的句柄;
  • 执行失败,返回INVALID_HANDLE_VALUE;

Process32First

检索系统快照中遇到的第一个进程信息

函数声明:

BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe)

参数说明:

  • hSnapshot:处理快照句柄
  • lppe:指向PROCESSENTRY32结构的指针

返回值:

  • 执行成功,返回TRUE,表示进程列表的第一个条目已复制到缓冲区
  • 执行失败,返回FALSE,由GetLastError返回ERROR_NO_MORE_FILES错误值指示没有进程存在,或者快照不包含进程信息。

PROCESS32Next

检索系统快照中记录的下一个进程信息

函数原型:

BOOL WINAPI PROCESS32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe)

参数说明:

  • hSnapshot:快照句柄
  • lppe:指向PROCESSENTRY32结构的指针

返回值:

  • 如果进程列表的下一个条目已复制到缓冲区,则返回TRUE
  • 如果不存在任何进程或者快照不包含进程信息,则由GetLastError返回ERROR_NO_MORE_FILES错误值

编码实现

所谓快照,指的是过去某个时刻记录的计算机状态,包括进程,线程,堆等,系统的状态是在不断变化的,尤其是进行某些操作后。

快照一般用于恢复某个时间点的计算机状态,当你的系统出现某些错误后,就可以使用快照功能回滚当时的状态。例如:

  • windows系统中的还原点
  • VMware中的快照设置
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
#include <tlhelp32.h>BOOL Get_all_process()
{PROCESSENTRY32 pe32 = {};pe32.dwSize = sizeof(PROCESSENTRY32);HANDLE hprocessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hprocessSnap == INVALID_HANDLE_VALUE){printf("create snap error!\n");return FALSE;}BOOL bRet = Process32First(hprocessSnap, &pe32);while (bRet){printf("[%d]\t[%ws]\n", pe32.th32ProcessID, pe32.szExeFile);bRet = Process32Next(hprocessSnap, &pe32);}CloseHandle(hprocessSnap);return TRUE;
}int main()
{Get_all_process();return 0;
}

运行效果图

判断是否存在杀软

我们在获取进程列表后,是否可以更近一步,判断进程中是否存在杀软,得到明确信息后,更加方便我们的病毒进行决策

下面我们查询本机中的火绒和Defender的进程名称;

  • SecurityHealthSystray.exe(defender)
  • wsctrl.exe(火绒)
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
#include <tlhelp32.h>BOOL Get_all_process()
{WCHAR defen[2][30] = { L"SecurityHealthSystray.exe", L"wsctrl.exe" };PROCESSENTRY32 pe32 = {};pe32.dwSize = sizeof(PROCESSENTRY32);HANDLE hprocessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hprocessSnap == INVALID_HANDLE_VALUE){printf("create snap error!\n");return FALSE;}BOOL bRet = Process32First(hprocessSnap, &pe32);while (bRet){for (int i = 0; i < 2; ++i){if (wcscmp(defen[i], pe32.szExeFile) == 0){printf("%ws is exist\n", defen[i]);}}//printf("[%d]\t[%ws]\n", pe32.th32ProcessID, pe32.szExeFile);bRet = Process32Next(hprocessSnap, &pe32);}CloseHandle(hprocessSnap);return TRUE;
}int main()
{Get_all_process();return 0;
}

运行效果

可发现两个杀软进程系统都在运行中

windows黑客编程系列(六):进程遍历之查询系统是否运行杀软相关推荐

  1. windows黑客编程系列(四):修改注册表键值对之自启动

    文章目录 自启动技术 注册表 WINAPI介绍 RegOpenKeyEx函数 参数说明 返回值 RegSetValueEx 参数说明 返回值 编码 运行效果 自启动技术 对于一个病毒木马来说,重要的不 ...

  2. windows黑客编程系列(十一):按键记录

    文章目录 功能技术模块 按键记录 WINAPI RegisterRawInputDevices tagRAWINPUTDEVICE结构体 GetRawInputData 编码实现 功能技术模块 病毒木 ...

  3. windows黑客编程系列(九):使用ntdll.dll中并未公开的API进行压缩

    文章目录 压缩技术 利用WIN32自带API实现数据压缩 WIN API RtlGetCompressionWorkSpaceSize RtlCompressBuffer RtlDecompressB ...

  4. windows黑客编程系列(八):以固定频率获取屏幕截图

    文章目录 功能技术模块 桌面截屏 WIN API GetDC BitBlt ICONINFO结构体 编码实现 运行效果 功能技术模块 病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如获取用户隐 ...

  5. mfc编程vc6.0实现进程的创建和通信_免费送书:windows黑客编程技术详解

    01 书怎么送 点赞并留言,关注在下面的公众号后台回复「抽奖」,弹出小程序后点击参与. 开奖时间是 7 月 7 号 20:00 ,一定要留意微信消息,如果你中奖了,请尽快在中奖页面提交收件人信息并备注 ...

  6. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

  7. Windows黑客编程基础

    俗话说:"万事开头难",编程也不例外,初学者如何入门关键要有一份正确的理论作指 导,下面的这篇文章虽不能说是至理名言,但我相信通过作者细腻的分析.讲解和引导, 定能给初学者起到启蒙 ...

  8. (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单

    (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单 原文 (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu ...

  9. WCF编程系列(六)以编程方式配置终结点

    WCF编程系列(六)以编程方式配置终结点 示例一中我们的宿主程序非常简单:只是简单的实例化了一个ServiceHost对象,然后调用open方法来启动服务.而关于终结点的配置我们都是通过配置文件来完成 ...

  10. 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO

    <Windows核心编程系列>九谈谈同步设备IO与异步设备IO之同步设备IO 同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请 ...

最新文章

  1. VMware ESXi 中的 CentOS 硬盘扩容
  2. linux 磁盘管理上(分区操作,格式化文件,挂载和卸载)
  3. Lock wait timeout exceeded; try restarting......
  4. Hibernate懒/急加载示例
  5. eclipse 代码上传github 笔记
  6. AFNetworking 3.0源码阅读 - AFURLResponseSerialization
  7. 频繁模式增长Frequent-Pattern Growth(FP-Growth)
  8. Android ListView + ArrayAdapter、SimpleAdapter、BaseAdapter实现列表
  9. 怎样呵护友谊_呵护友谊需要学会尊重对方.PPT
  10. MyEclipse 使用文档
  11. 电脑wifi距离测试软件,wifi测速工具
  12. C#/.NET 通过代码一键清理IE缓存文件/强制重置IE设置
  13. 将ppt里的图片高分辨率保存的方法
  14. 一定要计算机专业才能进华为吗,想去华为一定要报考这三所大学
  15. 带你区分超键,候选键,主键
  16. 参考平面及其高度_遥感影像中建筑物平面及高度信息提取方法
  17. win10总是很快自动休眠怎么解决?
  18. Ubuntu输入正确密码,屏幕一闪,又回到登录界面
  19. linux I2C 驱动
  20. ERP系统有哪些品牌?

热门文章

  1. MySQL中emoji表情包的存储问题
  2. 1193 Eason
  3. android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)
  4. 雪夜拾到一部破旧的手机
  5. JAVA垃圾收集器之Parallel Scavenge收集器
  6. react-native 关闭黄色警告
  7. coc跑团san数值规则_【规则】克苏鲁coc跑团游戏术语/黑话,第三篇教学。
  8. hdu6638 Snowy Smile(线段树+最大子段和)
  9. HDU-6638 Snowy Smile 区间最大子段和
  10. Katalon Recorder安装及使用