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。
      开心,愉快地结束。
      但目前,我看有说法说,这是一种取巧的方法,就是暴力的方法,不能应用到实践中。真正的逆向应该是分析逻辑,然后编写功能去顺着它正确的逻辑走下去,这也是我后面需要努力的。
  • 相关阅读:
    Select * 一定不走索引是否正确?
    csshack技术
    ios学习笔记之UIViewControl生命周期
    selenium webdriver (python)
    string中Insert与Format效率对比、String与List中Contains与IndexOf的效率对比
    HDU 2083 简易版之最短距离
    xtrabackup支持的engine
    C++可变参数的另一种实现
    程序员应具备的素质(国内的大多程序员生产力不够,所以只能早早转行)
    Qt导出Excel的简单实现
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10297580.html
Copyright © 2011-2022 走看看