i春秋2020新春战疫赛-re-吃鸡神器
新手一枚,如有错误(不足)请指正,谢谢!!
<mark>个人博客:点击进入</mark>
题目描述:
卢姥爷收到了朋友发来的“吃鸡神器”,但是朋友忘了告诉他登录账户和密码,⽽且卢姥爷也不好意思去问。所以 请为卢姥爷以 “lubenwei” 为⽤户名注册个账户。flag格式为 “flag{对应密码}”
题目下载:
链接: https://pan.baidu.com/s/1gVE158CY6VmSV4qUwtXXqA 提取码: 2020
OD载入,字符串搜索
找到关键字符串,双击进入
F2下断点,运行程序,
输入用户名和假码,进行login
程序被断下来。
ctrl+F9执行到返回,返回上层函数
发现所在模块变成了一个dll,继续ctrl+F9执行到返回。发现来到了Login主模块
发现没有跳过去的跳转啥的。retn返回上层call
来到这里
这个程序IDA的基址和OD的基址一样,都是0x400000,用IDA配合查看
用IDA找到弹窗call地址0x00402ade
快捷键G打开跳转地址窗口
F5查看伪代码
发现判断是否进行错误弹窗代码的条件是402090函数参与的,双击进入查看伪代码
加上OD调试可知此处将输入的用户名的每个字符取出,在35~41行的循环里,对result进行变换最终返回result
因为用户名题目已经给出,所以返回的result为一个定值0x41d26f00
返回OD,也就是eax的值为0x41d26f00
,而eax与edi进行比较,来控制下面的跳转,edi是在0x4021d1地址处被eax赋值的。
而eax是0x4021c9地址处调用的0x401fb0
call的返回值。
IDA查看401fb0()函数
使用OD调试可知这部分是对输入的密码进行处理。输入只能是0~9,a~f。
(其实就是将输入的十六进制字符串转换为十六进制数值然后返回
若想成功,也就是对密码处理后的返回值是0x41d26f00
,也就是密码是字符串"41d26f00"
根据题干输入密码即为flag
最终flag为flag{41d26f00}