当前位置:首页 > Write Up > 正文内容

[WP] NJUPT CTF 2019

Luz2年前 (2019-11-25)Write Up1440

RE

image.png

动态调试,在strcmp下断得到flag


PWN

image.png


pwntools连接获得flag



image.png


构造条件获得flag

exp:

image.png



CRYPTO

image.png

题目给出文本

image.png


又因为提示是keyboard

猜测和键盘有关系


有单字符重复输入,猜测和9键有关系

wertyuiop是26键键盘的第一排字母,猜测与其顺序有关系

image.png

建立映射表

字母重复次数为对应9键键盘上第几个字母

得到flag

(自己脑洞真的大)

做完发现这个已经被人发在了百度贴吧里了,做题之前应该先搜一下的。。



MISC

image.png

分离得到两张图片

image.png

扫描二维码得到flag


image.png

在linux中pip安装得到链接

使用浏览器下下来


image.png


发现setup.py

查看

image.png

发现base64,解密得到flag


image.png

找最大的文件

image.png

这个文件七百多兆

一看就是个资源

flag肯定在这里


winhex搜NCTF

好吧。。找到了。。

image.png


image.png

分离得到压缩包

伪加密,使用7-zip解压


image.png


得到大段base64字符串


base64隐写  解密


image.png


解密脚本

#coding:utf-8
def get_base64_diff_value(s1, s2):
    base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    res = 0
    for i in xrange(len(s2)):
        if s1[i] != s2[i]:
            return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
    return res


def solve_stego():
    with open('C:\\Users\\80597\\Desktop\\南邮nctf\\3.txt', 'rb') as f:
        file_lines = f.readlines()
        bin_str = ''
        for line in file_lines:
            steg_line = line.replace('\n', '')
            norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
            diff = get_base64_diff_value(steg_line, norm_line)
            print(diff)
            pads_num = steg_line.count('=')
            if diff:
                bin_str += bin(diff)[2:].zfill(pads_num * 2)
            else:
                bin_str += '0' * pads_num * 2
            print(goflag(bin_str))


def goflag(bin_str):
    res_str = ''
    for i in xrange(0, len(bin_str), 8):
        res_str += chr(int(bin_str[i:i + 8], 2))
    return res_str


if __name__ == '__main__':
    solve_stego()


分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。