iamok 发表于 2023-10-17 15:24:01

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

iamok 发表于 2023-10-17 16:21:09

群里的大佬帮助下解决了,写内存前用VirtualProtect改下内存属性,写完再改回来
同上上面代码的长度计算也有问题。

飘云 发表于 2023-10-17 22:44:24

建议你VirtualProtect修改整个代码段属性,不然一下就被定位了,哈哈

iamok 发表于 2023-10-18 08:24:34

飘云 发表于 2023-10-17 22:44
建议你VirtualProtect修改整个代码段属性,不然一下就被定位了,哈哈

谢谢飘老大的建议

llh001 发表于 2023-10-18 09:42:31

用WriteProcessMemory写内存时也需要先改内存为可写吧,不然也可能出现异常。

那伤你得给 发表于 2023-10-24 09:18:08

PYG有你更精彩!
页: [1]
查看完整版本: dll劫持补丁写内存时memcpy和WriteProcessMemory的区别