[ACTF新生赛2020]rome
DIE查壳
32位,无壳
32位ida打开
界面很难看,按\后得到加密程序
关注这个while循环,明明是个循环16次,但却v1却只有四个元素
从声明变量这里可以看到v1是int数组,每个元素占四字节
梳理一下逻辑,v1是我们需要求的flag,也就是传入的数据,这里通过第一个while循环进行了两次if判断,处理输入的flag,也就是v1中的每个字节
最后用第二个whlie循环将处理后的v1与预设字符串v12进行比较
可以逆向加密程序求flag,也可以爆破,这里我们选择爆破
enc = 'Qsw3sj_lz4_Ujw@l'
flag = ''
for i in range(len(enc)):
for k in range(128):
j = k
if j > 64 and j <= 90:
j = ((j - 51) % 26 + 65)
if j > 96 and j <= 122:
j = ((j - 79) % 26 + 97)
if j == ord(enc[i]):
flag += chr(k)
print(flag)
得到flag:Cae3ar_th4_Gre@t
打开ida