如何调用远程DLL中的函数

guetcw 2008-02-27 09:41:53
我已将DLL注入远程进程,接下来如何调用那个DLL中的函数呢
如果通过文件影射的方法该怎么做呢
...全文
742 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
guetcw 2008-02-29
  • 打赏
  • 举报
回复
看来只有这样了,谢谢
zhoujianhei 2008-02-28
  • 打赏
  • 举报
回复
应该是进程间通信的事啦,不可能跨进程调用,因为他们不在同一个地址空间。
lwykj 2008-02-28
  • 打赏
  • 举报
回复
别人的代码里面 本身没得调用你dll函数的功能啊

自己改啊!
guetcw 2008-02-28
  • 打赏
  • 举报
回复
LS我没说清楚啊,我用进程A把DLL注入了进程B,然后进程A怎么调用那个注入的DLL的函数
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
你目前这种情况用DLL的共享数据传参数最方便了。DLL中做一个导出函数,EXE调这个导出函数把参数传过去,导出函数再把参数复制到共享数据中。注入的线程同样要再开一个新线程来循环等待,可以利用命名事件也可以利用开关量来实现同步。
  • 打赏
  • 举报
回复
你的DLL都进对方内存空间了,还用那方法?
guetcw 2008-02-28
  • 打赏
  • 举报
回复
22L
传递参数不方便啊
guetcw 2008-02-28
  • 打赏
  • 举报
回复
回20楼,我在16楼那里说了

21楼能不能给个示例啊(插入一个代理)
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
如果只是简单地执行一下那个函数,可以用类似这样的方法:
在你的EXE中用CreateEventEx创建一个命名事件,然后注入DLL。DLL中再创建一个新线程,在线程中打开事件,然后循环等待事件、调那个函数。当EXE要调用那个函数时,就触发一下事件。
arong1234 2008-02-28
  • 打赏
  • 举报
回复
filemapping只能提供数据共享,不会帮你到另外一个进程去调用一个dll

调用远程dll的唯一方法是在对方进程内插入一个代理(如插入一个线程CreateRemoteThread),然后由它替你调用,你从本地进程无论如何都无法调用

不要看到进程间通信就以为你可以执行其他进程的代码,这是不可能的
  • 打赏
  • 举报
回复
CreateRemoteThread
在指定进程内调用函数.
=========================
这个你试了没有?
guetcw 2008-02-28
  • 打赏
  • 举报
回复
有没有一种方法可以很方便的调用那些函数
如果用共享数据,那我的参数只能通过共享数据传递?
guetcw 2008-02-28
  • 打赏
  • 举报
回复
那就是我说的这个咯
---------------------------------------
4楼,就是进程通信啊,我查资料说有:文件映射(Mapping),WM_COPYDATA,剪贴板等
还有一种非常便利的方法#pragmadata_seg
那文件映射怎么做啊
---------------------------------------
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
你是要在一个进程里调用另一个进程的函数?这就是进程通讯了,没法用内存影射。这个函数要在注入的线程里面调,这个线程与你的进程通讯。可以利用DLL的共享数据、SendMessage、同步对象等方法来实现。
guetcw 2008-02-28
  • 打赏
  • 举报
回复
我模仿注入的过程去调用它,失败了,不知道哪出错了
HINSTANCE hDLL = LoadLibrary(m_szDllFile);//加载动态链接库zrDll.dll文件;

HANDLE hThread = NULL;

PTHREAD_START_ROUTINE pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(hDLL,"testfun");

//这里出错了“Uable to install hook"
// 创建远程线程
hThread = CreateRemoteThread(RemoteHandle,//远程进程的句柄
NULL,
0,
pfnThreadRtn, // testfun地址
NULL, // 参数
0,
NULL);

// 等待线程返回
WaitForSingleObject(RemoteHandle, INFINITE);
// 关闭句柄
CloseHandle(hThread);
guetcw 2008-02-28
  • 打赏
  • 举报
回复
是远程进程的一个函数啊,注入了就没出问题
问题是我的进程要怎么调用fun()(已经注入的那个DLL)
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
这个函数是可以调的,但是你直接写地址,即使没有执行注入也会出问题的。这个地址是什么?
guetcw 2008-02-28
  • 打赏
  • 举报
回复
如果那个DLL里面有这样的函数
extern "C" _declspec(dllexport) void fun()
{
DWORD addr = 0x00564875;//远程进程的一个CALL地址

_asm
{
pushad
mov eax,addr
call eax
popad
}

}
还能该怎么调用怎么调用吗
cnzdgs 2008-02-28
  • 打赏
  • 举报
回复
LZ不知道一个DLL也可以被多个进程同时调用吗?DLL的代码是各个进程共用的,数据部分可以每个进程有一份,也可以所有进程共享。
你该怎么调就还怎么调,只要注意被执行注入代码就行。
  • 打赏
  • 举报
回复
CreateRemoteThread
在指定进程内调用函数.
加载更多回复(7)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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