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地址处调用的0x401fb0call的返回值。

IDA查看401fb0()函数

使用OD调试可知这部分是对输入的密码进行处理。输入只能是0~9,a~f。
(其实就是将输入的十六进制字符串转换为十六进制数值然后返回

若想成功,也就是对密码处理后的返回值是0x41d26f00,也就是密码是字符串"41d26f00"

根据题干输入密码即为flag
最终flag为flag{41d26f00}