Reversing.Kr上的第一个题目---Easy_CrackMe调试
1.先打开程序看看:字符串
一个标准的输入框和一个按钮,试着输入‘123456’而后点击按钮,看看有什么反应......io
果真,它easily弹出一个错误框,显示‘Incorrect Password’。看到此处我试着把它放进IDA。循环
2.IDA分析:引用
经过View->String我看到了弹窗显示的字符串,直接双击跟到代码窗口,程序
此处能够看到‘Incorrect Password’与‘Congratulation!!’均被引用,Ctrl+x跟踪上去。im
跟踪到弹出错误消息框处,发现有4处可到达弹出错误消息框,此处跟踪上去看太劳神,返回看当作功消息框的调用,总结
发现只有一处能调用弹出成功消息框。此时能够大胆猜想一下,程序的关键逻辑是判断输入的Password是否知足条件,不知足则直接跳转到弹出错误消息框,知足则顺下继续判断...最后全部的条件都知足了则直接弹出成功消息框。word
3.尝试OD动态调试:img
大体清楚程序逻辑后,将它放入OD动态调试。首先Ctrl+G转到401135(IDA中可知)下断点,而后F9运行,输入‘123456’并按下按钮,断点起效。
跟踪左侧红线直达调用处
看到jnz跳转指令之上还有GetDlgItemTextA用于获取咱们输入的‘123456’。说明从GetDlgItemTextA以后就是对咱们的输入内容进行对比(与正确的Password),通过分析获得下图......
4.总结:
由此,咱们获得Password为‘Ea5yR3versing’,程序首先判断第二个字符是不是‘a’(0x61),其次在判断二三字符是否为‘5y’,接下来循环判断后面的字符是否为‘R3versing’,最后判断第一个字符是否为‘E’(0x45)。