攻防世界 Reverse高手进阶区 2分题 BABYRE

Posted 思源湖的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了攻防世界 Reverse高手进阶区 2分题 BABYRE相关的知识,希望对你有一定的参考价值。

前言

继续ctf的旅程
攻防世界Reverse高手进阶区的2分题
本篇是BABYRE的writeup

发现攻防世界的题目分数是动态的
就仅以做题时的分数为准了

解题过程

PE查壳


扔进IDA


显然关键是judge
但是直接反编译失败
因为judge被加密了

根据7-11行,
可以解密

然后得到judge

signed __int64 __fastcall judge(__int64 a1)

  char v2; // [rsp+8h] [rbp-20h]
  char v3; // [rsp+9h] [rbp-1Fh]
  char v4; // [rsp+Ah] [rbp-1Eh]
  char v5; // [rsp+Bh] [rbp-1Dh]
  char v6; // [rsp+Ch] [rbp-1Ch]
  char v7; // [rsp+Dh] [rbp-1Bh]
  char v8; // [rsp+Eh] [rbp-1Ah]
  char v9; // [rsp+Fh] [rbp-19h]
  char v10; // [rsp+10h] [rbp-18h]
  char v11; // [rsp+11h] [rbp-17h]
  char v12; // [rsp+12h] [rbp-16h]
  char v13; // [rsp+13h] [rbp-15h]
  char v14; // [rsp+14h] [rbp-14h]
  char v15; // [rsp+15h] [rbp-13h]
  int i; // [rsp+24h] [rbp-4h]

  v2 = 102;
  v3 = 109;
  v4 = 99;
  v5 = 100;
  v6 = 127;
  v7 = 107;
  v8 = 55;
  v9 = 100;
  v10 = 59;
  v11 = 86;
  v12 = 96;
  v13 = 59;
  v14 = 110;
  v15 = 112;
  for ( i = 0; i <= 13; ++i )
    *(_BYTE *)(i + a1) ^= i;
  for ( i = 0; i <= 13; ++i )
  
    if ( *(_BYTE *)(i + a1) != *(&v2 + i) )
      return 0LL;
  
  return 1LL;

简单

v2 = 102
v3 = 109
v4 = 99
v5 = 100
v6 = 127
v7 = 107
v8 = 55
v9 = 100
v10 = 59
v11 = 86
v12 = 96
v13 = 59
v14 = 110
v15 = 112

data=[]
for i in range(2,16):
  data.append(locals()['v'+str(i)])

flag=''
for i in range(14):
  flag+=chr(data[i]^i)

print(flag)

得到flag:flagn1c3_j0b

结语

关键是解密

以上是关于攻防世界 Reverse高手进阶区 2分题 BABYRE的主要内容,如果未能解决你的问题,请参考以下文章

攻防世界 Reverse高手进阶区 2分题 easyre-153

攻防世界 Reverse高手进阶区 2分题 easyre-153

攻防世界 Reverse高手进阶区 2分题 easyre-153

攻防世界 Reverse高手进阶区 2分题 secret-galaxy-300

攻防世界 Reverse高手进阶区 3分题 crackme

攻防世界 Reverse高手进阶区 3分题 梅津美治郎