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

X-CTF(REVERSE入门)   game
图1

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

X-CTF(REVERSE入门)   game
图2


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

 

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

X-CTF(REVERSE入门)   game
图3

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

X-CTF(REVERSE入门)   game
图4

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

X-CTF(REVERSE入门)   game
图5

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

X-CTF(REVERSE入门)   game
图6

弹出这个,尴尬

X-CTF(REVERSE入门)   game
图7

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

X-CTF(REVERSE入门)   game
图8

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

X-CTF(REVERSE入门)   game
图9

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

X-CTF(REVERSE入门)   game
图10

所以写出解密代码

一、把数据提炼出来

X-CTF(REVERSE入门)   game
图11

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

X-CTF(REVERSE入门)   game

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-04-10
  • 2022-12-23
  • 2021-09-13
  • 2022-12-23
  • 2021-05-17
  • 2021-12-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-01
  • 2021-05-25
  • 2022-12-23
相关资源
相似解决方案