关于远程注入DLL中函数的调用

TA_V_SFIQ_SFIQ 2008-02-04 09:14:24
在网上找了很久,没有找到相关的资料
要调用远程注入DLL中的函数,在远程注入中已经有用到一个LoadLibrary,在DLL没有结束时,我想调用这个DLL里面的某个函数,如果再用一个LoadLibrary程序就会出现问题,我要怎么解决??

顶有分加!!
...全文
393 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
aj3423 2008-02-05
  • 打赏
  • 举报
回复
哦 上面这样调用有个条件,dll中的fun函数必须是导出的,否则GetProcAddress函数失效

#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif

EXPORT void WINAPI fun(bool b) {

aj3423 2008-02-05
  • 打赏
  • 举报
回复
“我想在EXE中调用DLL中的函数,(在EXE中调用DLL中的fun函数)怎么调用??”
void fun(bool b=true)
{
a = b;
}
要调用函数 先要得到函数地址

typedef void (CALLBACK* myfun)(bool);
myfun fun;

//hLib = LoadLibrary("DLL.dll");//你已经Load了就去掉这句
fun = (myfun) GetProcAddress(hLib, "fun");

接下来就可以调用fun(bool)了
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
谢谢cnzdgs
我在DLL中用的是Share变量
#pragma data_seg("Shared")
bool a;
......
#.....
void fun(bool b=true)
{
a = b;
}
我想在EXE中调用DLL中的函数,(在EXE中调用DLL中的fun函数)怎么调用??
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
如果你是要在注入的线程中调用,是模块内部调用,直接调就可以。
如果你是在另外的进程中调用,在DllMain中判断,判断方法有很多,可以通过获取exe文件名、Share变量、命名管道、命名事件等,让dll只执行一次注入的代码或者把要调用dll的程序排除。
ydlchina 2008-02-04
  • 打赏
  • 举报
回复
加分
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
我就是要知道你memcpy中的参数是什么,在哪里定义、怎么分配的?
不过看你上面的代码,fun1()是执行不到的啊!
lsyxp17 2008-02-04
  • 打赏
  • 举报
回复
帮顶+学习
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
bool a = false;
// ……
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
// ……
以下是在在attach中
if (!a)
{
a = true;
LoadLib(...) ;// 执行注入代码
_beginthread(myfun,...)//开一个线程,这个线程有调用出现异常的memcpy函数;
}
else
{
// 执行正常初始化
}
// ……
}

__declspec(dllimport) void fun(bool b)
{
a = b;
}

void myfun()
{
while(1){
if(a) break;
sleep(1000);
fun1();
}
return;

}
void fun1()
{
memcpy(......);//异常
}
只要在EXE中调用void fun(true);程序就用异常;
EXE中不管是用动态链接还是静态链接,都是一样的!!


cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
正常情况是不会有问题的。你举个例子,描述详细一点。
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
有一个问题就是除了在EXE远程注入外,任何修改DLL里数据都会使memcpy有异常
这是什么原因??
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
如果不是当前进程内的数据,就不能用memcpy。
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
还有DLL已经注入成功了,就是memcpy有异常
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
我在DLL的ATTACH中开了一个线程,这个线程是去读取某个程序的数据,我用memcpy用读的;
我用了一个异常处理,在EXCEPT中都会有输出错误
问题很复杂,我这样说的有点不清不楚,请见谅!
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
你现在的问题是什么?是线程注入时有问题还是注入后其它进程要调用dll中的函数?或者是你想在dll中做一个导出函数,利用这个函数来把该dll注入到某一进程?
在什么时候用memcpy?拷贝的数据从哪来?
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
你看一下这个连接:http://www.cnblogs.com/flying_bat/archive/2007/11/07/951872.html
远程注入就是那样,不同的是我写在DLL上了
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
要读的内存是怎么分配的?
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
我有用memcpy这个函数,也是这个函数发生错误的
TA_V_SFIQ_SFIQ 2008-02-04
  • 打赏
  • 举报
回复
发生不能读内存的错误,程序崩溃!
cnzdgs 2008-02-04
  • 打赏
  • 举报
回复
bool a = false;
// ……
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
// ……
if (!a)
{
a = true;
// 执行注入代码
}
else
{
// 执行正常初始化
}
// ……
}

__declspec(dllimport) void fun()
{
}
把exe要调用的函数定义为导出函数。

15,467

社区成员

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

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