findkey
运行程序
输入用户名,输入错误程序会直接结束。
IDA
在这里可以看到一个key
交上去。。
过了。。
动态调试
设置断点后一直F8直到停止,找到输入的语句。在这里我输入了“123456”。
在之后的一步 lea eax,[esp+58h+var_18] 为eax取了一个地址,这个地址就是刚刚输入的用户名。
之后的语句,是一个判断输入的用户名是否达到8位,用户名必须大于8位。
输入的用户名超过8位后,下两条语句是取了两个地址,分别是输入的用户名以及McDull@Aun疑似真实用户名,所以下一步可能会将输入的用户名和McDull@Aun进行比较,如果之后出现将两者比较的语句,我们可以把McDull@Aun确定为用户名。
由此得知McDull@Aun是用户名。
重新输入正确用户名后,一直F8到输入密码的语句。
输入的密码不能超过十一位。
之后是将输入的密码与{0x10,0x2A,0x35,0x3A,0x1B,0x3C,0x33,3,0x22,0x23}异或
并将异或后的值存入[esp+eax+50h+var_25]
再把[esp+eax+50h+var_25]中的值与”I_LOVE_CTF”比较是否相等。
因为a ⊕ b ⊕ b = a. 将{0x10,0x2A,0x35,0x3A,0x1B,0x3C,0x33,3,0x22,0x23}与”I_LOVE_CTF”异或可以得到正确的密码.
得到密码 YuyuMyl@ve
然而错了。。因为密码是十一位的。。
==在IDA中,将鼠标放在地址上,只能看到这个地址开始后的十个,应该enter去看看全部的数据。==
所以应该将{0x10,0x2A,0x35,0x3A,0x1B,0x3C,0x33,3,0x22,0x23,0x7E}与”I_LOVECTF“异或可以得到正确的密码.
得到正确密码”YuyuMyl@ve!”
得到KEY{管理员密码}