rctf2019-DontEatMe

介绍

rctf2019的一道逆向题目。

分析流程

  1. 生成8个种子固定的”随机数”,并处理(后面分析可知是blowfish的初始化)
  2. 输入flag,并进行hex转换。
  3. 用blowfish进行解密。
  4. 初始化一个迷宫(初始位置为11行6列)
  5. 使用解密后的结果作为迷宫的输入
  6. 如果走到结束则正确(结束位置为5行10列,只能走16步)

解答方法

用peid查一下,可知有blowfish的特征值,且分析程序发现是ECB模式。

手动走一下迷宫,结果为ddddwwwaaawwwddd,使用blowfish进行加密就是输入结果。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
'''
1111111111111111
1000000000111111
1011111110111111
1011111110111111
101111000e000111
1011110111110111
1011110111110111
1011110000110111
1011111110110111
1011111110110111
10000s0000110111
1111101111110111
1111100000000111
1111111111111111
1111111111111111
1111111111111111
'''

# ddddwwwaaawwwddd

import blowfish
cipher = blowfish.Cipher(b"\x00\x0F\x1A\x01\x35\x3A\x3B\x20")

step = cipher.encrypt_block(b'ddddwwwa') + cipher.encrypt_block(b'aawwwddd')

flag = ''
for x in step:
flag += hex(x)[2:]

print("RCTF{%s}" % flag)