拖入IDA查看主函数,只有一个输入和简单的比较。
根据比较算法写出python脚本
a=[0x53,0x54 ,0x51,0x40,0x50 ,0x43 ,0x7D ,0x26 ,0x29 ,0x28 ,0x46 ,0x5A ,0x58 ,0x6A ,0x60 ,0x66,0x69,0x74,0x6b,0x6E]
for i in range(0,len(a)):
print(chr(i^a[i]),end='')
运行得到
SUSCTF{!!!LQTgniyey}
拖入IDA进入主函数,这里的函数流程大概是 先获取本地时间,然后根据年月日时分秒的值分别要满足不同的条件才能进入checkflag()函数
解方程得:
综合得到时间为 2019年4月1日 1:21:38 即可通过
然后进入checkflag函数
进入checkflag函数后需要输入密码
这里得知输入的长度应为32
这里需要利用正确的时间以及我们输入的字符串来生成一段字符,动态调试里得知该字符串前三个为 0x11,0x11,0x0b后续为我们输入的字符串的值,但是并不是ascii码的值,a=10 b=11以此增加
这里生成一个码表,就是0123456789abcdefghijklmnopqrstuvwxyz
生成完成后进入encode
给出python脚本
a="0123456789abcdefghijklmnopqrstuvwxyz"
b="9165do0fdbbz2cb8aiay1f65e6m4qd26"
c=[0x11,0x11,0x0b]
d=[9,1,6,5,13,24,0,15,13,11,11,35,2,12,11,8,10,18,10,34,1,15,6,5,14,6,22,4,26,13,2,6]
#print(chr(ord('a')+36+1-16-10),end=' ')
#print(36+1-16)
#skvdtsnmlopeenxunlgbg
#28 20 32 13 29 28 23 22 21 24 25 14 14 23 33 30 23 21 16 11 16
for i in range(0,len(d)):
c.append(36+d[i]-c[i])
for i in range(0,len(c)):
if c[i]>36:
c[i]-=36
elif c[i]<0:
c[i]+=36
for i in c:
print(chr(ord('a')-10+i),end='')
其中d[]为b[]的每一项在a中的下标。
得到 hhbskvdttnmkopfenwunmgbfzvqfbwpfhdr
去除前面的hhb即为flag
s:11
u:000111
c:00010
t:000110
f:100
{:00001
a:01
e:0011
d:101
}:00000
w:0010
susctf{asdasdwwdsadasefeessasdassdfdsfsdwasasasasasdfasdfsa}