首页
社区
课程
招聘
[求助]CreateRemoteThread导致目标进程崩溃
发表于: 2009-3-31 23:38 13694

[求助]CreateRemoteThread导致目标进程崩溃

2009-3-31 23:38
13694
我用CreateRemoteThread函数注入目标进程,其他进程注入都没问题,也实现了我的效果,但我注入系统进程(explorer.exe, svchot.exe等)时,就会导致目标进程崩溃,说"内存不能为'written',我调试过,是在执行CreateRemoteThread函数后导致目标进程崩溃的,代码如下,请各位帮帮忙,谢谢了!
BOOL EnableDebugPrivilege(BOOL bEnable)
{
//提高本进程权限的函数
	BOOL bOK = FALSE;
	HANDLE hToken;
	if(::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
	{
		LUID uID;
		::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&uID);
		TOKEN_PRIVILEGES tp;
		tp.PrivilegeCount=1;
		tp.Privileges[0].Luid=uID;
		tp.Privileges[0].Attributes=bEnable?SE_PRIVILEGE_ENABLED:0;
		::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
		bOK = (::GetLastError()==ERROR_SUCCESS);
		CloseHandle(hToken);
	}
	return bOK;
}
void LoadModule(DWORD dwPID,LPCTSTR lpszModuleName)
{
	HANDLE hprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPID);
	if(!hprocess)
	{
		CloseHandle(hprocess);
		return ;
	}
	this->EnableDebugPrivilege(1);
	//计算dll路径名需要的空间
	int cb = 1+strlen(lpszModuleName);
	//使用VirtualAllocEx函数在远程进程的内存地址空间分配dll文件缓冲区
	LPVOID pszLibFileRemote = VirtualAllocEx(hprocess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);
	//使用WriteProcessMemory函数将dll的路径名复制到远程进程的内存空间
	BOOL iReturnCode = WriteProcessMemory(hprocess,pszLibFileRemote,(PVOID)lpszModuleName,cb,NULL);
	if(iReturnCode)
	{
		//计算LoadLibrary的入口地址
		LPTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
		//启动远程线程LoadLibrary,通过远程线程调用用户的dll文件
		HANDLE hRemoteThread = CreateRemoteThread(hprocess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL);
		if(hRemoteThread)
			CloseHandle(hRemoteThread);
	}
	CloseHandle(hprocess);
}


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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 290
活跃值: (20)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
简单看了下就有好几处问题
首先参数不检查VirtualAllocEx申请内存并不一定会成功,还有其他地方应该也需要检查参数
还有就是VirtualAllocEx在多核下使用PAGE_READWRITE会有问题所以你应该使用PAGE_EXECUTE_READWRITE
2009-4-1 09:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上的提醒,不过还是不能解决问题:执行CreateRemoteThread注入到其他进程没问题,但是注入到系统进程时,如:explorer.exe,svchost.exe等,目标进程就立即崩溃了。

后来我在三台电脑上试了一下,有一台是正常的,连winlogon.exe都能注入进去,另一台跟我的错误是一样的,而这三台电脑的版本是一样的。不知道怎么回事?
2009-4-1 12:22
0
雪    币: 8599
活跃值: (5060)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
void LoadModule(DWORD dwPID,LPCTSTR lpszModuleName)----->void LoadModule(DWORD dwPID,LPCSTR lpszModuleName)
2009-4-1 19:56
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
可能你注入进去的dll依赖其他dll
2009-4-1 22:10
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Explorer.exe的dep保护没去除!我最近也在弄Explorer.exe注入,有的机器很成功,有的一注入就崩溃。
查了看雪论坛和《天书夜读》,都说要如下操作去除dep保护:
1、ZwOpenProcess打开目标exe的pid得到进程句柄,
2、进程句柄做参数,调用ZwSetInformationProcess去除dep保护,
   
  但弄了几天了,就是第2步总是返回“拒绝访问”,在驱动中弄也是如此.
兄弟们按照上面思路和步骤找找资料,弄成功了通知一下下啊。共同交流、共同提高啊!
2009-6-14 10:40
0
雪    币: 220
活跃值: (701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
先定义下程序基址看看
2009-6-14 17:04
0
雪    币: 137
活跃值: (12)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
我以前也遇到过dep不允许修改explorer和taskmgr的exe,但可修改dll,我记得有个现成的代码就可实现注入,和你的差不多,就是特简单,可能错在别的什么地方。
想问你下,杀毒软件拦截怎么办?
对了我有个注入代码的例子!
2009-6-14 17:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
自己跟一下代码

我以前都是这样调试的

源码之下了无秘密
2009-6-14 18:55
0
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
LPTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");

检查下这段,你的进程取到的加载DLL地址是否和目标进程的地址是否一至,大多是这个地址错了..
2009-6-15 10:14
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
都说你是修改了进程的本身权限,那几个一般都应该是只读的,你要调用一个函数该下权限,查字典吧
2010-3-7 15:32
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢2楼分享经验。
2010-5-8 22:05
0
游客
登录 | 注册 方可回帖
返回
//