在一个程序中控制另一个程序的函数调用

在一个程序中控制另一个程序的函数调用

 

作者:flyfish 2011-02-27 星期日

一 被控制程序

1 新建一个基于对话框的程序 名称为Main 这是被控制程序

2 首先编写一个函数 该函数的功能是每次点击按钮编辑框中的数值加2

int g_nContent;

HWND g_hWnd;

void SubCall()

{

     g_nContent=g_nContent+2;

     CString strTemp=L"";

     strTemp.Format(_T("%d"),g_nContent);

     ::SetWindowText(g_hWnd,strTemp);

 

}

在对话框中添加一个编辑框和一个按钮

编辑框变量为CEdit m_Edit_ctlContent;

 

3 在对话框初始化时,加入

g_nContent=0;

g_hWnd=m_Edit_ctlContent.m_hWnd;

在按钮事件中并调用SubCall()这个函数

 

4 Main程序编写完毕

 

控制程序

 

我们要在另一个程序中控制Main程序的函数,达到在Main程序中点击按钮的效果

这个并不是模拟按键,而是注入到Main进程中直接调用

新建一个基于对话框的程序 名称为Control

建立一个按钮 调用一下代码

HWND hWnd = ::FindWindow(NULL,_T("Main")); 

if(hWnd)  

{

     DWORD dwID;

     LPDWORD lpID=&dwID;

     ::GetWindowThreadProcessId(hWnd,lpID);

     HANDLE hPrecess=::OpenProcess(PROCESS_ALL_ACCESS,false,dwID);

     DWORD dwTID;

     CreateRemoteThread(hPrecess,NULL,0,(LPTHREAD_START_ROUTINE(0x004ED0B0)),NULL,0,&dwTID);

}

 

0x004ED0B0 这个地址的由来

 

使用CE 扫描Main进程中的数据,该数据是点击按钮之后编辑框显示的数字相同,多找几次之后只剩下 唯一的一个地址 0x00780EC8

 

OD中 对0x00780EC8进行硬件断点 命令是hw 00780EC8 在执行Main程序中的按钮,这时候程序断下来,向上找到函数的开头,这个地址就是0x004ED0B0

 

以上程序在VC2005 下 调试通过

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值