SUSCTF逆向部分WP

RE1 签到题

SUSCTF逆向部分WP_第1张图片
直接拖入IDA查看主函数。

RE2

SUSCTF逆向部分WP_第2张图片
拖入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}

RE3 Time

SUSCTF逆向部分WP_第3张图片
拖入IDA进入主函数,这里的函数流程大概是 先获取本地时间,然后根据年月日时分秒的值分别要满足不同的条件才能进入checkflag()函数
解方程得:
SUSCTF逆向部分WP_第4张图片
综合得到时间为 2019年4月1日 1:21:38 即可通过
然后进入checkflag函数
进入checkflag函数后需要输入密码
SUSCTF逆向部分WP_第5张图片
这里得知输入的长度应为32
SUSCTF逆向部分WP_第6张图片
这里需要利用正确的时间以及我们输入的字符串来生成一段字符,动态调试里得知该字符串前三个为 0x11,0x11,0x0b后续为我们输入的字符串的值,但是并不是ascii码的值,a=10 b=11以此增加
SUSCTF逆向部分WP_第7张图片
这里生成一个码表,就是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}

你可能感兴趣的:(逆向工程,ctf)