File看文件信息,
xuenixiang_2019_re_Reverse1
拖入ida打开,找到程序入口,main函数,和关键函数strcmp(),encode()
xuenixiang_2019_re_Reverse1
发现是字符串s和enflag进行比较,一致则输出flag,而s是经过encode后的字符 , 我们先查看enflag()
xuenixiang_2019_re_Reverse1
将前三个字符 转化为ascii ,然后存放到一个数组里
xuenixiang_2019_re_Reverse1
得到了加密后的字符串, 接着查看encode()函数,看看它的加密算法
xuenixiang_2019_re_Reverse1
加密的过程是 将用户输入的字符串,拆分成了3组,每组进行异或和加减运算之后 累计到一个变量里,将这个变量跟enflag做比较。 所以写一个decode: nflag=[0x7e,0x74,0x75,0x7f,0x67,0x63,0x24,0x63,0x60,0x65,0x74,0x6d,0x24,0x7d,0x43,0x25,0x7a,0x69]
v3=[]
v4=[]
v5=[]
v7=18
flag=''
for i in range(0,len(enflag),3):
v5.append((enflag[i]^v7)-6)
v4.append((enflag[i+1]^v7)+6)
v3.append(enflag[i+2]^v7^6)
for j in range(v7/3):
flag+=chr(v5[j])+chr(v4[j])+chr(v3[j])
print flag
xuenixiang_2019_re_Reverse1
flag{w0wtqly0uW1n}
|