首页
社区
课程
招聘
[原创]Azure's Process Viewer src&bin
发表于: 2009-1-22 12:16 11323

[原创]Azure's Process Viewer src&bin

2009-1-22 12:16
11323
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
不断学习,不断进步。

比我当年学MFC时写的程序好多了。呵呵
2009-1-22 12:24
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
呵呵
看到LzOpenProcess~~

所以rku的路径显示不出来~

然后。。。枚举模块的你可以改进一下~

楼主加油。
2009-1-22 12:31
0
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看看,谢谢分享!
2009-1-22 12:58
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
5
嗯……都是公开的方法嘛……只是学习学习……
2009-1-22 12:58
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
6
有强大的ntdll.h不用,居然用CToolhelp,无语!
2009-1-22 13:16
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
7
直接用网上找来的Ntdll.h编译它提示错误,囧
2009-1-22 13:36
0
雪    币: 411
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错。学习。谢谢楼主的开源。
2009-1-22 14:14
0
雪    币: 371
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyp
9
不错不错 正好给我们这种小菜学习
2009-1-22 17:35
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢分享
正在看这方面的东西
2009-1-22 18:47
0
雪    币: 214
活跃值: (24)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
BOOL FastScanProcess( SCAN_PROCESS_LIST & process_list )
{

	SCAN_PROCESS_MAP process_map;

	PBYTE pBuffer = NULL ;
	NTSTATUS status;
	
	ULONG dwCurSize = sizeof( SYSTEM_HANDLE_INFORMATION ) + 4;
	ULONG dwNeedSize = 0;

	ULONG EProcess;
	

	while( TRUE ){

		pBuffer = new BYTE[ dwCurSize ];

		status = ZwQuerySystemInformation( SystemHandleInformation,
		                                   pBuffer,
										   dwCurSize,
										   &dwNeedSize );

		if( NT_SUCCESS( status ) )
			break;

		delete[] pBuffer;


		if( status != STATUS_INFO_LENGTH_MISMATCH ){

			return FALSE;
		}

		dwCurSize *= 2;
				
	}

	

	if( NT_SUCCESS( status ) ){
		

		PSYSTEM_HANDLE_INFORMATION phi = ( PSYSTEM_HANDLE_INFORMATION )( pBuffer + 4 );

		for( ULONG i = 0; i < *(ULONG*)pBuffer; i++ ){

			if( phi[i].ObjectTypeNumber == OB_TYPE_PROCESS ){

				if( process_map[ (ULONG)phi[i].Object ] == NULL ){

					ProcessInfoPtr pi;

					pi.CreateInstance();

					if( GetProcessInfo( (ULONG)phi[i].Object,pi ) ){

						process_map[ (ULONG)phi[i].Object ] = pi;

						process_list.push_back( pi );
					}


				}
				
			}else if( phi[i].ObjectTypeNumber == OB_TYPE_THREAD ){

				EProcess = GetEProcessFromThread( (ULONG)phi[i].Object );

				if( EProcess ){

					if( process_map[ EProcess ] == NULL ){

						ProcessInfoPtr pi;

						pi.CreateInstance();

						if( GetProcessInfo( EProcess,pi ) ){

							process_map[ EProcess ] = pi;

							process_list.push_back( pi );
						}


					}

				}

			}


		}

	}

	delete[] pBuffer;	

	return TRUE;

}

DWORD WINAPI DeepScanProcess( LPVOID lp )
{
	g_bProcessScanning = TRUE;

	g_scan_process_list.clear();

	ULONG SystemProcess,ProcessType,PebMask;


	__try
	{
		SystemProcess = GetSystemEprocess();

		if( SystemProcess == 0 )
			__leave;

		ProcessType = GetProcessType( SystemProcess );
		PebMask = GetPebMask();

		ULONG CurrentAddress;

		BYTE pBuffer[4096];

		for( ULONG WalkAddress = SystemProcess - 0x03000000; WalkAddress < SystemProcess; WalkAddress += 4096 ){

			if( ReadSysMemory( (PVOID)WalkAddress,pBuffer,sizeof(pBuffer) ) ){

				for( ULONG i = 0; i < 4092; i++ ){

					if( ( ( *(ULONG*)&pBuffer[i] ) & 0xFFFF0000 ) ==  PebMask ){

						CurrentAddress = WalkAddress + i - 0x1b0;

						if( IsValidProcess( ProcessType, CurrentAddress ) ){
							InsertProcessToList( CurrentAddress );
						}

					}
				}

			}

		}



	}
	__finally
	{
	}

	InsertProcessToList( SystemProcess );

	g_bProcessScanning = FALSE;

	return 0;
}

嘿嘿!
2009-1-22 19:23
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
12
嗯……问下ls,GetSystemEprocess得到的是PID为4的进程的Eprocess吗?
2009-1-23 08:01
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
在A用户下运行B用户的程序,如何关闭此进程?
就是在A用户下,利用右键中的打开方式-》选择B用户=》输入密码,然后打开程序。
在A用户下,如何用程序关闭此程序的进程?
TerminateProcess不能关闭
2009-1-23 11:21
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
很不错,谢谢楼主贡献
2009-1-23 11:23
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
请看下图








上传的附件:
2009-1-23 11:41
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
在A用户下运行B用户的程序,不能关闭此进程
2009-1-23 11:42
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
17
换一个ws的方法……找到窗体以后直接PostMessage如何?
呵呵……开个玩笑而已,可以把Ntdll卸掉,他自己就崩了……
很显然……根据跟踪发现我程序在执行
ZwAssignProcessToJobObject(hJob, hProcess);
出问题了……所以就结束不掉了……
返回的是STATUS_ACCESS_DENIED
好像访问违规了……汗
所以把那个AzKillProc改一下,加一个TerminateProcess(hProcess,0);就可以了……顺便说一下……你不能用TerminateProcess可能是你的句柄权限不够
2009-1-23 17:19
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
yangjt 再把程序改一下,重传一下
2009-1-23 18:04
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
19
额……现在不在自己家里啊……没有VC的编译器啊……其实在ZwClose前加一句就可以哒
TerminateProcess(hProcess,0);
2009-1-23 18:46
0
雪    币: 203
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
谢谢。太好了。
2009-1-23 21:26
0
雪    币: 102
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
21
yangjt很慷慨。
2009-1-24 14:30
0
游客
登录 | 注册 方可回帖
返回
//