delphi 注入指定进程


本文整理自网络,侵删。

 {delphi 注入指定进程。 }
function InjectToSpecificProcess(AProcess: string): BOOLEAN;
var
Module, NewModule: Pointer;
Size, BytesWritten, TID, PID: LongWord;
ProcessHandle: LongWord;
hRemoteThread: Cardinal;
begin
Module := Pointer(GetModuleHandle(0)); //这句偶尔会出错。获得自身模块句柄
Size := PImageOptionalHeader(Pointer(Integer(Module) +
PImageDosHeader(Module)._lfanew + SizeOf(DWORD) +
SizeOf(TImageFileHeader))).SizeOfImage;

//GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID);
//ProcessHandle为需要注入的进程 PID
PID := GetProcessIDFromExename(AProcess);
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID); //打开进程

VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if NewModule <> nil then
begin
WriteProcessMemory(ProcessHandle, NewModule, Module, Size,
BytesWritten);
//远程打开进程,传递注入函数入口地址@CodeToRunAfterInjection
hRemoteThread := CreateRemoteThread(ProcessHandle, nil, 0,
@CodeToRunAfterInjection,
Module, 0, TID);
if BOOLEAN(hRemoteThread) then Result := True else Result := False;
end else
Result := False;
CloseHandle(ProcessHandle); //关闭线程句柄
end;

相关阅读 >>

Delphi之memo组件

实现拖动无标题窗口的5种方法

Delphi 数据库获取所有用户名

Delphi中的strpas功能

Delphi 10.3 断点调试相关快捷键

Delphi中如何判断mediaplayer控件所播放的文件是否播放完毕?

Delphi listboxadditems() 不重复添加edit1

Delphi取得文件图标并在tlistview中显示

Delphi 如何在数据表中存取图片

Delphi.about.com一个钩子的实现代码

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...