由于上个星期比赛的原因,发现了自己许许多多的问题,尤其是在python方面,几乎是一片空白,所以这个星期恶补了一下python,算是搞清楚了一些,打算找个题练练手,不能纸上谈兵不是QAQ
这是CG-CTF一道老题了,之前因为不会python一直没写,今天就拿它来看看。
用IDA打开来看,是这样的:
很明显它是经过func1,xfunc1…xfunc5这六个函数一番操作之后达到check函数需要满足的条件
那我们看看这个check要满足什么条件吧:
大概就是个比较,操作后的字符串要和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的时候,它的汇编是四个字节四个字节显示出来的,就是这样:
然后在后面的某个部分出现了0x00这样折磨人的小妖精,如果不仔细看的话,很容易就被忽略掉了(我一个个查的眼睛疼)
最后,得出flag√
flag{I5_th1s_7he_PR1c3_I’M_PAyiNG_f0r_my_pA57_m1stAk35?}
结论证明,python还是很重要滴!
要努力向大佬看齐orz