一、个人赛
web
re
goodpy
根据题目知道是py字节码。相关(https://www.cnblogs.com/yinguohai/p/11158492.html)
py3.7每条指令是2,py2.7是3。
可以通过直接阅读字节码翻译出原py语句。(偷懒翻个大概)
import os
a=0
flag=input()
for i in range(len(flag)):
a+=1
if a!=32:
print 'error'
exit()
if flag[0]!='f' and flag[1]!='l' and flag[2]!=a:
print 'error'
exit()
tmp=[]
for i in range(a):
tmp.append(flag[i])
for i in range(a):
tmp[i]=ord(tmp[i])-9
for i in range(a):
tmp[i]^=51
for i in range(a):
tmp[i]=tmp[i]+8
tmp1=tmp[a-3]
tmp2=tmp[a-2]
tmp3=tmp[a-1]
for i in range(a-3):
tmp[a-1-i]=tmp[a-1-i-3]
tmp[0]=tmp3
tmp[1]=tmp2
tmp[2]=tmp1
for i in range(a):
if i%7!=1:
tmp[i]^=119
angrysnake
ida打开分析,发现有几处花指令,并且这些花指令都是相同的格式,写个py脚本去除。
去花脚本
import ida_search
t='e8 00 00 00 00 48 83 04 24 06 c3'
start=0x147c
end=0x2621
rip=start
for rip in range(start,end):
a=ida_search.find_binary(rip,end,t,16,1)
'''xor_num=get_wide_dword(a+11)
j_addr=(a+8)^xor_num
s=j_addr-a-5
patch_byte(a,0xe9)
patch_dword(a+1,s)
for k in range(5,23):
patch_byte(a+k,0x90)'''
for i in range(11):
patch_byte(a+k,0x90)
print('s')
去花后分析关键函数
大概流程为,控制蛇吃东西,吃到一定数量执行if()里面的函数。直接修改目标数量为1,吃一个即可。
然后输入,把输入进行xtea和疑似md5的加密,把加密后内容比较。
疑似md5的没看明白,可惜了。
二、团体赛
围观别人写的的writeup
https://zhuanlan.zhihu.com/p/421196426 https://zhuanlan.zhihu.com/p/421202600