以消息为导向的有限状态机理念Windows程序设计笔记(汇编) (3) 窗体程序逆向入手思路

发布于 2021-08-23  42 次阅读


背景

拿到一个窗体程序该如何确定逆向的开始点

正文

我们先假设没有任何可搜索字符串,这一点笔者是遇到过的,所有字符串都是加密的,打印函数前一个函数会解密字符串,解密出“please input flag”之类的内容,然后再传参给print,有一种理论上可行但是非常不好弄的方法:动调,并动调至解密之后再去搜索字符串

要确定这个时机的前提几乎就是找到函数主体入口点(三者离的很近:main入口点,解密函数,print)

本文讲解几种一般方法

首先是直接运行,观察窗体特征,然后确定以下断点

通过窗体的样式确定MessageBox 的type参数,直接搜索push xxx指令一般来说只会搜到几条结果

是否使用了GetDlgItemText

该程序看起来有没有复杂的消息循环

这些都是很重要的断点位置,基本接近main函数入口点

另外对于有按钮,且按钮是关键扳机的窗体程序,我们可以在句柄页面找到特定按钮,直接断下按钮

按钮作为一种典型的状态机,拥有两种状态,我们还可以选择具体断下哪个状态(WM_LBUTTONUP和WM_LBUTTONDOWN)