为什么有些函数需要作为DLL文件注入才能工作

Why some functions need to be injected as DLL files to work

所以我最近一直在学习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 文件有什么意义?

memcpy 是一个函数,旨在用于您拥有的内存,并且仅用于该内存。它只会在调用它的当前进程中工作。

每个进程都有自己的内存。一个进程可以在 0x14141 分配一些东西,另一个可以在 0x14141 分配,它不会冲突,因为地址是该进程的本地地址。 memcpy 以同样的方式工作。它复制到当前进程的地址,不会影响其他进程的内存。

当您尝试在另一个进程拥有的内存上使用它时,如果内存不是 shared/mapped,它将崩溃。它实际上将复制到您当前进程的地址,而不是其他进程。

另一方面,WriteProcessMemory 将在属于其他进程的内存上工作,前提是您有正确的 privileges/access-rights。

当这个人将模块注入另一个进程时,该模块现在基本上是该进程的一部分,因此可以使用 memcpy。就好像进程自己加载了模块一样。该模块是 "new" 当前进程的一部分。也就是注入进程。