C/C++代码案例:一种模拟点击其他窗口(允许隐藏)内按钮的实现-软件安全逆向社区论坛-技术社区-学技术网

C/C++代码案例:一种模拟点击其他窗口(允许隐藏)内按钮的实现

免责声明: 本站所发布的一切技术分析文章、工具、软件(全部来自于互联网收集)仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请与我们联系处理。

前言

某社区成员分析火山开发的程序,实现了点击按钮实现强制性爆破跳转

现在的需求:打开窗口直接就跳进去

分析难点:窗口加载后,必定包含很多重要数据的初始化,万万不能直接就加载按钮触发的函数,很容易崩溃

分析可行的思路:

1.自己写一个dll,导入表注入或者劫持注入dll(社区高级版C语言Windows程序开发有案例)
2.代码实现隐藏主窗口(相关的API 第五章已经做了详细讲解)
3.代码实现模拟点击按钮,发送按键消息(高级版C有代码案例)
4.进去后显示窗口(相关的API 第五章已经做了详细讲解)

以上步骤中,唯一一个大家比较陌生的没有实际场景的应该是3,所以我们对步骤3进行展开陈述

图片[1]-C/C++代码案例:一种模拟点击其他窗口(允许隐藏)内按钮的实现-软件安全逆向社区论坛-技术社区-学技术网

图片[2]-C/C++代码案例:一种模拟点击其他窗口(允许隐藏)内按钮的实现-软件安全逆向社区论坛-技术社区-学技术网

模拟按钮点击

代码流程解析
1.找到目标窗口
2.根据目标窗口句柄找到目标按钮
3.使被操作窗口始终处于激活状态
4.PostMessage发送BM_CLICK消息实现模拟窗口点击
#include <windows.h>
#include <iostream>

int main() {
	// 找到目标窗口(替换 "TargetWindowTitle" 为实际窗口标题)
	HWND hWnd = FindWindow(NULL, "某软件");
	if (!hWnd) {
		std::cout << "窗口未找到!" << std::endl;
		return 1;
	}

	// 找到目标按钮(替换按钮的控件ID)
	HWND hButton = FindWindowEx(hWnd, NULL, "Button", "登陆");
	if (!hButton) {
		std::cout << "按钮未找到!" << std::endl;
		return 1;
	}

	// 获取目标窗口的线程ID
	DWORD dwTargetThreadId = GetWindowThreadProcessId(hWnd, NULL);
	DWORD dwCurrentThreadId = GetCurrentThreadId();

	// 绑定输入线程,以便控制窗口焦点
	AttachThreadInput(dwCurrentThreadId, dwTargetThreadId, TRUE);

	// 激活目标窗口
	SetForegroundWindow(hWnd);
	SetFocus(hWnd);

	// 解除输入线程绑定
	AttachThreadInput(dwCurrentThreadId, dwTargetThreadId, FALSE);

	// 发送 BM_CLICK 消息,直接触发按钮点击
	PostMessage(hButton, BM_CLICK, 0, 0);

	std::cout << "按钮已点击!" << std::endl;
	return 0;
}

测试程序

VS2019下载(C/C++开发环境)
 
 
请登录后发表评论