ich bin gerade an einem Skinning-Programm, und dazu muss ich eine DLL-Bibliothek in den Speicherbereich anderer Anwendungen laden ... bisher bin ich auf das hier gekommen - aber der Remote LoadLibrary-Call scheitert immer ... warum?
{$MODE DELPHI}
program DLL_Loader;
uses windows;
const
nPlugin = 11;
sTarget = 'Target.exe';
sPlugin = 'Plugin.dll';
function VirtualAllocEx(hProcess: HANDLE; lpAddress: Pointer; dwSize: LongInt; flAllocationType, flProtect: DWORD): Pointer; external 'kernel32.dll';
function VirtualFreeEx(hProcess: HANDLE; lpAddress: Pointer; dwSize: LongInt; dwFreeType: DWORD): Boolean; external 'kernel32.dll';
var
nRemote : DWORD;
hRemote : HANDLE;
pLoadLibrary : LPVOID;
sRemotePlugin : LPSTR;
tTargetInit : STARTUPINFO;
tTargetInfo : PROCESS_INFORMATION;
pRemoteMem : Pointer;
begin
sRemotePlugin := sPlugin;
tTargetInit.cb := SizeOf(tTargetInit);
if not CreateProcess(sTarget, nil, nil, nil, False, 0, nil, nil, tTargetInit, tTargetInfo) then
WriteLn('CreateProcess Failed.');
CloseHandle(tTargetInfo.hThread); // Close unneeded handle
pRemoteMem := VirtualAllocEx(tTargetInfo.hProcess, nil, nPlugin, MEM_COMMIT, PAGE_READWRITE);
if Integer(pRemoteMem) = 0 then
WriteLn('VirtualAllocEx failed.');
if not WriteProcessMemory(tTargetInfo.hProcess, pRemoteMem, @sRemotePlugin, nPlugin, nil) then
WriteLn('WriteProcessMemory failed.');
pLoadLibrary := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA');
hRemote := CreateRemoteThread(tTargetInfo.hProcess, nil, 0, pLoadLibrary, pRemoteMem, 0, nil);
if Integer(hRemote) = 0 then
WriteLn('CreateRemoteThread failed.');
WaitForSingleObject(hRemote, INFINITE);
GetExitCodeThread(hRemote, @nRemote);
CloseHandle(hRemote);
if nRemote = 0 then
WriteLn('Remote LoadLibrary failed.');
VirtualFreeEx(tTargetInfo.hProcess, pRemoteMem, 0, MEM_RELEASE);
CloseHandle(tTargetInfo.hProcess);
end.
Als Compiler verwende ich FreePascal von FreePascal.org (ist übrigens der ultimativste freie Compiler, den es gibt
LoadLibrary('plugin.dll');
funktioniert ...Many Thankx!!

Hilfe
Neues Thema
Antworten

Nach oben

