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}