您的位置:首页 > 其它

BUGKU CTF 逆向第四题游戏过关

2020-05-31 18:54 756 查看

BUGKU CTF 逆向第四题游戏过关

  • 方法
  • 分享一下刚会的逆向第四题游戏过关


    打开之后是这个样子的

    这段英文的意思是下面这个

    玩游戏
    n是灯的序列号,m是灯的状态。
    如果第n盏灯的m是1,它就开,如果不是,它就关。
    起初所有的灯都关上了。
    现在你可以输入n来改变它的状态。
    但是你应该注意一件事,如果你改变了第N盏灯的状态,(N-1)和(N+1)的状态也会改变。
    当所有灯都亮起时,flag就会出现。

    方法

    方法一

    直接输入,一次输入1,2,3,4,5,6,7,8。flag就会出现。

    这个方法太简单粗暴,所以讲一讲其他的方法。

    方法二

    把它放进IDA中,用(alt+t)去搜索flag。
    找到main函数,按F5进行反汇编。

    这是那八个灯的判定。都满足才能出现flag。

    然后去找flag。这个flag上有很多数字,我们可以把那些数字按照下面的运算方式进行运算,并把数字字符化。也可以得到flag。

    方法三

    OD打开它,

    左上 代码窗口

    • 默认用于显示反汇编代码,还用于显示各种注释、标签,分析代码时显示循环、跳转位置等信息。

    右上 寄存器窗口

    • 实时显示CPU寄存器的值,可用于修改特定的寄存器。

    左下 数据窗口

    • 以Hex/ASCII/Unicode值的形式显示进程的内存地址,也可在修改内存地址。

    右下 栈窗口

    • 实时显示ESP寄存器指向的进程栈内存,并修改。

    按右键中文搜索引擎->智能搜索;

    找到flag点进去。

    我们发现这个flag来自上面那个地址00C8E940 55 push 那个,然后我们看一下这个来自哪里。
    (这个地址因人而异,大家会有自己地址,我就按自己的地址来讲述)

    然后继续找00C87AB4。

    然后继续找00C8F66C。

    我们看一下这个,这个地址是由上面jnz跳转过来的,可以查一下上面一共8个跳转,这个就是之前那8盏灯的判断。

    而下面这个JMP就代表那八个判断有一个不满足,就会跳转到这里。

    所以我们把这个jmp的地址(00C8F671)改成call跳转的地址(00C87AB4)这样只要输入1-8任何一个数都可以找到flag。

    点击调试然后运行,随便输入1-8的任意一个数,就可以出现flag。

    the flag is zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: