首页
社区
课程
招聘
远程线程注入 explorer.exe崩溃
发表于: 2014-6-15 20:10 5039

远程线程注入 explorer.exe崩溃

2014-6-15 20:10
5039
win7 远程线程注入EXPLORER为什么就是EXPLORER会崩溃呢?
是ASLR的原因么?

static DWORD WINAPI RemoteCodeFunc(LPVOID lpThreadParameter)
{
}
static DWORD EndRemoteFun()
{
        return 0 ;
}
int _tmain(int argc, _TCHAR* argv[])

{
        //得到进程的PID
        DWORD dwPid = GetPid(L"explorer.exe");

        HANDLE HProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwPid);

        StrArgs *Args = new StrArgs ;
        Args->szArg =  L"C:\\Windows\\System32\\";
        Args->szName = L"cmd.exe";

        const BYTE * codeStartAdr = reinterpret_cast< const BYTE * >(&RemoteCodeFunc);
        const BYTE * codeEndAdr   = reinterpret_cast< const BYTE * >(&EndRemoteFun);

        SizeFun = codeEndAdr -  codeStartAdr;

        //给远程线程函数和参数分配内存
        LPVOID AgrsAdd = VirtualAllocEx(HProcess,NULL,sizeof(InjectArgs),MEM_COMMIT | PAGE_READWRITE,PAGE_READWRITE);
        LPVOID ProcessAdd = VirtualAllocEx(HProcess,NULL,SizeFun,MEM_COMMIT | PAGE_READWRITE,PAGE_EXECUTE_READWRITE);

        BOOL isWriteMemArgs = WriteProcessMemory(HProcess,AgrsAdd,Args,sizeof(InjectArgs),NULL);
        BOOL isWriteMemFuns = WriteProcessMemory(HProcess,ProcessAdd,&RemoteCodeFunc,SizeFun,NULL);

        DWORD dwOldProtect = 0;

        isWriteMemArgs = VirtualProtectEx(HProcess,AgrsAdd,sizeof(InjectArgs), PAGE_READONLY, &dwOldProtect);
        isWriteMemFuns = VirtualProtectEx(HProcess,ProcessAdd,SizeFun, PAGE_EXECUTE_READ, &dwOldProtect);
       
        HANDLE hRemoteThread = CreateRemoteThread(HProcess,NULL,0,reinterpret_cast< LPTHREAD_START_ROUTINE >( ProcessAdd ),AgrsAdd,0,NULL);
       
        CloseHandle(HProcess);
        delete Args;
        VirtualFreeEx(HProcess,ProcessAdd,SizeFun,MEM_RELEASE);
        return 0;
}

删除其他代码,  CreateRemoteThread后桌面进程就崩溃了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
为何要VirtualFree?
你能保证Free的时候你的代码已经执行过了?
2014-6-15 20:28
0
雪    币: 219
活跃值: (778)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
3
APC  插入吧 注入我也发现过这个问题
2014-6-15 20:32
0
雪    币: 206
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
中间有个WaitForSingleObject没发出来,所以不是VirtualFree的问题 。
试试这个远程注入。
2014-6-15 21:09
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
RemoteCodeFunc和EndRemoteFun方法为空,是造成问题的可能原因
这个也要看具体的是什么系统、编译器、编译选项等等环境
2014-6-15 21:49
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不会调试一下吗 附加到explorer.exe 然后再你的远程线程那里下断点
2014-6-15 22:26
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
是不是msvcr100d.dll拷贝到system32目录下?
2014-6-15 22:31
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
MEM_COMMIT | MEM_RESERVE
2014-6-16 06:52
0
雪    币: 206
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
谢谢各位,已解决。是win7 aslr搞的鬼。
2014-6-16 11:26
0
游客
登录 | 注册 方可回帖
返回
//