私はまだ同じプロジェクトに取り組んでいます (なぜ私がそんなに多くの質問をするのか不思議に思っているかもしれません)。
プロジェクトはエラーなしで正常にコンパイルされますが、インジェクターはエラーなどを発生させることなく機能しません。ソースは次のとおりです。
int Inject(DWORD pID)
{
HANDLE hProcess;
if (!(hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID)))
return 0;
char* szDllName = "subclass64.dll";
LPVOID LoadLibraryAddress;
if ((LoadLibraryAddress = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA")) == NULL)
{
char buf[32];
sprintf(buf, "%d", GetLastError());
MessageBox(0, buf, "", 0);
CloseHandle(hProcess);
return 0;
}
LPVOID lpStringAddress;
if ((lpStringAddress = (LPVOID)VirtualAllocEx(hProcess, NULL, strlen(szDllName), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE)) == NULL)
{
char buf[32];
sprintf(buf, "%d", GetLastError());
MessageBox(0, buf, "", 0);
CloseHandle(hProcess);
return 0;
}
if (WriteProcessMemory(hProcess, lpStringAddress, szDllName, strlen(szDllName), NULL) == 0)
{
char buf[32];
sprintf(buf, "%d", GetLastError());
MessageBox(0, buf, "", 0);
CloseHandle(hProcess);
return 0;
}
HANDLE hThread;
if ((hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddress, lpStringAddress, 0, NULL)) == NULL)
{
char buf[32];
sprintf(buf, "%d", GetLastError());
MessageBox(0, buf, "", 0);
CloseHandle(hProcess);
return 0;
}
CloseHandle(hProcess);
return 1;
}
私もデバッグしましたが、奇妙な値は得られませんでした:
(gdb) p hProcess
$1 = (HANDLE) 0xec
(gdb) p LoadLibraryAddress
$2 = (LPVOID) 0x7f9de0528ac <LoadLibraryA>
(gdb) p lpStringAddress
$3 = (LPVOID) 0x8a4d10000
(gdb) p hThread
$4 = (HANDLE) 0xf0
(gdb) p GetLastError()
$5 = 0
別の DLL インジェクター (インターネットから) で正常に動作するため、DLL に問題はありません。
編集:ダミー/テストアプリケーションでは正常に機能しますが、たとえばメモ帳では機能しません(サードパーティのインジェクターを使用すると機能します)。
うまくいけば、誰かが私を助けてくれます、よろしく