MFC 远程代码注入导致进程崩溃,求解

QPZME 2017-01-01 01:22:26

如题,调用的是这篇文章的代码:http://blog.csdn.net/hyy829903/article/details/12272717

void InjectCode(DWORD dwProcId, LPVOID mFunc, LPVOID Param, DWORD ParamSize)
{
HANDLE hProcess;//远程句柄
LPVOID mFuncAddr;//申请函数内存地址
LPVOID ParamAddr;//申请参数内存地址
HANDLE hThread; //线程句柄
DWORD NumberOfByte; //辅助返回值
CString str;
//打开被注入的进程句柄
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcId);
//申请内存
mFuncAddr = VirtualAllocEx(hProcess, NULL, 128, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
ParamAddr = VirtualAllocEx(hProcess, NULL, ParamSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
//写内存
WriteProcessMemory(hProcess, mFuncAddr, mFunc, 128, &NumberOfByte);
WriteProcessMemory(hProcess, ParamAddr, Param, ParamSize, &NumberOfByte);
//创建远程线程
hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)mFuncAddr,ParamAddr, 0, &NumberOfByte);
WaitForSingleObject(hThread, INFINITE); //等待线程结束
//释放申请有内存
VirtualFreeEx(hProcess, mFuncAddr, 128, MEM_RELEASE);
VirtualFreeEx(hProcess, ParamAddr, ParamSize, MEM_RELEASE);
//释放远程句柄
CloseHandle(hThread);
CloseHandle(hProcess);
}
但是,为什么还是会这样??



难道远程线程函数 有问题??求大神解答!!!!
...全文
415 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iwinchan 2020-11-27
  • 打赏
  • 举报
回复
代码注入好复杂啊!好复杂啊!好复杂啊!为什么dll注入却不用那么多复杂的操作,就没有一种办法直接将自写函数直接原封不动地注入吗?
Eleven 2020-11-27
  • 打赏
  • 举报
回复
赵4老师 2017-01-03
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
赵4老师 2017-01-03
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!
向立天 2017-01-01
  • 打赏
  • 举报
回复
自问自答,分享解决方案,精神可嘉
QPZME 2017-01-01
  • 打赏
  • 举报
回复 1
哈哈,现在终于知道了 为什么崩溃的原因了,将项目修改为Release版本,大家可以参考这篇文章: http://blog.csdn.net/whatday/article/details/8975930
QPZME 2017-01-01
  • 打赏
  • 举报
回复
//申请内存 mFuncAddr = VirtualAllocEx(hProcess, NULL, 128, MEM_COMMIT, PAGE_EXECUTE_READWRITE); //写内存 WriteProcessMemory(hProcess, mFuncAddr, mFunc, 128, &NumberOfByte); //创建远程线程 hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)mFuncAddr,ParamAddr, 0, &NumberOfByte); 那如果这样可以吧线程函数写入到内存里吗?
ID870177103 2017-01-01
  • 打赏
  • 举报
回复
你这个只是写入函数的地址是没用的吧 不是所有dll函数在不同进程中都是地址一致的 代码注入非常复杂,要不然微软detoursx64也不会收费了 推荐用dll注入就好了
QPZME 2017-01-01
  • 打赏
  • 举报
回复
远程线程函数如图,我只是想弹出一个信息框

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧