人々はそれを無視しましたが、私は以前にこれを尋ねました。繰り返しになりますが、これは長いトピックだったので、これを短くするように努めます。
自分が所有していないプログラムに DLL をインジェクトする場合、DLL Main の使用を避けるにはどうすればよいでしょうか? 多くの人は、たとえば DLL メインでスレッドを使用している場合、(ほとんどの場合) プログラムが停止するだけであることを知っているかもしれません。
注入された DLL から実際に実行されているスレッドを DLL Main に配置せずに実行する最良の方法を本当に知りたいです...方法がわからないので、これは不可能に思えます。
プログラムがフォルダー内にロードする必要があるコンパイル済みの.dllを配置できることは知っていますが、DirectXなどの実際のDLLではなく、必要なDLLをロードしますが、現在これを行っており、プログラムを介して制御することを意味しますDirectX ハック。誰かがすでに別のプログラムに注入したもの (MySQL デバッグ ログによる)。とにかくインジェクターでこれを行うことができることは知っていますが、それは難しいでしょう.
今すぐ殺すことができるので、誰か方法を知っていますか?
編集: このスレッドが重複しているため、DLL を挿入するために既に使用していません。
int InjectDLL(HANDLE Handle, const char* Path)
{
void *Lib, *String;
Lib = (void*)(LoadLibraryA);
String = (void*)VirtualAllocEx(Handle, NULL, strlen(Path), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(Handle, (void*)String, Path, strlen(Path), NULL);
CreateRemoteThread(Handle, NULL, NULL, (LPTHREAD_START_ROUTINE)Lib, (void*)String, NULL, NULL);
return true;
}
ただし、挿入された DLL で DllMain を使用すると、多すぎるポイントに到達したため、システムが停止します。
システムの停止を防ぎ、DLLMain の外部でスレッドを作成する方法が必要です。たとえば、挿入した DLL で DLLMain を使用せずに DLL のスレッドを開始する方法が必要です。