GUI程序逆向¶
REVERSE · 知识域。图形界面程序的逆向:事件流定位与框架识别。标签:MFC逆向、Qt逆向、其他GUI程序逆向。
触发特征¶
- 题目是带界面的 exe(点击/输入框/按钮触发校验)。
- 直接看 main 找不到逻辑 —— 逻辑在消息处理/信号槽里。
MFC逆向¶
- 消息映射(Message Map):
BEGIN_MESSAGE_MAP宏展开的静态表 —— 找AfxWndProc→ 定位CWnd::WindowProc→ 查消息映射表(ON_BN_CLICKED 等)找按钮处理函数。 - 事件处理器定位:WhiteHat 2015 消息映射调试法(在 CWnd::OnCmdMsg 下断看分发)。
- 对话框事件:MFC Dialog 的 DDX/DDV 数据交换;资源编辑器(ResHacker)看控件 ID → 对照
ON_BN_CLICKED(IDC_BUTTON1, &Handler)。 - 关键:控件 ID ↔ 处理函数映射,字符串引用反查。
Qt逆向¶
- 信号槽:
connect(sender, SIGNAL, receiver, SLOT)—— 字符串表里1slot名/2signal名元对象信息(metaobject)。 - 识别:Qt 字符串特征("qt_meta_stringdata")、QWidget 导入。
- 定位逻辑:
QMetaObject::activate下断看槽调用;QMetaObject静态数据中槽索引。 - QML 应用:
.qml文件可解析(资源里),逻辑常在 JS 层;资源释放(qrc)。 - PyQt/PySide:Python 层逻辑(→ Python程序逆向);pyinstaller 解包后直接看 .pyc。
其他GUI程序逆向¶
- Win32 原生:GetMessage/DispatchMessage 循环 +
WndProcswitch;DialogProc;控件 ID 反查。 - Electron:app.asar 解包(npm 工具)→ JS 层审计(→ WEB-JS);native 模块配合分析(RootAccess2026)。
- 游戏引擎:Unity(Mono → dnSpy;IL2CPP → Il2CppDumper)、Unreal(蓝图+UBT 产物)、Godot(资源解包)、Roblox place 文件。
- Delphi/VB:专有运行时与窗体资源(DeDe/VB 反编译器)。
- Java Swing/JavaFX:jar 反编译(→ 高级语言逆向)。
- Flutter 桌面:Dart AOT → Blutter。
通用技巧¶
- 资源先行:按钮文本/窗口标题字符串引用 → 事件函数。
- 运行时:API 监控(BP GetWindowTextA/SetDlgItemText)抓输入输出点。
- 界面逻辑一般"薄",校验函数与加密才是主体(→ 加密与解密)。
- 控件内容联动 patch:改界面判定后让程序打印 flag。