首页
社区
课程
招聘
未解决 [求助]解决在Win10x64下面傀儡进程无法调起的问题 300.00雪花
发表于: 2019-7-27 06:24 11107

未解决 [求助]解决在Win10x64下面傀儡进程无法调起的问题 300.00雪花

2019-7-27 06:24
11107
感谢下面大神sudozhange的贴子
https://bbs.pediy.com/thread-224706.htm
我从github上面下载项目编译正常。但如果用系统进程类似svchost 做为傀儡进程则无法调起我的进程。
出错提示如下:

多运行几次有时候可以跳过这里,会报另外的错误:

搞了几个通宵了,没有头绪了,还请大家帮忙找一下问题。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 230
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶上去,别沉了
2019-7-29 02:26
0
雪    币: 6064
活跃值: (12624)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
3
这个钱,帮你顶顶
2019-7-29 08:09
0
雪    币: 285
活跃值: (1095)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
4
1、错误码487的问题:导致这个错误码出现的原因,是使用VirtualAlloc函数时,指定地址后预留的空间不足,比如我想在a地址后分配8M内存,而a地址后,只有4M就对造成该错误。你可以尝试使用while循环,判断函数返回值,如果第一次申请失败,第二次申请时,更换申请的地址。
2、0xc0000142的问题:该项目我在当时使用的也是Win 10 x64下编写的,我不确定是否和字符编码有关设置或者说与编译的程序有关,如果有虚拟机条件的话,可以尝试在虚拟机中运行,我这里缺少vc库,运行失败了,你的vs版本应该是2015之后的。你可以看下该问题在其他软件中的解决方式(Google错误码)。
2019-7-29 09:32
0
雪    币: 198
活跃值: (81)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
地址无效 看看VirtualAllocEx那个参数是否有效 应该是PEB根本不让你去开辟 可以试试把第二个参数置NULL 然后再一步定位问题,检查你的地址
2019-7-29 11:07
0
雪    币: 3710
活跃值: (2669)
能力值: ( LV7,RANK:105 )
在线值:
发帖
回帖
粉丝
6
handeliang 顶上去,别沉了
搞定了吗?
2019-8-6 23:24
0
雪    币: 230
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
yegu 搞定了吗?
没有搞定。
2019-8-7 15:00
0
雪    币: 230
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
黑白条纹 地址无效 看看VirtualAllocEx那个参数是否有效 应该是PEB根本不让你去开辟 可以试试把第二个参数置NULL 然后再一步定位问题,检查你的地址
试过改成NULL,程序一样的跑不起的
2019-8-7 15:01
0
雪    币: 230
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
sudozhange 1、错误码487的问题:导致这个错误码出现的原因,是使用VirtualAlloc函数时,指定地址后预留的空间不足,比如我想在a地址后分配8M内存,而a地址后,只有4M就对造成该错误。你可以尝试使用wh ...
我的IDE环境是Win10 1903 x64 + VS2013,用while可以解决487错误,但会出现Write Headers Error. 程序仍然跑不起来。
2019-8-7 15:07
0
雪    币: 285
活跃值: (1095)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
10
handeliang 我的IDE环境是Win10 1903 x64 + VS2013,用while可以解决487错误,但会出现Write Headers Error. 程序仍然跑不起来。
这个错误提示应该是程序内部我自己写的,你可以看下提示附近的判断的代码
2019-8-8 10:37
0
雪    币: 1277
活跃值: (10)
能力值: ( LV8,RANK:126 )
在线值:
发帖
回帖
粉丝
11
0xc0000142这个是子系统问题,svchost是win32的。如果你用的是console程序,你可以试试win32的。
2019-8-8 10:57
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
NtUnmapViewSection注释掉,不要卸载进程的原内存,直接申请一段随机地址的内存,然后修复重定位,重置基址和入口点
2019-11-11 08:21
0
雪    币: 3181
活跃值: (1801)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
laassue NtUnmapViewSection注释掉,不要卸载进程的原内存,直接申请一段随机地址的内存,然后修复重定位,重置基址和入口点
正解
2019-11-11 10:07
0
雪    币: 0
活跃值: (306)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
和你一样的问题,在win7下一切正常,在win10上就会出现487错误。 请问你解决了吗?
2020-4-13 02:03
0
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
有点意思
2020-4-13 08:00
0
雪    币: 189
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
int  WINAPI TestFunc()//程序真实入口
{
	
	return 1;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	wchar_t wszIePath[] = L"mstsc.exe";//傀儡进程路径
	STARTUPINFOW StartupInfo = { 0 };
	StartupInfo.cb = sizeof(StartupInfo);
	PROCESS_INFORMATION ProcessInformation{ 0 };
	CreateProcessW(NULL, wszIePath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &StartupInfo, &ProcessInformation);

	CONTEXT ThreadCxt;
	ThreadCxt.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
	GetThreadContext(ProcessInformation.hThread, &ThreadCxt);

	HMODULE hModuleBase = GetModuleHandleA(NULL);
	PIMAGE_DOS_HEADER pDosHdr = (PIMAGE_DOS_HEADER)hModuleBase;
	PIMAGE_NT_HEADERS pNtHdr = (PIMAGE_NT_HEADERS)((uint64_t)hModuleBase + pDosHdr->e_lfanew);
	DWORD dwImageSize = pNtHdr->OptionalHeader.SizeOfImage;

	HMODULE OldModuleBase = 0;
	ReadProcessMemory(ProcessInformation.hProcess, (LPVOID)(ThreadCxt.Rdx + 0x10), &OldModuleBase, sizeof(OldModuleBase), NULL);
	typedef NTSTATUS(__stdcall *pfnZwUnmapViewOfSection)(IN HANDLE ProcessHandle, IN LPVOID BaseAddress);
	pfnZwUnmapViewOfSection ZwUnmapViewOfSection = (pfnZwUnmapViewOfSection)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwUnmapViewOfSection");
	ZwUnmapViewOfSection(ProcessInformation.hProcess, OldModuleBase);

	LPVOID lpAlloAddr = VirtualAllocEx(
		ProcessInformation.hProcess,	//需要在其中分配空间的进程的句柄.
		hModuleBase,	//想要获取的地址区域.
		dwImageSize,	//要分配的内存大小.
		MEM_RESERVE | MEM_COMMIT,//内存分配的类型
		PAGE_EXECUTE_READWRITE	 //内存页保护.
	);

	WriteProcessMemory(ProcessInformation.hProcess, hModuleBase, hModuleBase, dwImageSize, NULL);
	WriteProcessMemory(ProcessInformation.hProcess, (LPVOID)(ThreadCxt.Rdx + 0x10), &hModuleBase, sizeof(hModuleBase), NULL);
	ThreadCxt.ContextFlags = CONTEXT_FULL;
	ThreadCxt.Rcx = (DWORD64)TestFunc;
	SetThreadContext(ProcessInformation.hThread, &ThreadCxt);
	ResumeThread(ProcessInformation.hThread);
}

64位傀儡自运行 很多包含精髓 自用的 往楼主采纳 EXE使用 MT模式编译


 

2020-6-24 20:22
2
雪    币: 345
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
Niceto int  WINAPI TestFunc()//程序真实入口 { return 1; } int&n ...
太感谢了 ,学到这卡了几天了,感谢,感谢!
2021-2-18 18:30
0
雪    币: 205
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
x64系统下x86的loader启动x86的傀儡,需要用Wow64GetThreadContext,直接用GetThreadContext会取到错误的上下文,具体原因我也不知道
2021-3-8 11:13
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
马克一下 同遇到问题
2022-5-10 11:54
0
雪    币: 25
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
同样的问题,解决了吗?
2022-5-20 09:45
0
游客
登录 | 注册 方可回帖
返回
//