當前位置:編程學習大全網 - 源碼下載 - dll註入,處理多線程

dll註入,處理多線程

function show:integer;stdcall; //聲明函數

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這壹項。在後面的選項中手動指向妳的主類。試壹下。原來我也遇到過這樣的問題,按照上面的設置後可以正常使用了。

希望對妳有點幫助!

  • 上一篇:銀行理財年化收益4.5%是什麽意思
  • 下一篇:Struts-2.5 Action動態調用與通配調用無效解決辦法
  • copyright 2024編程學習大全網