首页
论坛
专栏
课程

[求助]远程线程注入windows10 64位计算器失败

2020-3-25 21:28 768

[求助]远程线程注入windows10 64位计算器失败

2020-3-25 21:28
768
系统环境 :windows10 64位
我注入其它程序(如记事本)可以,注入计算器就失败。使用鬼手56大佬的也是注入失败。有没有大佬能给小弟解解惑
	// 1.打开目标进程
	HANDLE hProcess = OpenProcess(
		PROCESS_ALL_ACCESS,		// 打开权限
		FALSE,					// 是否继承
		dwProcessId);			// 进程PID
	if (NULL == hProcess)
	{
		MessageBox(L"打开目标进程失败!");
		return FALSE;
	}

	// 2.在目标进程中申请空间
	LPVOID lpPathAddr = VirtualAllocEx(
		hProcess,					// 目标进程句柄
		0,							// 指定申请地址
		strlen(pszDllFileName)+1,	// 申请空间大小
		MEM_RESERVE | MEM_COMMIT,	// 内存的状态
		PAGE_READWRITE);			// 内存属性
	if (NULL == lpPathAddr)
	{
		MessageBox(L"在目标进程中申请空间失败!");
		CloseHandle(hProcess);
		return FALSE;
	}

	// 3.在目标进程中写入Dll路径
	SIZE_T dwWriteSize = 0;
	if (FALSE == WriteProcessMemory(
		hProcess,					// 目标进程句柄
		lpPathAddr,					// 目标进程地址
		pszDllFileName,					// 写入的缓冲区
		strlen(pszDllFileName) + 1,	// 缓冲区大小
		&dwWriteSize))				// 实际写入大小
	{
		MessageBox(L"目标进程中写入Dll路径失败!");
		CloseHandle(hProcess);
		return FALSE;
	}

	//获取LoadLibraryA的函数地址
	//FARPROC可以自适应32位与64位
	FARPROC pFuncProcAddr = GetProcAddress(GetModuleHandle((LPCWSTR)L"kernel32.dll"),"LoadLibraryA");
	if (NULL == pFuncProcAddr)
	{
		MessageBox(L"获取LoadLibrary函数地址失败!");
		CloseHandle(hProcess);
		return FALSE;
	}

	// 4.在目标进程中创建线程
	HANDLE hThread = CreateRemoteThread(
		hProcess,					// 目标进程句柄
		NULL,						// 安全属性
		NULL,						// 栈大小
		(PTHREAD_START_ROUTINE)pFuncProcAddr,	// 回调函数
		lpPathAddr,					// 回调函数参数
		NULL,						// 标志
		NULL						// 线程ID
	);
	if (NULL == hThread)
	{
		MessageBox(L"目标进程中创建线程失败!");
		CloseHandle(hProcess);
		return FALSE;
	}

	// 5.等待线程结束
	WaitForSingleObject(hThread, -1);

	// 6.清理环境
	VirtualFreeEx(hProcess, lpPathAddr, 0, MEM_RELEASE);
	CloseHandle(hThread);
	CloseHandle(hProcess);
	return TRUE;
}
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
	{
		MessageBox(NULL, L"远程线程注入成功!", L"提示", NULL);
		break;
	}
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}



2020安全开发者峰会(2020 SDC)议题征集 中国.北京 7月!

最后于 2020-3-25 21:50 被自己的小白编辑 ,原因:
最新回复 (19)
拍手笑沙鸥 2020-3-25 21:44
2
0
代码贴出来啊兄弟
自己的小白 2 2020-3-25 21:52
3
0
拍手笑沙鸥 代码贴出来啊兄弟
代码应该没有问题,记事本可以注入成功,win7 计算器也可以注入成功,就win10 计算器不知道为啥不行
Boring勇哥 2020-3-25 22:40
4
0
注入用的程序是64位吗?你的代码在我的系统上成功了...
自己的小白 2 2020-3-26 00:08
5
1
Boring勇哥 注入用的程序是64位吗?你的代码在我的系统上成功了...
是64位
Boring勇哥 2020-3-26 00:35
6
0
自己的小白 是64位
你可以把dll的名称改成ntdll,然后等待线程结束后读取线程的退出代码(也就是LoadLibraryA的返回值),看看是不是nullptr。这样可以排除注入程序的问题。
joker陈 2020-3-26 09:47
7
0
win10 64 进程名?calc?
自己的小白 2 2020-3-26 11:41
8
0
joker陈 win10 64 进程名?calc?
自己的小白 2 2020-3-26 11:41
9
0
Boring勇哥 你可以把dll的名称改成ntdll,然后等待线程结束后读取线程的退出代码(也就是LoadLibraryA的返回值),看看是不是nullptr。这样可以排除注入程序的问题。
我试试看,感谢
自己的小白 2 2020-3-26 12:10
10
0
Boring勇哥 你可以把dll的名称改成ntdll,然后等待线程结束后读取线程的退出代码(也就是LoadLibraryA的返回值),看看是不是nullptr。这样可以排除注入程序的问题。
我注入记事本退出代码就不是0,注入计算器退出代码就是0
killpy 2 2020-3-26 13:51
11
0
win10 各种奇葩的限制 ASLR  CFG GS保护 ACG CIG保护啊 还有在ETW新增加的一大坨监视 原先win7不监视的一些中断 页面 异常啊 键鼠啊 它都可以检测 默认开启的hypervistor啊  页面隔离补丁啊 各种细节 你都注意到了吗
最后于 2020-3-26 13:53 被killpy编辑 ,原因:
mlgbwoai 1 2020-3-26 14:25
12
0
low level原因吧?或许你dll打印调试信息是成功的
自己的小白 2 2020-3-26 15:54
13
0
killpy win10 各种奇葩的限制 ASLR  CFG GS保护 ACG CIG保护啊&nb ...
好多都不了解,学到了,感谢
自己的小白 2 2020-3-26 15:56
14
0
mlgbwoai low level原因吧?或许你dll打印调试信息是成功的
低权限吗,我提权了
mb_qmsimfgr 2020-3-26 23:06
15
0
我也没成功....你成功了么
自己的小白 2 2020-3-27 09:48
16
0
mb_qmsimfgr 我也没成功....你成功了么
没有,而且我试了试APC注入好像也不行
Boring勇哥 2020-3-27 10:53
17
0
楼主你的win10版本号多少我装个试试
自己的小白 2 2020-3-27 11:04
18
0
Boring勇哥 楼主你的win10版本号多少我装个试试
Boring勇哥 2020-3-27 19:40
19
0
我知道了。

如图,我用调试器附加在计算器上手动加载一个dll,失败了,LastError是ERROR_ACCESS_DENIED。
经查资料发现,计算器在win10系统中是 App Containor(类似于沙箱的虚拟环境) 应用程序 ,这种应用程序会受制于一个特殊的系统用户 "ALL APPLICATION PACKAGES",检查被加载的dll文件的访问控制列表可知,上述用户没有访问此文件的权限,故拒绝访问。
解决方案:如图,手动修改dll文件的访问控制列表,授予"ALL APPLICATION PACKAGES"读取和执行权限。

验证:

加载成功。理论上远程线程也会加载成功。
自己的小白 2 2020-3-28 11:04
20
0
感谢,学到了
游客
登录 | 注册 方可回帖
返回