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

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

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

-----

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

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 1119
活跃值: (2029)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
DiamondH 2016-6-5 20:03
2
0
枚举全盘文件 或者你大神过它驱动,要么从任务管理器跟他嘿嘿嘿
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木木的世界 2016-6-6 17:52
3
0
方法烦烦烦烦烦烦烦烦烦
雪    币: 41
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yifi 2016-6-7 21:38
4
0
通过EProcess
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2016-6-14 10:27
5
0
说一个用驱动的方法(摘抄自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回调保护
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
赵R天 2016-6-15 00:28
6
0
额,只限Ring3层,所以才棘手呢
雪    币: 606
活跃值: (608)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Morgion 1 2016-6-15 03:42
7
0
既然已经有了文件名称,那你就用ToolHelp32的方法来枚举进程啊,匹配一下PID不就行了
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2016-6-15 11:19
8
0
用ZwQuerySystemInformation(SystemProcessInformation, 啊
PSYSTEM_PROCESS_INFORMATION里面不是有个UNICODE_STRING ImageName;吗

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