程序A主动调用程序B中的一个函数,请指点一下。

bbdog 2009-09-12 12:02:24
通过对程序B的动态分析,找到程序B的一个函数入口地址0x0040B000(假设),该函数原型为void 0x0040B000(int a, int b),函数根据a和b的值,对指定的内存地址进行操作。

现在想写个程序A,主动去调用运行中的程序B的这个函数。请问思路如何,能给出相对具体的操作步骤就更好了。

*注:
1、通过对相关问题的网络搜索,dll注入感觉比较接近解决方案,我在了解这个方案的过程中遇到了以下疑惑:
A、在注入dll后,如何调用目标函数0x0040B000?是在该dll被加裁的入口点吗?
B、本例中,要执行的代码和数据,全部都在目标进程内,并没有增加新的代码和数据,真的需要用到dll注入技术吗?

2、有网友指出,可以通过向程序B发送相应的消息来达到目的,但我是学习之用,希望解决方案是进入程序B的进程空间,对目标函数进行函数调用。

感谢广大网友提供解答思路。
...全文
180 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bbdog 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 coding_hello 的回复:]
DWORD WINAPI Worker(LPVOID lpParam)
{
    //重点:函数的calling convention要搞清楚,是stdcall还是cdecl, 不能乱来
    void (*pFunc)(int a, int b) = (void (*)(int, int))0x40b000;

    pFunc(10, 20);  //假设你调用那个函数时需要传的参数是10,20
                    //如果要变的话,把参数也WriteProcessMemory过去

    return 0;
}

int main()
{
    //OpenProcess打开进程

    //VirtualAllocEx在目标进程中分配内存,4k应该足够了

    //把Worker复制到目标进程中,长度懒得计算的话就写个1k吧(上面这代码就算100字节应该足够了)

    //CreateRemoteThread调用之

    return 0;
}
[/Quote]

请教coding_hello:
想要调用的函数已经在目标进程中了且函数地址已经确定(0x0040b000),是否可以在CreateRemoteThread的函数参数中,直接指定LPTHREAD_START_ROUTINE lpStartAddress参数为0x0040b000,这样就不用写代码到目标进程空间了(0x0040b000函数要用到的参数,还是写到VirtualAllocEx申请的目标进程空间中),要样想正确吗?
tutu08 2009-09-13
  • 打赏
  • 举报
回复
黑客潜质
野男孩 2009-09-12
  • 打赏
  • 举报
回复
DWORD WINAPI Worker(LPVOID lpParam)
{
//重点:函数的calling convention要搞清楚,是stdcall还是cdecl, 不能乱来
void (*pFunc)(int a, int b) = (void (*)(int, int))0x40b000;

pFunc(10, 20); //假设你调用那个函数时需要传的参数是10,20
//如果要变的话,把参数也WriteProcessMemory过去

return 0;
}

int main()
{
//OpenProcess打开进程

//VirtualAllocEx在目标进程中分配内存,4k应该足够了

//把Worker复制到目标进程中,长度懒得计算的话就写个1k吧(上面这代码就算100字节应该足够了)

//CreateRemoteThread调用之

return 0;
}
icefairy 2009-09-12
  • 打赏
  • 举报
回复
up 一下
luotuo512 2009-09-12
  • 打赏
  • 举报
回复
e查看PE结构的导出表部分,加一个项。可以用UltraEdit。
mengde007 2009-09-12
  • 打赏
  • 举报
回复
dll方案不错;两个进程的地址不一样;一个进程也不允许访问另一个进程的地址空间;
fallening 2009-09-12
  • 打赏
  • 举报
回复
能不能直接找个函数指针cast过去?
icefox97 2009-09-12
  • 打赏
  • 举报
回复
UP
kongbai308416350 2009-09-12
  • 打赏
  • 举报
回复
帮顶.
papaofdoudou 2009-09-12
  • 打赏
  • 举报
回复
thy38 2009-09-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 delphigis 的回复:]
你们太狠了
[/Quote]

对!好狠!!
呵呵
stjay 2009-09-12
  • 打赏
  • 举报
回复
也可以调用内存中EXE文件方法
stjay 2009-09-12
  • 打赏
  • 举报
回复
看雪有该方面文章
调用EXE非导出函数
百事烟 2009-09-12
  • 打赏
  • 举报
回复
你们太狠了

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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