noycorp @noycorpDASCTF 2024 [最后一战|寒夜破晓,冬至终章]RE-tryre

tryre

无壳64位程序,IDA打开进行分析,可以看到一段密文,用于在末尾进行验证。观察加密流程可以注意到有一个被反复调用的字符串:

ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/

通过长度和字符内容可以判断这应该是一个base64码表,那么此处就是魔改的base64机密。但是直接用它对密文进行解码失败,显然存在其他的加密操作,接着往下看:

根据上下代码段可知此处的v8指向用户输入的字符串,v9同样是指针,因此这里就是遍历用户输入并进行异或操作,重复一次即可:

import base64
enc = list("M@ASL3MF`uL3ICT2IhUgKSD2IeDsICH7Hd26HhQgKSQhNCX7TVL3UFMeHi2?")
flag = ""
for i in range(len(enc)):
    flag += chr(ord(enc[i]) ^ 2)
o_table = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
n_table = b"ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/="
n_bytes = bytes.maketrans(n_table, o_table)
print(base64.b64decode(flag.translate(n_bytes)).decode())

先异或,再进行换表的base64解码就能得到flag。

flag:DASCTF{454646fa-2462-4392-82ea-5f809ad5ddc2}

0 reply, 1 reactionAn article posted on 3/5/2025, 4:50:44 AM
Solar Network Post Web PreviewTo get full view of this post, open it on Solian