external 'sos.dll';
procedure InjectFunc(InHWND: HWND; Func: Pointer; Param: Pointer; ParamSize: DWORD);
var
hProcess_N: THandle;
ThreadAdd, ParamAdd: Pointer;
hThread: THandle;
ThreadID: DWORD;
lpNumberOfBytes:DWORD;
begin
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
WriteProcessMemory(hProcess_N, ThreadAdd, Func, 4096, lpNumberOfBytes);
ParamAdd := VirtualAllocEx(hProcess_N, nil, ParamSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess_N, ParamAdd, Param, ParamSize, lpNumberOfBytes);
hThread := CreateRemoteThread(hProcess_N, nil, 0, ThreadAdd, ParamAdd, 0, lpNumberOfBytes);
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess_N, ThreadAdd, 4096, MEM_RELEASE);
VirtualFreeEx(hProcess_N, ParamAdd, ParamSize, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess_N);
end;
上面的註入函數
procedure TForm1.Button2Click(Sender: TObject);
var
inhwnd:Hwnd;
ThreadID: DWORD;
hProcess_N: THandle;
begin
inhwnd:= FindWindow(nil,'shadow');
GetWindowThreadProcessId(InHWND, @ThreadID);
hProcess_N := OpenProcess(PROCESS_ALL_ACCESS, False, ThreadID);
injectfunc(InHWND,@show,nil,0);
end;
這個是調用函數,請大大門看看. injectfunc(InHWND,@show,nil,0);這個句。我第3個和第4個參數不太明白是什麽意思.因為我自己寫個EXE推測市的時候,那個註入函數並不需要傳參的,哪位有這方面的例子最好拿出來了.謝謝
在打包生成exe的時候,native executable builder,在第三步,選擇數據庫,在選擇 include required classes and known resource這壹項。在後面的選項中手動指向妳的主類。試壹下。原來我也遇到過這樣的問題,按照上面的設置後可以正常使用了。
希望對妳有點幫助!