通过远程注入的dll中的函数为什么运行不起来???

ctks2009 2009-05-14 09:05:39
dll文件如下(remoteinject.dll)
library remoteinject;

uses
SysUtils,
windows,
Classes;

{$R *.res}
procedure func;
begin
MessageBox(0,'test','test dll',0);
end;

begin
func;
end.


远程注入的程序如下:

procedure TForm1.Button2Click(Sender: TObject);

var
h,pid:longword;
tmp:longword;
DllName:pchar;
Mysize:longword;
Parameter:pointer;//放那个参数的指针(位置在目标进程内)
hwnd1: HWND;

begin
DLLName:='remoteinject.dll';
Mysize:=strlen(Dllname)+1;


hwnd1:=FindWindow('notepad', nil);

GetWindowThreadProcessId(hwnd1, @pid);

h:=OpenProcess(PROCESS_ALL_ACCESS, False, pid);

parameter:= VirtualAllocEx(h, nil, Mysize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(h, Parameter, Pointer(DllName), MySize, tmp);


CreateRemoteThread(h,nil, 0, GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'),
Parameter, 0 , tmp);
end;

我运行的过程是这样的:
先打开记事本,然后运行上面的程序,但是记事本没反应,dll中的函数没有运行,请教这是什么原因??

...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
klyh007 2010-03-17
  • 打赏
  • 举报
回复
换成LoadLibraryW可以吗?
ctks2009 2009-05-18
  • 打赏
  • 举报
回复
ff
ctks2009 2009-05-18
  • 打赏
  • 举报
回复
感谢xiaoxiao_8
按照你的方法,函数已经能执行起来了
taste品味 2009-05-14
  • 打赏
  • 举报
回复
我试了一下 会把记事本关掉
notepad.ext 遇到问题需要关闭。我们对此引起的不便表示抱歉。
xiaoxiao_8 2009-05-14
  • 打赏
  • 举报
回复
兄弟,你的程序代码一点都没错。
至于为什么dll中的函数没有运行
是因为LoadLibraryA找不到'remoteinject.dll'
windows是在当前目录(记录本启动时的目录)或系统目录下查找,而你的dll估计不是在这里面。
你把'remoteinject.dll'改为绝对路径就可以了,如:'d:\dlp\remoteinject.dll'
gyk120 2009-05-14
  • 打赏
  • 举报
回复
换成LoadLibraryW可以吗?

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧