CG-CTF——你大概需要一个优秀的mac

由于上个星期比赛的原因,发现了自己许许多多的问题,尤其是在python方面,几乎是一片空白,所以这个星期恶补了一下python,算是搞清楚了一些,打算找个题练练手,不能纸上谈兵不是QAQ
这是CG-CTF一道老题了,之前因为不会python一直没写,今天就拿它来看看。
用IDA打开来看,是这样的:
CG-CTF——你大概需要一个优秀的mac_第1张图片
很明显它是经过func1,xfunc1…xfunc5这六个函数一番操作之后达到check函数需要满足的条件
那我们看看这个check要满足什么条件吧:
CG-CTF——你大概需要一个优秀的mac_第2张图片
大概就是个比较,操作后的字符串要和unk_100000ED0相等
欧克,逆向一下,用python尝试写了一个小的脚本

b = [0x15,0x1F,0x12,0x14,0x08,0x3A,0x46,0x2C,0x07,0x1B,0x51,0x13,0x3F,0x57,0x08,0x05,0x3F,0x30,0x32,0x51,0x52,0x02,0x6E,0x78,0x16,0x7C,0x6E,0x61,0x70,0x48,0x1C,0x3B,0x32,0x2A,0x13,0x45,0x07,0x2A,0x18,0x0C,0x6E,0x41,0x70,0x04,0x06,0x6E,0x5C,0x00,0x42,0x45,0x70,0x5A,0x02,0x04,0x0E,0x4C]

for i in range(0,56):
    b[i]^=0xDE
for i in range(0,10):
    b[i]^=0xAD
for i in range(0,10):
    b[i+10]^=0xBE
for i in range(0,10):
    b[i+20]^=0xEF
for i in range(0,10):
    b[i+30]^=0xAB
for i in range(0,16):
    b[i+40]^=0xEF
print(b)
flag = ''
for i in range(0,56):
    flag += chr(b[i])
print(flag)

这里有一个小坑,在看unk_100000ED0的时候,它的汇编是四个字节四个字节显示出来的,就是这样:
CG-CTF——你大概需要一个优秀的mac_第3张图片
然后在后面的某个部分出现了0x00这样折磨人的小妖精,如果不仔细看的话,很容易就被忽略掉了(我一个个查的眼睛疼)
最后,得出flag√

flag{I5_th1s_7he_PR1c3_I’M_PAyiNG_f0r_my_pA57_m1stAk35?}

结论证明,python还是很重要滴!
要努力向大佬看齐orz

你可能感兴趣的:(CTF)