Delphi 7 で作成した古いインジェクターを入手し、その方法で彼を変更しようとしましたが、XE2 でも動作しますが、失敗しました-.- 新しいテスト dll は古いインジェクターで問題なく動作するので、かなり私のインジェクターにバグがあることを確認してください。
ここに私が作ったコードがあります:
procedure TForm1.InjectDLL(const ADLLName: String; targetproc: Cardinal);
var
dllname: String;
pDLLname, pStartAddr: Pointer;
bw: NativeUInt;
hProcess, hRemoteThread: THandle;
TID: Cardinal;
begin
hProcess := OpenProcess(PROCESS_ALL_ACCESS, false, targetproc);
pDLLname := VirtualAllocEx(hProcess, 0, length(dllname) + 1,
MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, pDLLname, Pointer(dllname),
length(dllname) + 1, bw);
pStartAddr := GetProcAddress(GetModuleHandle('kernel32.dll'), 'LoadLibraryA');
hRemoteThread := CreateRemoteThread(hProcess, nil, 0, pStartAddr,
pDLLname, 0, TID);
WaitForSingleObject(hRemoteThread, INFINITE);
showmessage('Fehler ' + IntToStr(GetLastError) + ': ' +
SysErrorMessage(GetLastError));
CloseHandle(hProcess);
end;
hProcess と hRemoteThread を THandle に、bw を NativeUInt に変更する必要がありました。showmessage は、すべてが機能していることを示しています。String 型が d7 から XE2 に変更されたため、小さな違いがあるはずです。また、dll 名を PAnsiChar としてキャストしようとしましたが、何も変わりませんでした。
十分な情報を投稿したことを願っています。