• X-CTF(REVERSE入门) game


    运行程序,第一感觉这玩意儿怎么像电路图开关,看下面的英文说什么,果然玩的是开关游戏,游戏的意思是从上到下有8条线路,如果选择n那么n-1、n、n+1线路的状态都会发生改变,直到8条线路的开关状态都是on时,游戏通过。


    图1

    就在我试玩游戏,单个输入1、2、3,同时输入1 2 3 ,迭代输入2 3 4 5 6 7 8 1观察数据变化规律时,得到了flag,不小心通关了游戏。带着疑惑出题人想要的答案是2 3 4 5 6 7 8 1吗开始了逆向


    图2


    之前文章讲过的技巧和知识,就不再详细描述了,如果有不明白的地方建议按照做题题目顺序查看。

    string页面ctrl+f搜索flag字符串


    图3

    进入done!!the flag is字符串的伪代码页面,发现在堆栈里压入了很多字符串,而且在成功函数之后,所以怀疑这些字符串是flag。


    图4

    压入字符串后对每个字符串做了两种异或处理,v6对应的地址是ebp-88h,v7是rbp-87h,v8是rbp-86h......所以&v6到&v63+56的地址是按变量名顺序增长的


    图5

    既然怀疑目前页面是获得flag的页面,那我们就看下什么函数调用了目前的页面,回到汇编页面选则xrefx to


    图6

    弹出这个,尴尬


    图7

    那么我们就翻到汇编最上面,看是从哪里跳过来的,跟上去


    图8

    我们可以发现是sub_45F400这个函数,使用目前页面函数sub_45E940


    图9

    在sub_45F400函数的伪代码里我们可以看见,当8条线路都是on时调用sub_457AB4函数,即调用sub_45F400函数,所以我们可以确定,sub_45F400函数页面就是flag生成的页面。


    图10

    所以写出解密代码

    一、把数据提炼出来


    图11

    二、分成两个数组,运算得到flag

  • 相关阅读:
    九度OJ 1035:找出直系亲属 (二叉树、递归)
    九度OJ 1034:寻找大富翁 (排序)
    九度OJ 1033:继续xxx定律 (基础题)
    九度OJ 1032:ZOJ (基础题)
    centos 6.4 安装mongodb
    数据校验工具类
    《 mongodb 学习 》java 基本操作
    《 mongodb 学习 》基本操作2
    《 mongodb 学习 》之基本操作
    《 mongodb 学习 》之安装篇
  • 原文地址:https://www.cnblogs.com/blackicelisa/p/12263544.html
Copyright © 2020-2023  润新知