Press "Enter" to skip to content

19年江西CTF-BES

334 次浏览

这题才100分有点不人道,话不多说直入正题

首先进行upx脱壳

upx -d BES

先找到关键函数,在IDA中去掉了符号,可以匹配sig进行恢复,但是硬看比较实在,最终逆向结果

大概是输入必须为32位,然后进行base64加密,然后sub_400C0E将v7,v8字符flag{1234}和base64密文进行加密操作,最后在跟unk_6CA0C0进行比较得flag

根据加密算法写脚本:

'''
upx -d BES
'''

s=[0x3F, 0x3B, 0x38, 0x54, 0x22, 0x65, 0x59, 0x03, 0x6E, 0x39,0x34, 0xFF, 0x38, 0x0A, 0x3D, 0x5B, 0x68, 0x59, 0x57, 0x49,0x2B, 0x38, 0x38, 0x56, 0x36, 0x4B, 0x7F, 0x07, 0x6E, 0x29,0x20, 0xFF, 0x3B, 0x30, 0x32, 0x05, 0x7F, 0x49, 0x61, 0x4D,0x3F, 0x38, 0x30, 0x5A]

a2='flag{1234}'


flag=''

for i in range(len(s)):
    flag+=chr(s[i]^ord(a2[i%len(a2)]))

print flag


'''
out:YWY3YTk0ZDR�YmFjZjc4MTY1MzM4ZTF�ZWI4MzU0YTQ=

'YWY3YTk0ZDR='.decode('base64')
'YmFjZjc4MTY1MzM4ZTF'.decode('base64')
'ZWI4MzU0YTQ='.decode('base64')

'''

但是有两个坏字符,我们先分成三段进行解密,分别为:

YWY3YTk0ZDR=
YmFjZjc4MTY1MzM4ZTF
ZWI4MzU0YTQ=

最后爆破一下就好了

from pwn import *

for i in range(1,127):
    p=process('BES')

    s1='af7a94d4'
    s2='bacf78165338e1'
    s3='eb8354a4'
    
    payload=s1+chr(i)+s2+chr(i)+s3

    p.sendlineafter('You know FLAG:\n',payload)
    s=p.recv()
    print s
    if s!='fail\n':
        exit(0)


'''
Congratulation !
flag{af7a94d4ebacf78165338e1eeb8354a4
'''

2 Comments

  1. jane
    jane 2020年7月23日

    这个题目有附件嘛

  2. jane_315
    jane_315 2020年7月23日

    想问一下这个题目有题目的附件嘛

发表评论

电子邮件地址不会被公开。 必填项已用*标注