• http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关


      做成功这道逆向题了,哈哈哈哈。
      启程。
      运行了一下子程序,发现它是要保证所有灯亮着才会给flag。如下图所示。
      我聪明滴认为首先可以通过关键字符串找到关键代码位置哦。
    1.找到关键代码位置
      使用olldbg运行此程序,右键反汇编界面-》查找-》所有参考文本字串。看到了“the flag is”。如下图
      记住这一块的详细信息。如下。
    文本字串参考位于 ConsoleA:.textbss, 条目 1
    地址=0045E968
    反汇编=push ConsoleA.0050B0F0
    文本字串=ASCII "done!!! the flag is "
      emmmm,看到了地址是0045E968,那可以想办法修改代码跳转到此处哦。
     
    2.修改代码
      拿起米尺划重点。第一点,很多时候那些非跳转的代码是不能篡改成跳转代码的,好像内存将那儿调成不可写,反正运行不成功。第二点,和脱壳一样,有些call会卡住就记住,重新来过得时候记得F4直接在此call下一行继续运行即可。 目的是什么,目的就是找到jmp语句篡改跳到关键语句处。
      在找jmp语句中,我经历了如下call,特此记住。
    00460373  |.  E8 D8FCFFFF        call ConsoleA.00460050
    00460058  |.  E8 13000000        call ConsoleA.00460070
    > E8 80010000   call ConsoleA.00460340
    00460359  |.  E8 609AFFFF   call ConsoleA.00459DBE
      那么,这时候,就可以愉快地直接从地址“00460359”出发,找到jmp语句篡改。
      按运行键,运行到后,一步一步往后走起来-。-
      哇,找到jmp语句,毫不犹豫地篡改。
     
      执行,有回显了,看见没。如下图
      继续运行,不一会儿,就蹦出flag。
      开心,愉快地结束。
      但目前,我看有说法说,这是一种取巧的方法,就是暴力的方法,不能应用到实践中。真正的逆向应该是分析逻辑,然后编写功能去顺着它正确的逻辑走下去,这也是我后面需要努力的。
  • 相关阅读:
    Python 描述符(descriptor) 杂记
    Celery 使用简介
    异步任务神器 Celery 简明笔记
    高性能框架gevent和gunicorn在web上的应用及性能测试
    Flask + Gunicorn + Nginx 部署
    Mysql查看最大连接数和修改最大连接数
    配置 influxDB 鉴权及 HTTP API 写数据的方法
    Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次
    linux端口开放指定端口的两种方法
    java自带的监控工具VisualVM一
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10297580.html
Copyright © 2020-2023  润新知