逆向攻防世界CTF系列33-流浪者

shift+f12看到pass,跟进

image-20241115173024617

image-20241115173036093

是个输入的处理,其实很简单,看不懂也没关系,先看看return

image-20241115173139720

这里strcmp成功后return的就是成功

image-20241115173215672

最后要为KanXueCTF2019JustForhappy

1
2
3
4
5
6
while ( *(_DWORD *)(a1 + 4 * v4) <= 0x3Du )
{
Str1[v4] = aAbcdefghiabcde[*(_DWORD *)(a1 + 4 * v4)];
++v4;
}
Str1[v4] = 0;

上面的代码其实就是字典的一个映射出来,模拟一下就知道,我们只要把KanXueCTF2019JustForhappy推回去得到映射关系a1数组就行也就是v5。

aAbcdefghiabcde是abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ

得到映射列表后我们回去看最初的代码,其实可以发现就是把输入的字符处理到1-62

写解密代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dict = 'abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ'

enc = 'KanXueCTF2019JustForhappy'

list = []

for i in range(len(enc)):
list.append(dict.index(enc[i]))

for i in range(len(list)):
if list[i] < 10:
print(chr(list[i] + 48),end='')
elif list[i] < 36:
print(chr(list[i] + 87),end='')
else:
print(chr(list[i] + 29), end='')

j0rXI4bTeustBiIGHeCF70DDM

根据提示加上flag{}