首页
社区
课程
招聘
[求助]自己写了一份内存注入代码, 在目标进程开启线程后目标进程崩溃,若换成自己的进程就没事
发表于: 2017-12-18 02:23 4811

[求助]自己写了一份内存注入代码, 在目标进程开启线程后目标进程崩溃,若换成自己的进程就没事

2017-12-18 02:23
4811
// 获取进程句柄
	HANDLE hProcess = OnGetProcessHandle(GAME_WND_CLASS, GAME_WND_TITLE);
	if (NULL == hProcess)
	{
		return -1;
	}

	// 在目标进程分配空间
	LPVOID pvAddr = ::VirtualAllocEx(hProcess, (LPVOID)pOp->ImageBase, pOp->SizeOfImage, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if ((LPVOID)-1 == pvAddr)
	{
		return -1;    // 函数参数错误
	}
	// 如果在 ImageBase 的位置没有占到了空间, 那么则需要修复重定位表
	if (NULL == pvAddr)
	{
		printf("自分配并且修复重定位表\n");
		
		pvAddr = ::VirtualAllocEx(hProcess, NULL, pOp->SizeOfImage, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
		if (NULL == pvAddr)
		{
			return -1;
		}
		else
		{
			// 修复重定位表
			OnUpDataRelocation(&pcImageBuffer, &pvAddr, &pOp, (DWORD)((LPSTR)pvAddr - pOp->ImageBase));
		}
	}

	// 修复 IAT 表
	if (0 != OnUpDataIAT(&pcImageBuffer, &pOp))
	{
		return -1;
	}

	::WriteProcessMemory(hProcess, pvAddr, pcImageBuffer, pOp->SizeOfImage, NULL);

	// 保存 OEP 
	DWORD dwOEP = pOp->AddressOfEntryPoint;

	// 释放 ImageBuffer 的资源
	free(pcImageBuffer);
	pcImageBuffer = NULL;

	HANDLE hThread = ::CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)((LPSTR)pvAddr + dwOEP), NULL, 0, NULL);
	::WaitForSingleObject(hThread, INFINITE);

	// 释放目标进程虚拟空间
    ::VirtualFreeEx(hProcess, pvAddr, 0, MEM_RELEASE);

	::CloseHandle(hProcess);
以上代码是整个调用流程

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


这个 MyPeTools 是我自己写的, 如果我把目标进程设定为这个, 然后我重新生成一个默认的 win32 窗口程序, 然后往里面注入,可以弹出窗口, 并且目标进程也不会崩溃, 但是我换成“热血江湖”这一款游戏则就不行了, 只要代码执行完“CreateRemoteThread()” 游戏进程就崩掉了。求教各路大神帮忙看看,需要整个源代码可以加 QQ 3258286196 , 谢谢了, 可以请大佬抽烟。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 140
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
“热血江湖”有反注入手段?这些3层的函数早被人家盯得死死地,这样搞失败是必然的
2017-12-18 17:21
0
雪    币: 21
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
流哥 “热血江湖”有反注入手段?这些3层的函数早被人家盯得死死地,这样搞失败是必然的
没有拉。
2017-12-19 15:30
0
雪    币: 7570
活跃值: (5407)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你要确定,目标进程有没有已经加载你注入的DLL所需要的库文件.问题估计就在这里了.
2017-12-20 06:29
0
雪    币: 140
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
FlyingGuys 没有拉。
s说白了就是让人挂?以前我也玩过这个
2017-12-20 15:27
0
雪    币: 5039
活跃值: (2626)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
6
我只知道内存注入,你要注意你的动态库里最好不要用到线程相关的CRT函数,不然可能会因为没有OEP(DLL_THREAD_ATTACH)  造成没初始化的问题~
其次最好确定导入表依赖的动态库都被加载了~
2017-12-25 18:42
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
都能构造线程了,为什么不注入一段壳代码,利用壳,在目标内部直接直接干坏事呢?比如利用壳,直接调用NTDLL中的DLL加载函数来直接加载DLL,不好么?用得着你自己加载?你可以先创建一个结构,把需要的函数全部定位好,填写好需要的数据,之后连同结构一起写入目标进程,然后再创建一个在目标创建一个新线程,新线程的参数指向已经写好的结构,等目标运行线程之后,你想干嘛都行,包括加载DLL!
2017-12-25 19:21
0
游客
登录 | 注册 方可回帖
返回
//