程序链接:
链接:https://pan.baidu.com/s/1N0kQ-QcmJZ6038tBsKJjuA?pwd=6vlu
提取码:6vlu
逆向分析要有清晰的思路和足够的耐心
- 首先用PEiD对该程序进行查壳
发现该程序被加壳,但是能正常运行
- 用cmd运行该程序
可以发现提示输入字符串:please enter the username:、please enter the password: FLAG判断结果字符串:Wrong!
- 初次尝试使用IDA打开该程序
发现不能成功打开,有报错信息
- 使用Ollydbg打开该程序
- 尝试寻找程序入口点
a) 使用了堆栈平衡,但是ESP第一次变红之后设断点并不能找到入口点
b) 一路F8发现了一个PUSHAD,可以进行尝试寻找,结果成功
c) 入口点为:0x00401300
- 按F8执行,发现在执行004013E4 E8 26FCFFFF CALL 12080085.0040100F后程序完全执行,所以再次执行,进入该函数段
- F8和F7交替使用,快速浏览程序,最终锁定两个函数
a) 00401067 E8 99FFFFFF CALL 12080085.00401005 进入运行之后发现其功能为输入用户名和密码
b) 00401083 E8 82FFFFFF CALL 12080085.0040100A
进入运行之后发现功能为判断函数
- 猜测函数12080085.0040100A为关键函数,对其进行进一步分析
a) 锁定CMP和JNZ,猜测为判断用户名和密码是否合法,F8执行进行验证,发现与猜测吻合
b) 首先看第一个CMP位置00401185 3B45 0C CMP EAX,DWORD PTR SS:[EBP+C]
可以进行内存地址数据跟随,发现DWORD PTR SS:[EBP+C]值为==》0019FEC0 34 12 CD
AB,这就是我们之前输入的密码,而且这里输入的小写转换为了大写格式,所以该程序将我们的输入以16进制读取入内存 EAX
FFA276A2我们猜测就是该程序的flag,先记着
c) 输入上一步猜测的flag再次调试程序
顺利执行到下一步,没有进行跳转,说明找到了正确的flag
d) 分析第二个CMP:0040118D 3B05 347A4200 CMP EAX,DWORD PTR DS:[427A34]
这里的EAX值为123456,是我们之前输入的用户名 那么DWORD PTR DS:[427A34]==》00427A34 D5 53
B8 00就是正确的用户名(B853D5)
- 测试结果的正确性
程序输出Congrulation!!,表示我们登录成功