一、个人赛
web
re
goodpy
根据题目知道是py字节码。相关(https://www.cnblogs.com/yinguohai/p/11158492.html)
py3.7每条指令是2,py2.7是3。
可以通过直接阅读字节码翻译出原py语句。(偷懒翻个大概)
import osa=0flag=input()for i in range(len(flag)):a+=1if 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])-9for i in range(a):tmp[i]^=51for i in range(a):tmp[i]=tmp[i]+8tmp1=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]=tmp3tmp[1]=tmp2tmp[2]=tmp1for i in range(a):if i%7!=1:tmp[i]^=119
angrysnake
ida打开分析,发现有几处花指令,并且这些花指令都是相同的格式,写个py脚本去除。
去花脚本
import ida_searcht='e8 00 00 00 00 48 83 04 24 06 c3'start=0x147cend=0x2621rip=startfor 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_nums=j_addr-a-5patch_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
