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

shift+f12看到pass,跟进

image-20241115173024617

image-20241115173036093

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

image-20241115173139720

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

image-20241115173215672

最后要为KanXueCTF2019JustForhappy

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

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

aAbcdefghiabcde是abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ

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

写解密代码

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{}