zoukankan      html  css  js  c++  java
  • 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。
      开心,愉快地结束。
      但目前,我看有说法说,这是一种取巧的方法,就是暴力的方法,不能应用到实践中。真正的逆向应该是分析逻辑,然后编写功能去顺着它正确的逻辑走下去,这也是我后面需要努力的。
  • 相关阅读:
    关键字查询(含代码)
    数据表的基本操作(含代码)
    Java第一课!
    怎样学好 java ?
    01-C语言程序框架
    00-C语言概述
    RabbitMQ 数万个amq.gen-*的队列,导致内存溢出
    FFmpeg学习笔记1-C++编程
    C++ 应用程序发布相关问题
    动态链接库(DLL)
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10297580.html
Copyright © 2011-2022 走看看