BUUCTF Reverse [羊城杯 2020]easyre

好长时间没有更新过博客了,水了一道题。

无壳,64位程序,拖进ida。

逻辑比较简单,先base加密,又经过两次位变换,位变换可以通过爆破得到。

str = "EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG"
string ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890+/="
flag =''
for i in range(len(string)):
    for j in string:
            if ord(j) <= 0x40 or ord(j) >0x5a:
                    if ord(j) <=0x60 or ord(j) >0x7a:
                            if ord(j) <=47 or ord(j) >57:
                                    t = j
                            else:
                                    t = chr((ord(j)-48+3)%10 + 48)
                    else:
                            t =chr((ord(j)-97+3)%26 + 97)
            else:
                    t = chr((ord(j) - 65 + 3) % 26 + 65)
            if t == str[i]:
                    flag +=j
                    break
print(flag)

还有一次位变换是十三个为一组分三组,进行换位。

最后base之后得到flag

flag{672cc4778a38e80cb362987341133ea2}

 

posted @ 2021-06-27 23:21  Sk2rw  阅读(307)  评论(0编辑  收藏  举报