首页
社区
课程
招聘
打造属于自己的任务管理器
发表于: 2009-12-3 16:41 25020

打造属于自己的任务管理器

2009-12-3 16:41
25020

【文章标题】: 打造属于自己的任务管理器
【文章作者】: SniperChan
【作者邮箱】: SniperChan@126.com
【编写语言】: VC
【使用工具】: VS.NET 2008 SP1
【操作平台】: XP SP3
【作者声明】: 软件可以任意修改和传播

     HANDLE CreateRomoteThread(
                    HANDLE hProcess                                        //目标进程句柄
             PSECURITY_ATTRIBUTES psa,                      //指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。
             DWORD dwStackSize,                                  //线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。
             PTHREAD_START_ROUTINE pfnstartAddr,    //指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:DWORD WINAPI ThreadProc (LPVOID pParam) ,格式不正确将无法调用成功。 
             PVOID pvParam,                                          //向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
             DWORD fdwCreate,                                     //线程标志
             PDWORD pdwThreadId                                //保存新线程的id。
             );
HANDLE LoadLibrary(PCTSTR pszLibFile)
HANDLE hThreadd = CreateRemoteThread(hProcessRemote,NULL,0,LoadLibrary,"E:\\MyLib.dll",0,NULL);
PTHREAD_START_ROUTINE pfnThreadRtn =(PTHREAD_START_ROUTINE )GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibrary");

HANDLE hThread = CreateRemoteThread(hProcessRemote,NULL,0,pfnThreadRtn ,"E:\\MyLib.dll",0,NULL);
  LPVOID VirtualAllocEx( 
  HANDLE hProcess, //申请内存所在的进程句柄。
  LPVOID lpAddress, //保留页面的内存地址;一般用NULL自动分配 。
  SIZE_T dwSize, //欲分配的内存大小,字节单位;注意实际分 配的内存大小是页内存大小的整数倍
  DWORD flAllocationType, //可取下列值MEM_PHYSICAL ,MEM_RESERVE,MEM_RESET ,MEM_TOP_DOWN,MEM_WRITE_WATCH
  DWORD flProtect //可取下列值PAGE_READONLY,PAGE_EXECUTE,PAGE_EXECUTE_READ ,PAGE_EXECUTE_READWRITE,PAGE_GUARD,PAGE_NOACCESS,PAGE_NOCACHE
  ); 
BOOL VirtualFreeEx(
  HANDLE hProcess, // 要释放内存所在进程的句柄
  LPVOID lpAddress, // 区域地址
  DWORD dwSize, // 区域大小,字节
  DWORD dwFreeType //类型
  );
BOOL ReadProcessMemory( 
  HANDLE hProcess,// 远程进程句柄
  LPCVOID lpBaseAddress, //远程进程中内存地址
  LPVOID lpBuffer, //本地进程中内存地址. 函数将读取的内容写入此处
  DWORD nSize,// 要传送的字节数
  LPDWORD lpNumberOfBytesRead //实际传送的字节数. 函数返回时报告实际写入多少
  );

  BOOL WriteProcessMemory( 
  HANDLE hProcess, 
  LPVOID lpBaseAddress, 
  LPVOID lpBuffer, 
  DWORD nSize, 
  LPDWORD lpNumberOfBytesWritten 
  );
 
BOOL Inject(DWORD dwProcessId/*进程ID*/, PCWSTR pszLibFile/*DLL路径和名称*/)
{
	BOOL bOk = FALSE; 
	HANDLE hProcess = NULL, hThread = NULL;
	PWSTR pszLibFileRemote = NULL;

	__try {
		// 获取目标进程的句柄
		hProcess = OpenProcess(
			PROCESS_QUERY_INFORMATION |   // Required by Alpha
			PROCESS_CREATE_THREAD     |   // For CreateRemoteThread
			PROCESS_VM_OPERATION      |   // For VirtualAllocEx/VirtualFreeEx
			PROCESS_VM_WRITE,             // For WriteProcessMemory
			FALSE, dwProcessId);
		if (hProcess == NULL) __leave;

		// 计算DLL路径的长度
		int cch = 1 + lstrlenW(pszLibFile);
		int cb  = cch * sizeof(wchar_t);

		//在远程进程为DLL的名字和路径分配内存
		pszLibFileRemote = (PWSTR) 
			VirtualAllocEx(hProcess, NULL, cb, MEM_COMMIT, PAGE_READWRITE);
		if (pszLibFileRemote == NULL) __leave;

		//把路径复制的远程进程的内存中
		if (!WriteProcessMemory(hProcess, pszLibFileRemote, 
			(PVOID) pszLibFile, cb, NULL)) __leave;

		//获取LoadLibraryW 在Kernel32.dll中的实际内存地址
		PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)
			GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");
		if (pfnThreadRtn == NULL) __leave;


		//创建远程线程
		hThread = CreateRemoteThread(hProcess, NULL, 0, 
			pfnThreadRtn, pszLibFileRemote, 0, NULL);
		if (hThread == NULL) __leave;

		// 等待线程结束
		WaitForSingleObject(hThread, INFINITE);

		bOk = TRUE; 
	}
	__finally { 

		// 释放内存
		if (pszLibFileRemote != NULL) 
			VirtualFreeEx(hProcess, pszLibFileRemote, 0, MEM_RELEASE);

		if (hThread  != NULL) 
			CloseHandle(hThread);

		if (hProcess != NULL) 
			CloseHandle(hProcess);
	}

	return(bOk);
}

BOOL EnumChildWindows(HWND hWndParent,WNDENUMPROC lpEnumFunc, LPARAM lParam);
  HWND hWndParent, //父窗口句柄
  WNDENUMPROC lpEnumFunc, // 回调函数的地址
  LPARAM lParam//你自已定义的参数
HANDLE hwndTaskManager = FindWindow( (LPCTSTR)32770, L"Windows 任务管理器");

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (158)
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很好,顶了再看!
2009-12-3 17:01
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
及时来到,顶!!
2009-12-3 17:03
0
雪    币: 287
活跃值: (18)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
沙发自己坐
2009-12-3 17:07
0
雪    币: 160
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
太强大了。支持!
2009-12-3 17:09
0
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
6
写得非常棒 值得学习
感谢SniperChan的分享
2009-12-3 17:17
0
雪    币: 1933
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
真的是天书了,看不懂
2009-12-3 17:21
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢楼主,高手越来越多了
2009-12-3 17:22
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
9
这东西好玩,支持一下
2009-12-3 17:24
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
只用过vs.net 用C#
没想到用VC也这么牛。
2009-12-3 17:26
0
雪    币: 29
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
很好很强大!!学习了
2009-12-3 17:38
0
雪    币: 99
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
有牛人就是好!!多多学习
2009-12-3 17:53
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习哦。只用过vc6.0,没用过VS.NET 2008 SP1,不知道怎么使用。
2009-12-3 18:24
0
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
在windows7里永远都是 0 用的是哪个附件里的EXE  我不会
2009-12-3 18:37
0
雪    币: 6
活跃值: (871)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
加油
希望你能博君一笑
2009-12-3 19:03
0
雪    币: 287
活跃值: (18)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
跟vc6.0差不多的,都是微软的东西,我没有vc6,不能编译这个版本的程序
2009-12-3 19:41
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
牛人。。。鼓掌鼓掌
2009-12-3 22:19
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
厉害,顶!顶!
2009-12-3 22:45
0
雪    币: 83
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
很强大啊!真的很强大
2009-12-3 23:20
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
必须顶,做个记号,以后仔细拜读。
2009-12-3 23:40
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
厉害哦。。。大大
2009-12-4 09:33
0
雪    币: 287
活跃值: (18)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
谢谢大家的支持
2009-12-4 09:51
0
雪    币: 76
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
太强大了。支持!
2009-12-4 11:19
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
呵呵。这个很经典。确实很不错
2009-12-4 12:34
0
雪    币: 174
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
看不懂,但功能挺实用,支持一下!!
2009-12-4 12:43
0
游客
登录 | 注册 方可回帖
返回
//