[ACTF新生赛2020]rome

DIE查壳

32位,无壳

32位ida打开

界面很难看,按\后得到加密程序

image

关注这个while循环,明明是个循环16次,但却v1却只有四个元素

从声明变量这里可以看到v1是int数组,每个元素占四字节

image

梳理一下逻辑,v1是我们需要求的flag,也就是传入的数据,这里通过第一个while循环进行了两次if判断,处理输入的flag,也就是v1中的每个字节

image

最后用第二个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

posted @ 2024-10-26 17:38  结城希亚  阅读(5)  评论(0编辑  收藏  举报