所以我最近一直在学习C ++,有一部分我无法理解,我看到有人在他注入的dll文件中使用了这个函数:
void WriteToMemory(DWORD AddressToWrite, char* ValueToWrite, int byteNum){
unsigned long oldProtection;
VirtualProtect((LPVOID)AddressToWrite, byteNum, PAGE_EXECUTE_READWRITE, &oldProtection);memcpy((LPVOID)AddressToWrite, ValueToWrite, byteNum);
VirtualProtect((LPVOID)AddressToWrite, byteNum, oldProtection, NULL);}
但是当我尝试使用普通脚本的这个函数时,我的程序一直在破碎,那么为什么需要先注入它以及注入DLL文件的重点是什么?
答案 0 :(得分:0)
memcpy
是一个用于你拥有的内存的函数,只有那个。它只能在当前调用它的过程中工作。
每个进程都有自己的内存。一个进程可以在0x14141处分配一些进程,另一个进程可以在0x14141处分配,并且它不会发生冲突,因为该地址是该进程的本地地址。 memcpy
的工作方式相同。它复制到当前进程的地址,不会影响其他进程的内存。
当您尝试在另一个进程拥有的内存上使用它时,如果内存未共享/映射,它将崩溃。它实际上是复制到当前进程的那个地址而不是另一个进程。
另一方面,如果您拥有正确的权限/访问权限,WriteProcessMemory
将对属于其他进程的内存起作用。
当这个人将模块注入另一个进程时,该模块现在基本上是该进程的一部分,因此可以使用memcpy
。这就好像进程加载了模块本身。该模块是“新”当前流程的一部分。也就是注入流程。