最近闲着无事,研究了一下远程线程注入方面的东西,结果,在实验时,目标进程老是提示Access Violation(非法访问)的错误,很郁闷,因此,来坛子请教一下大家:
先说一下我的实验过程,环境Win7旗舰版, SP1
线程函数执行代码,非常简单的一个执行语句
DWORD WINAPI RemoteProc(LPVOID lpParam)
{
return 0;
}
1)、遍历系统进程表,找到我要注入的目标进程,使用OpenProcess()函数以所有权限打开目标进程,OpenProcess()返回成功(说明权限是没有问题的,显然后来反生的错误跟权限没有关系);
2)、调用VirtualAllocEx函数在目标进程地址空间中申请一块1024个字节大小的区域,并返回成功;
3)、调用WriteProcessMemory()将线程函数的执行代码拷贝到区域中 ( 这块考虑到VS编译器Debug模式下会开启【增量连接】功能,使用ILT对函数地址进行一个jmp操作,因此,关闭【增量连接】功能,后续调试发现,线程的执行代码确实正确拷贝到了目标进程的地址空间中,因此,错误不可能发生在这个环节的),
4)、调用hRemoteThrd = CreateRemoteThread()为目标进程创建一个远程执行,并传递RemoteProc函数指针,然后调用WaitForSingleObject()等待hRemoteThrd返回,最后做一些资源的释放工作
编写完后,关闭杀软,准备注入目标进程(我自己写的一个简单的目标程序),结果,目标程序却提示Access Violation错误,,后来在网上找到一篇帖子,里面提到了一个【基本运行时检查】,就是检查栈的指针,我也把这个选项给关了,结果再次实验,还是刚才的那个问题,比较郁闷,特来请教一下大家,帮忙分析一下呗!
需要注意的就是尽量用Release版,再就是远程 函数中不要调别的什么自定义函数,看起来都注意了 WIN7 系统是不是有什么保护机制?