分析这道题,爽,能够结合IDA和ollydbg分析代码,美滋滋。但如果以后能直接根据汇编容易地看懂逻辑那就更好了。
参考链接:
  首先根据IDA分析得知主函数是sub_411B70()。查看功能,可知它先随机生成了二维随机数组序列(这其实是伪随机的),然后提示用户输入数,还有个可疑函数sub_41114F(),猜测会处理输入数,最后判断输入的数能在二维随机数组序列中顺利走多久。看回显可知要输入能走得最久且最终数字和最大的数(如下图),即既能走到数组头,又经过的所有点的随机数和最大。emmmm,牵扯到的点有PRNG和Maze(迷宫),哦,还有个加密。

(1)PRNG
  它是一种伪随机数生成器(如下图),使用种子作为输入,攻击者知道种子和算法就能重现输出流。

  看上图,程序提供的种子一直是0xCu,则rand的值就是固定的,那就能复现这个随机数组啦。
(2)可疑函数sub_41114F()
  使用ollydbg动态调试输入的数据,看经过这个函数后的输出数据,可知它将偶数位的字符都变化了,可以认为是单表替换加密,即将固定的字母换成了其他字母。
  经过测试,得知它的替换结果如下。
原数   ABCDEFGHIJKLMNOPQRSTUVWXYZ
替换结果 EFG@ABCLMNOHIJKTUVWPQRS\]^
(3)Maze(迷宫)
  在迷宫中要想走出去且获取的值最大,起点已定,就要从当下着眼,每一步走最大的,这样结果才是最大的。迷宫算法如下图。

  接下来开始破解。可以先复现逻辑数组,然后逆向思维算出最好的走法,最后将走法偶数位通过单表计算替换字符即可。程序如下:
#include<iostream>
using namespace std;
int main() {
       int mountain[20][20];
       memset(mountain, 0, 400 * sizeof(int));
 
       srand(12);
       for (int i = 1; i <= 20; ++i)
       {
              for (int j = 1; j <= i; ++j)
              {
                     mountain[i][j] = rand() % 100000;
              }
       }
 
       int x = 1, y = 1;
       int sum = mountain[x][y];
       for (int i = 0; i < 19; i++) {
              int L = mountain[x + 1][y];
              int R = mountain[x + 1][y + 1];
 
              if (R > L) {
                     printf("R");
                     sum += R;
                     x++;
                     y++;
              }
              else {
                     printf("L");
                     sum += L;
                     x++;
              }
       }
       printf("\n%d\n", sum);
       system("pause");
       return 0;
}
  计算出来路线是RRRRRLLRRRLRLRRRLRL,通过单表计算结果是RVRVRHLVRVLVLVRVLVL,结果出来啦-。-
 
 
 
 
 
 
 

http://ctf.bugku.com/challenges#Mountain%20climbing:bugku--Mountain-Climbing的更多相关文章

  1. http://ctf.bugku.com/challenges#love:bugku--love

      做了一道逆向题目,主要关联到base64编码的知识点.下面做一分析. 题目如下:   通过测试,可知它没有加壳.尝试使用IDA进行分析. 1.IDA分析文件   打开文件后,按[shift+F12 ...

  2. http://ctf.bugku.com/challenges#%E9%80%86%E5%90%91%E5%85%A5%E9%97%A8:bugku--逆向入门

      文件是:   分析挺简单,主要是data urls知识点.     首先使用peid检测是否加壳,发现它居然是jpg文件.使用notepad++查看,结果如下.   嗯,百度一下子,知道了data ...

  3. http://ctf.bugku.com/challenges#Timer(%E9%98%BF%E9%87%8CCTF):Bugku——Timer(阿里CTF)

      做了第一个android apk逆向题,很多工具啥的还没用过,再接再厉.   找到方法发现这个apk支持的SDK API是15-17,于是就下载了API 16并制作了模拟器,但发现还是运行不起来, ...

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

      做成功这道逆向题了,哈哈哈哈.   启程.   运行了一下子程序,发现它是要保证所有灯亮着才会给flag.如下图所示.   我聪明滴认为首先可以通过关键字符串找到关键代码位置哦. 1.找到关键代码 ...

  5. http://ctf.bugku.com/challenges#Easy_Re

      今天做一道逆向题,开心,见证了自己汇编的用途.     首先看它是否加壳? 1.加壳检测   是vc编程的,没有加壳,可以愉快地分析了.   2.分析程序,找到flag.   首先运行一下子程序, ...

  6. bugku 神秘的文件

      题目链接: https://ctf.bugku.com/challenges#%E7%A5%9E%E7%A7%98%E7%9A%84%E6%96%87%E4%BB%B6 工具准备: 1.PC 2. ...

  7. Bugku练习题---MISC---FileStoragedat

    Bugku练习题---MISC---FileStoragedat flag:bugku{WeChatwithSteg0} 解题步骤: 1.观察题目,下载附件 2.下载后发现是一个后缀名为.dat的文件 ...

  8. ctf题目writeup(7)

    2019.2.10 过年休息归来,继续做题. bugku的web题,地址:https://ctf.bugku.com/challenges 1. http://123.206.87.240:8002/ ...

  9. ctf题目writeup(6)

    2019.2.2 依旧是bugku上面的题目,地址:https://ctf.bugku.com/challenges 1. 解压后是60多个out.zip,都是真加密,里面都是1kb的data.txt ...

随机推荐

  1. vc6.0使用

    1.文件结构 工作空间dsw 工程1    Source file        .cpp,main    Header file        .h    Resource files 工程2   ...

  2. too many open files(打开的文件过多)解决方法

    https://blog.csdn.net/roy_70/article/details/78423880 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  3. cordova文件传输系统插件使用:cordova-plugin-file-transfer

    1. 添加插件:cordova plugin add cordova-plugin-file-transfer 2. 调用方法: var fileTransfer = new FileTransfer ...

  4. 【SpringBoot】Logback日志框架介绍和SpringBoot整合实战

    ========================11.Logback日志框架介绍和SpringBoot整合实战 2节课================================ 1.新日志框架L ...

  5. ehcache讲解及实例

    ehcache讲解及实例https://www.cnblogs.com/coprince/p/5984816.html 有些情形下注解式缓存是不起作用的:同一个bean内部方法调用,子类调用父类中有缓 ...

  6. AES对称加密和解密(转)

    AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

  7. 一键精简Windows不常用的字体.cmd

    一键精简Windows不常用的字体.cmd @Echo offset path=%path%;%~dp0setlocal EnableDelayedExpansionset /P dv=请输入要精简W ...

  8. Pycharm初始创建项目和环境搭建

    Pycharm确实是一个非常不错的Python开发IDE,尤其对于初学者而言. 打开新建项目 1.选择新建一个Pure Python项目,新建项目路径可以在Location处选择. 2.Project ...

  9. windows配置远程桌面连接到ubuntu

    最近在用nodejs开发项目,同时也在做一些区块链相关的工作,公司给配的办公电脑着实不错,都是自家品牌的工作站,市场价都是15K+了.但是在win10上装虚拟机,还是不太顺畅的.因为公司电脑是五年到期 ...

  10. 20165312 2017-2018-2 《JAVA程序设计》第4周学习总结

    一.课本五六章知识点总结 1.第五章 继承是一种由已有的类创建新类的机制 子类继承父类的成员变量和方法 子类继承的方法只能操作子类继承和隐藏的成员变量 子类重写或新增的方法只能操作子类继承和新声明的成 ...