首页
社区
课程
招聘
不通过OpenProcess如何获取完整路径?
发表于: 2016-5-30 22:12 8588

不通过OpenProcess如何获取完整路径?

2016-5-30 22:12
8588
一个驱动外挂,已知文件名(A.exe),已知进程ID(ProcessID),
【Ring3层】如何最效率的、不通过OpenProcess方法,获取他的完整路径?大家帮忙支招

-----

感谢各位回帖,这里就不一一回复了,在这里补充下:
1.所谓tlhelp32 zw获取不了完整路径,获取的只是短文件名(A.exe);
2.所谓dll hook也是不能采用的方法,因为肯定会报毒;

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 1114
活跃值: (2094)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
枚举全盘文件 或者你大神过它驱动,要么从任务管理器跟他嘿嘿嘿
2016-6-5 20:03
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
方法烦烦烦烦烦烦烦烦烦
2016-6-6 17:52
0
雪    币: 41
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
通过EProcess
2016-6-7 21:38
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
说一个用驱动的方法(摘抄自https://www.0xaa55.com/forum.php?mod=viewthread&tid=1521&extra=page%3D1&page=1):
		PEPROCESS Process = NULL;
		if (NT_SUCCESS(PsLookupProcessByProcessId(ProcessId, &Process)))
		{
			KAPC_STATE KApc;
			KeStackAttachProcess((PRKPROCESS)Process, &KApc);
			status = GetCurrentProcessName(ProcessName);
			KeUnstackDetachProcess(&KApc);
			ObDereferenceObject(Process);
		}


NTSTATUS GetCurrentProcessName(PUNICODE_STRING ProcessName)
{
	NTSTATUS status = STATUS_UNSUCCESSFUL;
	PVOID ImageBase = PsGetProcessSectionBaseAddress(PsGetCurrentProcess());
	PVOID SectionName = ExAllocatePool(NonPagedPool, ProcessName->MaximumLength + sizeof(MEMORY_SECTION_NAME));
	if (!SectionName)
		return status;

	if (ImageBase && ZwQueryVirtualMemoryRoutine)
	{
		MEMORY_BASIC_INFORMATION BasicInfo;
		status = ZwQueryVirtualMemoryRoutine(NtCurrentProcess(), ImageBase, MemoryBasicInformation, &BasicInfo, sizeof(BasicInfo), NULL);
		if (NT_SUCCESS(status) && BasicInfo.Type == MEM_IMAGE)
		{
			status = ZwQueryVirtualMemoryRoutine(NtCurrentProcess(), ImageBase, MemorySectionName, SectionName, ProcessName->MaximumLength + sizeof(MEMORY_SECTION_NAME), NULL);
			if (NT_SUCCESS(status))
			{
				RtlCopyUnicodeString(ProcessName, &((PMEMORY_SECTION_NAME)SectionName)->SectionFileName);
				ExFreePool(SectionName);
				return STATUS_SUCCESS;
			}
		}
	}

	ExFreePool(SectionName);
	return status;
}


基本上过任何正常的SSDT HOOK和Object回调保护
2016-6-14 10:27
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
额,只限Ring3层,所以才棘手呢
2016-6-15 00:28
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
既然已经有了文件名称,那你就用ToolHelp32的方法来枚举进程啊,匹配一下PID不就行了
2016-6-15 03:42
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
8
用ZwQuerySystemInformation(SystemProcessInformation, 啊
PSYSTEM_PROCESS_INFORMATION里面不是有个UNICODE_STRING ImageName;吗

如果人家断链隐藏进程了你用ZwQuerySystemInformation枚举不到,那ring3就无解
2016-6-15 11:19
0
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
既然大门有守卫看守,没法硬闯进去,那就想办法正大光明进去。
------------------------------------------------------------------------
弄个dll想办法(DLL劫持、SetWindowsHookEx、AppInit_Dlls等等等)注入到进程进去,只要进去了,获取个全路径还是难事吗?最简单的如GetCommandLineW就行
2016-6-15 12:12
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
10
碰到那种勾自己LdrLoadDll拒绝加载dll的就无解了(大多数挂的作者应该不会这么做吧)
2016-6-16 10:59
0
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
即便拒绝也不敢随意乱拒绝吧
2016-6-16 11:37
0
游客
登录 | 注册 方可回帖
返回
//