Ea5yR3versing

【Reversing】第一题:2h

  emmm题目就是这样,一道求密码的题目

   字串查找也好,API查找也好先在 Incorrect Password 处打断点,然后从该处找到算法call(要先确定一个CALL不是算法CALL之后再RET,开始在上一层判断是否单击了按钮的CALL里循环了好久).

  单步向下执行,前面好几句都是在初始化桟里的内容

  这一步OD已经告诉是对GetDlgItemTextA的调用,即获取文本框内的内容,那么之后肯定就是对输入的密码的正误判断。

  紧跟的这一条指令,通过数据窗口跟随esp可以发现esp+0x5里的内容是输入的密码的第二个数,即判断第二个数是否为 a (0x61)。

  之后是一条jnz,如果不等就跳转到弹出incorrect对话框,则可以判断密码的第二个数是 a 。

 

  屏蔽掉这个jmp,之后几步都在为一个call传递参数,传递了数字 2 ,字符串“5y”和第三个输入字符的地址,大致可以判断是要判断从第三个位置开始的两个字符是否是"5y".

  然后进入这个CALL验证,开始几步保留现场形成新的桟帧。假巴意思判断一下穿进来的参数有没有问题。

 【jecxz:如果ecx为0则跳转】;【倒数第三步ecx = 2】

  接下来又涉及到一个高级操作。作用是计算字符串长度【其实感觉没用啊】。

【scas: 检索字符串,每次ecx - 1】

  做了两次比较比较"5y"和再次确认是y。该CALL结束。

  如果返回值是0,继续执行,否则弹窗!

  判断第四位和'R'是否相同,实际上他拷贝了“R3versing”,大胆猜测接下来是对R3versing的比较。

  循环两个两个的比较,直到遇到00。

  假巴意思判断一下eax。判断是否进行过比较。

  最后再判断一下第一位是否是"E".

  之后就是弹窗“congratulation!!”.

 

  flag:"Ea5yR3versing"。完

  

  

  

  

原文地址:https://www.cnblogs.com/rlee063/p/8511943.html