Ha1cyon-CTF 芜湖

感觉自己还是很欠缺的,尤其是C++的逆向,对stl的不熟悉,直接误导我静态分析了。。。然后这种题和平常不同的是没有任何混淆和flag验证,需要的是耐心的分析,在过程中,找到线索,这题还考了base64的隐写,2333,开拓了思维,感谢出题师傅,也和出题师傅交流了很久,这种题十分适合动调,注意中间过程,尤其是寄存器和堆栈的变化。
拖入ida,找到了主函数,整体逻辑很清晰。
在这里插入图片描述
重点说下几个函数,这个函数名真的有点难看,最好能改个名字看,不然容易晕。
这个函数,
在这里插入图片描述
这玩意是四个与非门,构成了一个异或门。。。模电nb。
在这里插入图片描述

(NAND)

其实重点在这
在这里插入图片描述
相等于把二维数组进行提取,并进行了一波操作,然后打印出来。这里很可疑是出现了一堆的base64,拿去解码是歌词,不对,又因为很多行base64,所以会联想到隐写,模拟执行一下,就打印出一堆base64,base64隐写脚本,跑一下就出来了

def base64_stego(lines):
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    flag = ''
    temp = 0
    digit = 0
    for i in lines:
        if i[-1] != '=':
            continue
        elif i[-2] != '=':
            digit += 2
            temp = (temp << 2) + (alphabet.find(i[-2]) & 0x3)
        else:
            digit += 4
            temp = (temp << 4) + (alphabet.find(i[-3]) & 0xf)
        if digit == 8:
            digit = 0
            flag += chr(temp)
            temp = 0
        elif digit > 8:
            digit = 2
            flag += chr(temp >> 2)
            temp = temp & 0x3
    return flag
awd=[]
with open("1.txt","rb") as f:
    lines=f.readlines()
    for i in lines:
        awd.append(i.replace("
","").replace("
",""))
print awd
print base64_stego(awd)
原文地址:https://www.cnblogs.com/YenKoc/p/12779870.html