首页
社区
课程
招聘
[求助]远程线程注入DLL的时候,出现的问题
发表于: 2008-4-4 16:00 5630

[求助]远程线程注入DLL的时候,出现的问题

2008-4-4 16:00
5630
我的程序就是一直循环运行,检测是否有目标进程。
一旦出现目标进程的话,就检测里面是否已经加载了目标DLL,若没有加载,则用CreateRemoteThread方式将其加载,若已经加载,则不做处理。

现在,目标进程是notepad.exe。

当我提前打开一个记事本的时候,运行我的程序,则可以将DLL插入到记事本中。

但是,如果我提前运行我的程序,然后再打开记事本,则,当打开记事本的时候,我的程序就会退出。

但是,如果我是在调试状态下,就不会出现我的程序退出的情况,就会正常执行。

不知道这是什么原因造成的?(我在程序开始已经调整了特权级了)

谢谢了

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
我贴一下我程序的主要代码吧
	while (TRUE)
	{
		//枚举所有的进程,查看PID是否与传进来的参数相等
		hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
		bMore = ::Process32First(hProcessSnap, &pe32);
		while (bMore)
		{
			//将进程名全部转为小写
			for (unsigned int i = 0; i < strlen(pe32.szExeFile); i++)
			{
				pe32.szExeFile[i] = tolower((int)pe32.szExeFile[i]);
			}
			if (!strncmp(fileName, pe32.szExeFile, strlen(fileName)))
			{
				
				//打开目标进程,并获得所有权限
				destProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);

				//看该进程是否已经加载了该模块
				hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
				bMod = ::Module32First(hModuleSnap, &me32);
				while (bMod)
				{
					if (!strcmpi(me32.szExePath, pszDllName))
					{
						//若已经被加载,则不再执行加载操作
						::MessageBox(NULL, "Have Load this Lib", "Load", MB_OK);
						::CloseHandle(hModuleSnap);
						goto	OutGate;
					}
					bMod = ::Module32Next(hModuleSnap, &me32);
				}
				::CloseHandle(hModuleSnap);

				pfnThreadRtn = (PTHREAD_START_ROUTINE)
					GetProcAddress(GetModuleHandle("Kernel32.dll"), "LoadLibraryA");

				//在目标进程申请空间,并将“DllHook.dll”写入到目标进程空间中
				
				proAddr = ::VirtualAllocEx(destProcess, NULL, strlen(pszDllName)+1, MEM_COMMIT, PAGE_READWRITE);
				if (!WriteProcessMemory(destProcess, proAddr, pszDllName, strlen(pszDllName)+1, &numWrite))
				{
					//写进程失败,输出提示信息,并不再对本进程操作
					goto	OutGate;
				}
				
				//将目标DLL注入到目标进程中
				hThread = ::CreateRemoteThread(destProcess, NULL, 0, pfnThreadRtn, (char *)proAddr, 0, NULL);
				if (hThread == NULL)
				{
					::CloseHandle(destProcess);
					return;
				}
				::WaitForSingleObject(hThread, INFINITE);

				::CloseHandle(hThread);
	OutGate:
				::CloseHandle(destProcess);

			}

			bMore = ::Process32Next(hProcessSnap, &pe32);
		}
		::CloseHandle(hProcessSnap);
		//::Sleep(100);
	}
2008-4-4 16:04
0
游客
登录 | 注册 方可回帖
返回
//