3

我有一个给我的 MFC 应用程序(没有源代码),它打开一个带有“更新”按钮的窗口,然后在单击后执行很长时间的更新。

我想修改程序,以便在创建窗口(或其他地方,如 DoModal)时,会向程序发送一条消息,使其认为按钮已被按下。

我在 Ida Pro 和 OllyDbg 中玩弄了一段时间,但无济于事。我看着可能使用 PumpMessage,但这并没有带来任何成功。

有什么建议吗?

4

4 回答 4

3

如果您不喜欢使用辅助“宏”程序的想法,您可以修补原始程序的二进制文件以调用按钮的 BM_CLICK 处理程序。如果你能为调用找到一些空间(至少 5 个字节不带参数),你可以单独使用 OllyDbg 来完成(编辑代码后,选择它,然后右键单击“复制到可执行文件”->“选择”菜单)。否则,您需要使用 PE 编辑器(例如 LordPE 或 PE 工具)创建一个新的代码部分,然后在其中添加您的代码(通常您需要将程序中的调用更改为跳转到您的部分,您可以在执行原始调用加上对按钮的单击处理程序的调用,然后在修补跳转后跳转回旧位置)。

于 2009-06-10T17:47:19.073 回答
1

有几种方法可以使用测试自动化技术来实现,但最简单的方法是简单地获取所需按钮的窗口句柄并向其发送BM_CLICK消息。这假设您具有 Windows 上的 C/C++ 的工作知识。如果没有,还有其他方法可以使用 .NET 或其他技术。我不熟悉 ida-pro 或 ollydbg。

于 2009-06-10T17:36:20.593 回答
0

请参阅此 perl 模块 win32::guitest 它可以帮助您执行此操作。您可以使用它编写一个 perl 脚本并将其嵌入到您的程序中。或者您可以使用包装您所需需求的win32 api并使用它。

于 2009-12-04T10:27:44.290 回答
-1

只需创建一个第二个程序,它将使用它午餐并使用 SendInput(...)发送鼠标点击

于 2009-06-10T17:40:00.697 回答