首页 > 系统相关 >Windows黑客编程之功能技术(上)

Windows黑客编程之功能技术(上)

时间:2023-02-26 08:11:13浏览次数:49  
标签:遍历 快照 Windows me32 编程 黑客 printf HANDLE bRet

描述

  • 利用进程快照CreateToolhelp32Snapshot,进行进程、线程、进程模块的遍历
  • 利用FindFirstFileFindNextFile,进行文件目录的遍历

进程快照的遍历

遍历进程

BOOL EnumProcess()
{
	PROCESSENTRY32 pe32 = { 0 };
	pe32.dwSize = sizeof(PROCESSENTRY32);
	// 获取全部进程快照
	HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (INVALID_HANDLE_VALUE == hProcessSnap)
	{
		ShowError("CreateToolhelp32Snapshot");
		return FALSE;
	}

	// 获取快照中第一条信息
	BOOL bRet = ::Process32First(hProcessSnap, &pe32);
	while (bRet)
	{
		// 显示 Process ID
		printf("[%d]\t", pe32.th32ProcessID);

		// 显示 进程名称
		printf("[%s]\n", pe32.szExeFile);

		// 获取快照中下一条信息
		bRet = ::Process32Next(hProcessSnap, &pe32);
	}

	// 关闭句柄
	::CloseHandle(hProcessSnap);

	return TRUE;
}

遍历线程

OOL EnumThread()
{
	THREADENTRY32 te32 = { 0 };
	te32.dwSize = sizeof(THREADENTRY32);
	// 获取全部线程快照
	HANDLE hThreadSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
	if (INVALID_HANDLE_VALUE == hThreadSnap)
	{
		ShowError("CreateToolhelp32Snapshot");
		return FALSE;
	}

	// 获取快照中第一条信息
	BOOL bRet = ::Thread32First(hThreadSnap, &te32); 
	while (bRet)
	{
		// 显示 Owner Process ID
		printf("[%d]\t", te32.th32OwnerProcessID);

		// 显示 Thread ID
		printf("[%d]\n", te32.th32ThreadID);

		// 获取快照中下一条信息
		bRet = ::Thread32Next(hThreadSnap, &te32);
	}

	// 关闭句柄
	::CloseHandle(hThreadSnap);

	return TRUE;
}

遍历进程模块

BOOL EnumProcessModule(DWORD dwProcessId)
{
	MODULEENTRY32 me32 = { 0 };
	me32.dwSize = sizeof(MODULEENTRY32);
	// 获取指定进程全部模块的快照
	HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId);
	if (INVALID_HANDLE_VALUE == hModuleSnap)
	{
		ShowError("CreateToolhelp32Snapshot");
		return FALSE;
	}

	// 获取快照中第一条信息
	BOOL bRet = ::Module32First(hModuleSnap, &me32);
	while (bRet)
	{
		// 显示 Process ID
		printf("[%d]\t", me32.th32ProcessID);

		// 显示 模块加载基址
		printf("[0x%p]\t", me32.modBaseAddr);

		// 显示 模块名称
		printf("[%s]\n", me32.szModule);

		// 获取快照中下一条信息
		bRet = ::Module32Next(hModuleSnap, &me32);
	}

	// 关闭句柄
	::CloseHandle(hModuleSnap);

	return TRUE;
}

文件遍历

  • 利用递归来遍历文件目录,注意要过滤当前目录和上层目录
#include "stdafx.h"
#include "FileSearch.h"


void SearchFile(char *pszDirectory)
{
	// 搜索指定类型文件
	DWORD dwBufferSize = 2048;
	char *pszFileName = NULL;
	char *pTempSrc = NULL;
	WIN32_FIND_DATA FileData = {0};
	BOOL bRet = FALSE;
	
	// 申请动态内存
	pszFileName = new char[dwBufferSize];
	pTempSrc = new char[dwBufferSize];
	
	// 构造搜索文件类型字符串, *.*表示搜索所有文件类型
	::wsprintf(pszFileName, "%s\\*.*", pszDirectory);

	// 搜索第一个文件
	HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);
	if (INVALID_HANDLE_VALUE != hFile)
	{
		do
		{
			// 要过滤掉 当前目录"." 和 上一层目录"..", 否则会不断进入死循环遍历
			if ('.' == FileData.cFileName[0])
			{
				continue;  
			}
			// 拼接文件路径	
			::wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName);
			// 判断是否是目录还是文件
			if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)        
			{
				// 目录, 则继续往下递归遍历文件
				SearchFile(pTempSrc);
			}
			else                                                            
			{
				// 文件
				printf("%s\n", pTempSrc);
			}

		    // 搜索下一个文件
		} while (::FindNextFile(hFile, &FileData));
	}

	// 关闭文件句柄
	::FindClose(hFile);
	// 释放内存
	delete []pTempSrc;
	pTempSrc = NULL;
	delete []pszFileName;
	pszFileName = NULL;
}

标签:遍历,快照,Windows,me32,编程,黑客,printf,HANDLE,bRet
From: https://www.cnblogs.com/z5onk0/p/17156093.html

相关文章

  • 计算机编程语言概述
    计算机语言是什么语言:是人与人之间用于沟通的一种方式。例如:中国人与中国人用普通话沟通。而中国人要和英国人交流,可以使用英语或普通话。计算机编程语言:就是人与计算机......
  • windows查看快捷键冲突-OpenArk
    1、下载链接OpenArk2、下载后->选择内核->系统热键->进入内核模式->即可查看到所有快捷键通过过滤器可以快速查看快捷键占用情况3、测试图......
  • 没有“Windows 沙盒”选项
    首先,Windows家庭版当前暂不支持Windows沙盒! 解决方法:http://www.studyofnet.com/698821509.html外网原文:https://www.deskmodder.de/blog/2019/04/20/windows-10-h......
  • Windows中使用wsl之后文件名大小写不敏感导致的问题
    Windows中使用wsl之后文件名大小写不敏感导致的问题现象最近使用WSL中的CentOS作为c++的编译和开发环境,有个地方一直编译失败,报如下错误:make[2]:***Noruletomaket......
  • 【编程入门】应用市场(php版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。让想学编程的,一个都不落下。上述基本涵盖了当前编程开发所有主流语言。左侧为前端版本:安卓、iOS、鸿蒙......
  • PHP Windows 下 XAMPP 的 xdebug 配置
    在IntelliJ下调试PHP的断点有时候还是比较困惑的。同时根据你使用的xdebug配置也有关系。xdebug2.x下面的配置是xdebugVersion2的配置,如果你使用xdebug3.......
  • 编程语言学习攻略
    程序设计语言的构成语言的种类千差万别,但是,一般来说,基本成分不外四种:1.数据成分,用以描述程序中所涉及的数据;2.运算成分,用以描述程序中所包含的运算;3.控制成分,用以表......
  • Windows中缺少atl100.dll的解决方法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损......
  • Windows黑客编程之dll劫持
    描述伪造dll,篡改里面的导出函数,替换原来的dll,进程将会加载伪造的dll,执行dllmain中的恶意代码以及调用篡改后的函数知识由于PE文件输入表中只包含dll名而没有路径,因此......
  • Windows黑客编程之进程隐藏
    描述通过hookZwQuerySystemInformation函数,改变其返回值结果,在taskmanager、procexp等进程管理器内隐藏目标进程知识点dll注入:通过在prcexp等进程内注入dll,执行代......