首页 > PE文件格式, Windows SDK > PE文件格式解析(四)——进程及模块显示

PE文件格式解析(四)——进程及模块显示

本文放在这个系列感觉有点不合适,不过在一般的PE编辑器都有这个功能,但是我写的只是简单的枚举模块,没有其他扩展功能。
到此,PE文件解析工具也基本完工了,要考试了,不打算继续拓展了。这些文章汇总地址如下:

第一篇——《神奇的栈溢出
第二篇——《PE文件格式解析(二)
第三篇——《PE文件格式解析(三)——导入表的解析
第四篇——《PE文件格式解析(四)——进程及模块显示

这里显示进程列表以及模块列表用到的API是CreateToolhelp32Snapshot、Process32First、Process32Next、Module32First、Module32Next等系列函数。另外系统进程以及一些安全软件的进程可能不能解析模块列表,应该是弄了HOOK吧。提升进程权限可以解析部分系统进程的模块列表。就发一下提升权限的代码吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
BOOL EnableDebugPrivilege()
{
	HANDLE hToken = NULL;
	BOOL bRst = OpenProcessToken(
		GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken);
	if (!bRst)
		return FALSE;
 
	TOKEN_PRIVILEGES tknPri = {0};
	tknPri.PrivilegeCount = 1;
	bRst = LookupPrivilegeValue(
		NULL, SE_DEBUG_NAME, &tknPri.Privileges[0].Luid);
	if (!bRst)
	{
		CloseHandle(hToken);
		return FALSE;
	}
 
	tknPri.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
	bRst = AdjustTokenPrivileges(
		hToken, FALSE, &tknPri, 
		sizeof(TOKEN_PRIVILEGES), NULL, NULL);
	if (!bRst)
	{
		CloseHandle(hToken);
		return FALSE;
	}
 
	DWORD dwRst = GetLastError();
	if (ERROR_SUCCESS != dwRst)
	{
		CloseHandle(hToken);
		return FALSE;
	}
 
	CloseHandle(hToken);
	return TRUE;
}

进程以及模块查看的实现


觉得文章还不错?点击此处对作者进行打赏!


本文地址: 程序人生 >> PE文件格式解析(四)——进程及模块显示
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!


更多



  1. 2011年4月18日19:44 | #1

    咕~~(╯﹏╰)b,你这学习速度太神速了。继续加油,呵呵

    [回复]

  2. 2011年4月19日13:29 | #2

    @the5fire的技术博客
    呵呵,也不是吧,这个有的以前写过。一起继续加油吧

    [回复]