注入DLL调用过程已翻了出来,但仍需要调用函数在此DLL中,如何实现呢? 但更特别的,在这个过程中注入后,我要打电话去送价值setHWND功能,从我的应用程序注入的工艺......进样DLL,并从另一个进程这个dll
片DLL
procedure Init(Reason: integer);
begin
Dll_reason := Reason;
HookPoint_Address := 0;
if (Reason = DLL_PROCESS_ATTACH) then
begin
ShowMessage('Прикрепились');
InitHook;
end;
end;
procedure setHWND(hwnd: Cardinal);
begin
hwnd_param:=hwnd;
end;
exports
setHWND;
begin
DLLProc := Init;
Init(DLL_PROCESS_ATTACH);
片注入
function InjectDLL(dwPID: DWORD; DLLPath: PWideChar): integer;
var
dwThreadID: Cardinal;
hProc, hThread, hKernel: THandle;
BytesToWrite, BytesWritten: SIZE_T;
pRemoteBuffer, pLoadLibrary: Pointer;
begin
hProc := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or
PROCESS_VM_OPERATION or PROCESS_VM_WRITE or PROCESS_VM_READ, False, dwPID);
if hProc = 0 then
exit(0);
try
BytesToWrite := SizeOf(WideChar) * (Length(DLLPath) + 1);
pRemoteBuffer := VirtualAllocEx(hProc, nil, BytesToWrite, MEM_COMMIT,
PAGE_READWRITE);
if pRemoteBuffer = nil then
exit(0);
try
if not WriteProcessMemory(hProc, pRemoteBuffer, DLLPath, BytesToWrite,
BytesWritten) then
exit(0);
hKernel := GetModuleHandle('kernel32.dll');
pLoadLibrary := GetProcAddress(hKernel, 'LoadLibraryW');
hThread := CreateRemoteThread(hProc, nil, 0, pLoadLibrary, pRemoteBuffer,
0, dwThreadID);
try
WaitForSingleObject(hThread, INFINITE);
finally
CloseHandle(hThread);
end;
finally
VirtualFreeEx(hProc, pRemoteBuffer, 0, MEM_RELEASE);
end;
finally
CloseHandle(hProc);
end;
exit(1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
PID: DWORD;
dir: string;
begin
SetSeDebugPrivilege;
PID := GetPID('zorron.exe');
if (PID > 0) then
begin
dir := GetCurrentDir;
InjectDLL(PID, PWideChar(dir + '\trans.dll'));
end;
end;
Thx
不要在DllMain中显示UI。调用CreateThread并在那里完成工作。 –
我,米需要从主应用程序呼叫setHWND – SEModer
那么,那样做。但不是来自DllMain。正如文档所涵盖。在DllMain中调用CreateThread来完成这项工作。 –