简单刷完韩国人的《逆向工程核心原理》之后,觉得自己需要投入到Crack-Me CTF中的淬炼当中,所以准备把看雪2017年中CFT的题目拿来锻炼一下,话不多说,先看看第一题WananLOL的面目吧。
PS:注意要点,它的标题以及消息框中的文字,还有Register按钮的短暂禁用。
- 先放入IDA,概览一下 其中有两处显示窗口的回调函数(WindowProc和DialogProc),在sub_401000(WindowProc)处没有Register消息的处理, 而在 DialogFunc处有EnableWindow的痕迹,明显能够看出来,EnableWindow的前后两次调用,分别是Register按钮的禁用和启用,那么有关key的compare函数也就在他们之间。 点进loc_4011F4处,果然看见MessageBox的调用,在loc_4011F4处的靠前部分还有GetDlgItemText,用于获得输入的文本,自然下面就是compare的过程。
- compare处找到了,我们来看看它的相关算法。首先祭出F5大法,可惜出师不利 程序通过一些jmp方式跳过一些特殊字节,起到了模糊静态反编译的效果。通过将0x401262和0x4012AA处的指令nop掉,使得反编译成功。按下P(Create Function)后再按F5反编译。 Python模拟验证函数为
- 终极简化就是(key[2]-0.2)*key[3]=24.0,求解得key[2]=key[3]=5,即key=“1555” (如有错误,敬请指出~)