BUU[羊城杯 2020]easyre

分析

首先查壳,发现是无壳64位的,放入对应的IDA分析

image-20220627164839521

可以看到,这里是只有那个if语句不成立才能得到到flag,于是去看一下那三个encode函数

第一个encode

image-20220627165127302

这里看到这些地方,猜测是base64,于是去一下alphabet函数看一下码表

image-20220627165217274

就是普通的base64

第二个encode

image-20220627165243442

发现是将编码后的字符串以13个一组的换位置

第三个encode

image-20220627165625393

这里看到先减去48(0) 97(a) 65(A)再位移三位然后除于再加到原来的大小写,很容易得出这是移三位的凯撒密码

脚本

import base64
data='EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'
data1=''
for i in data:#凯撒密码部分解密
if ord(i)>=48 and ord(i)<=57:
data1 += chr((ord(i)-3-48)%10+48)
elif ord(i)>=65 and ord(i)<=90:
data1 += chr((ord(i)-3-65)%26+65)
elif ord(i)>=97 and ord(i)<=122:
data1 += chr((ord(i)-3-97)%26+97)
else:
data1 += i
flag = data1[13:26] + data1[39:] + data1[:13] + data1[26:39]#凯撒解码后的换位置
print(base64.b64decode(flag))#base64解密
#GWHT{672cc4778a38e80cb362987341133ea2}

总结

要善于发现每个函数的特征部分,发现是什么加密原理,便于解密。还要加油锻炼自己写脚本的能力我的能力还是不太行/(ㄒoㄒ)/~~