zoukankan      html  css  js  c++  java
  • 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"。完

      

      

      

      

  • 相关阅读:
    容器虚拟化之LXC(LinuX Container)
    Twemproxy+Keepalived+Redis
    Haproxy+Keepalived+Nginx
    Redis-sentinel集群
    Server2008r2 指定默认用户自动登录--注册表
    .Net Core应用框架Util介绍(二) 转
    .Net Core应用框架Util介绍(一)转
    一分钟教你知道乐观锁和悲观锁的区别
    设置DataTable行属性
    js中的内置对象
  • 原文地址:https://www.cnblogs.com/rlee063/p/8511943.html
Copyright © 2011-2022 走看看