dll劫持补丁写内存时memcpy和WriteProcessMemory的区别
本帖最后由 iamok 于 2023-10-17 16:19 编辑之前自己写winmm.dll来劫持修改时一直是使用下面的方式来修改内存:
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, GetCurrentProcessId());
if (hProcess)
{
WriteProcessMemory(hProcess, addr1, realSub1, strlen((char*)realSub1), NULL);
WriteProcessMemory(hProcess, addr2, realSub2, strlen((char*)realSub2), NULL);
CloseHandle(hProcess);
}
按我的理解上面的代码应该也可以用memcpy来写:
memcpy(addr1, realSub1, strlen((char*)realSub1);
memcpy(addr2, realSub2,strlen((char*)realSub2));
但实际情况是有些程序好像可以这么写,有些执行到memcpy函数时,进程就异常退出了。
测试的程序是010editor,大佬们看看是什么原因造成不能用memcpy函数来写呢?
附件放一个生成的失败dll
群里的大佬帮助下解决了,写内存前用VirtualProtect改下内存属性,写完再改回来
同上上面代码的长度计算也有问题。 建议你VirtualProtect修改整个代码段属性,不然一下就被定位了,哈哈 飘云 发表于 2023-10-17 22:44
建议你VirtualProtect修改整个代码段属性,不然一下就被定位了,哈哈
谢谢飘老大的建议
用WriteProcessMemory写内存时也需要先改内存为可写吧,不然也可能出现异常。 PYG有你更精彩!
页:
[1]