buuoj-[羊城杯 2020]easyre

1.无壳64bit 直接打开找到main函数

2.逻辑很清晰,flag经过三重加密,变成了str2

3.那就通过密文,由第三重加密推回就行了

4.第三重

不知道是什么加密,自己写了下试试,是ascii+3,带循环的,如a-->d,z-->c这样子,那咱们减三就行了

str1='EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'
str2=''
for al in str1:
    if ord(al)>=ord('a') and ord(al)<=ord('z'):
        str2+=chr((ord(al) - 97 - 3) % 26 + 97)
    elif ord(al) >= ord('A') and ord(al) <= ord('Z'):
        str2+=chr((ord(al) - 65 - 3) % 26 + 65)
    elif ord(al) >= ord('0') and ord(al) <= ord('9'):
        str2+=chr((ord(al) - 48 - 3) % 10 + 48)
    else:
        str2+=al
print(str2)

得到BjYjM2Mjk4NzMR1dIVHs2NzJjY0MTEzM2VhMn0=zQ3NzhhMzhlOD

5.第二重

是排序,密文的第27--40个放最前面,第0-13个接上,40--52往后接上,14--27在最后面

那就很简单了:先把它分块,然后排序排回去

str='BjYjM2Mjk4NzMR1dIVHs2NzJjY0MTEzM2VhMn0=zQ3NzhhMzhlOD'
for i in range(len(str)):
    print(str[i],end='')
    if (i+1)%13==0:
        print()

分块后手动调序就行:

BjYjM2Mjk4NzM
R1dIVHs2NzJjY
0MTEzM2VhMn0=
zQ3NzhhMzhlOD

重新组合得到:R1dIVHs2NzJjYzQ3NzhhMzhlODBjYjM2Mjk4NzM0MTEzM2VhMn0=

6.第一重,是base64

表在这

不知道为什么多了一个A

解一下试试

因为是标准表,直接网站解就行,得到:GWHT{672cc4778a38e80cb362987341133ea2}

posted @ 2022-12-20 16:59  今天吃大鸡腿  阅读(65)  评论(0编辑  收藏  举报