tips:

    • png图片高宽隐写不一定是小的改小
    • 对于这种无规律字符集,在没有找到编码的情况下最后都可以使用字符统计的方法进行尝试

    1.认真你就输了
    binwalk+foremost+搜索


    2.just_a_rar
    rar爆破+图片属性


    3.你猜我是个啥
    查看hex,flag位于最后


    4.开场曲
    mikutab…


    5.寂静之城
    。。。羊踹玉兔
    https://weibo.com/p/230418bb4702370102w4oa


    6.一叶障目
    (windows打得开,linux打不开存在长宽隐写)
    高宽更改隐写,按照一般情况下改写宽度
    结果导致图片改变,所以改变高度
    得到flag


    7.黄金六年
    打开是一个视频
    逐帧播放有二维码,发现不是flag
    hex打开视频文件,文件末尾存在base64编码(注意复制时用Winhex打开确认一番)
    在线解密:https://www.sojson.com/base64.html
    发现是rar文件,解压缩需要密码
    密码是视频中的二维码
    (最后一张二维码死活看不见,电脑亮度调最大,屏幕往前拉,俯视看视频!!!)


    8.john-in-the-middle
    文件-导出HTTP对象-save all
    logo图片存在隐写
    (一般来说没有flag相关文件,需要查看图片)


    9.拉胯的三条命令
    wireshark tcp


    10.间谍启示录
    装载镜像
    修改.exe后缀为rar
    解压得到flag.exe
    运行得到flag


    11.伟大的侦探
    解压密码.txt提示密码编码未知
    将后缀改为doc,并打开预览选择编码
    解压发现图片为跳舞小人,福尔摩斯跳舞小人密码
    对照表:
    BUUCTF-Part2 - 图1


    12.gakki
    binwalk+foremost分离得到rar压缩包
    没有密码提示,爆破得到密码
    解压得到flag.txt
    (对于这种无规律字符集,在没有找到编码的情况下最后都可以使用字符统计的方法进行尝试)
    字频统计代码:

    1. # gakki_exp.py
    2. # Author : imagin
    3. alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- ={}[]"
    4. f = open("flag.txt", "r")
    5. data = f.read()
    6. result = {d:0 for d in alphabet}
    7. def sort_by_value(d):
    8. items = d.items()
    9. backitems = [[v[1],v[0]] for v in items]
    10. backitems.sort(reverse=True)
    11. return [ backitems[i][1] for i in range(0,len(backitems))]
    12. for d in data:
    13. for alpha in alphabet:
    14. if d == alpha:
    15. result[alpha] = result[alpha] + 1
    16. res=sort_by_value(result)
    17. for i in res:
    18. print(i,end="")

    13.纳尼
    解压得到6.gif
    补全文件头GIF98a
    分帧得到base64,解码得flag


    14.鸡你太美
    补全篮球副本.gif文件头
    得到flag


    15.黑客帝国
    HxD hex写入文件
    rar爆破解压
    图片前缀更改为JPG前缀
    打开图片得到flag


    16.你有没有好好看网课?
    解压得到两个压缩包文件
    flag3.zip注释提示6位密码,爆破
    解压缩得到flag.docx和一段视频文件
    doc文档里有两个数字520,711
    去视频里寻找对应的帧数
    敲击码
    BUUCTF-Part2 - 图2


    20.SXMgdGhpcyBiYXNlPw==
    base64隐写,具体看:https://www.tr0y.wang/2017/06/14/Base64steg/index.html
    加密脚本:

    1. # -*- coding: cp936 -*-
    2. import base64
    3. flag = 'Tr0y{Base64isF4n}' #flag
    4. bin_str = ''.join([bin(ord(c)).replace('0b', '').zfill(8) for c in flag])
    5. base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    6. with open('0.txt', 'rb') as f0, open('1.txt', 'wb') as f1: #'0.txt'是明文, '1.txt'用于存放隐写后的 base64
    7. for line in f0.readlines():
    8. rowstr = base64.b64encode(line.replace('\n', ''))
    9. equalnum = rowstr.count('=')
    10. if equalnum and len(bin_str):
    11. offset = int('0b'+bin_str[:equalnum * 2], 2)
    12. char = rowstr[len(rowstr) - equalnum - 1]
    13. rowstr = rowstr.replace(char, base64chars[base64chars.index(char) + offset])
    14. bin_str = bin_str[equalnum*2:]
    15. f1.write(rowstr + '\n')

    解密脚本:

    1. # -*- coding: cp936 -*-
    2. b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    3. with open('1.txt', 'rb') as f:
    4. bin_str = ''
    5. for line in f.readlines():
    6. stegb64 = ''.join(line.split())
    7. rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())
    8. offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
    9. equalnum = stegb64.count('=') #no equalnum no offset
    10. if equalnum:
    11. bin_str += bin(offset)[2:].zfill(equalnum * 2)
    12. print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8 位一组

    17.