2023全国农信银CTF逆向Baby8or解析

搜索字符串定位到flag代码片段
2023全国农信银CTF逆向Baby8or解析_第1张图片

按CTRL + X 跳转到main函数,按F5 生成伪代码进行分析。
发现一个加密函数,当加密后的数据和genc[i]数组中的值对比一致则表示正确flag,字符串长度为35。
2023全国农信银CTF逆向Baby8or解析_第2张图片
双击genc[i] 找到genc[i]中的数据,转成10进制得到数组
genc=[172,102,148,227,47,163,83,255,156,61,182,107,233,233,87,185,7,181,214,59,179,8,181,143,29,197,72,187,163,77,188,113,151,241,104]
2023全国农信银CTF逆向Baby8or解析_第3张图片

再双击 encrypt函数,分析代码逻辑
2023全国农信银CTF逆向Baby8or解析_第4张图片

分析 当输入的字符串,每次取5个,且下标为0,1,2,3,4的5个字母分别,异或gkey,byte_4021,byte_4022,byte_4023,byte_4024,byte_4025变量的值。
双击gkey就能找到这个变量的值
2023全国农信银CTF逆向Baby8or解析_第5张图片

最后5个字母再异或byte_4025 ,且每次减1。逻辑如下,依次循环:

genc[0]^(byte_4025-0)^gkey)
genc[1]^(byte_4025-1)^byte_4021
genc[2]^(byte_4025-2)^byte_4022
genc[3]^(byte_4025-3)^byte_4023
genc[4]^(byte_4025-4)^byte_4024

生成代码

genc=[172,102,148,227,47,163,83,255,156,61,182,107,233,233,87,185,7,181,214,59,179,8,181,143,29,197,72,187,163,77,188,113,151,241,104]
gkey       =  179
byte_4021  =  125
byte_4022  =  158
byte_4023  =  248
byte_4024  =  44
byte_4025  =  91
a=''
for i in range(0,34,5):
     a+=(chr(genc[i] ^ (byte_4025-i )^ gkey))
     i+=1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4021))
     i+= 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4022))
     i += 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4023))
     i+= 1
     a+=(chr(genc[i] ^ (byte_4025 - i) ^ byte_4024))
print(a)

DASCTF{57CTF8_6F1ag_G3n3r4ted_2023}

你可能感兴趣的:(ctf,安全)