当前位置:网站首页>2022CISCNmisc
2022CISCNmisc
2022-07-30 05:41:00 【Msaerati】
ez_usb
题目已经告诉是usb流量
一共有三个地址2.8 2.10 2.4但2.4没用,我们分别导出2.8和2.10
从网上搜usb脚本将他们两个分别解出来
将那一打穿放到010发现是个rar文件
但是损坏了打不开,可以用winrar修复
修复成功后得到一个加密的rar刚刚还有一串字符没用那个就是密码打开就得到flag
everlasting_night
打开题目是一张图片,放到StegSolve中查看,再A2中发现东西
提取出来是f78dcd383f1b574b暂时不知道有什么用,
之后看wp是加密的lsb隐写那f78dcd383f1b574b可能就是密码
解出来一个压缩包,但是有密码,在010最后有一串无用的16进制FB 3E FC E4 CE AC 2F 54 45 C7 AE 17 E3 E9 69 AB转成md5就是压缩包密码,用010打开是png
把后缀改为data放到GIMP中修改
得到flag
babydisk
先用diskgenius挂载,发现一个wav
将wav提出来放入deepsound,发现需要密码所以确定是deepsound隐写,再去找密码
#!/usr/bin/env python3
'''
deepsound2john extracts password hashes from audio files containing encrypted
data steganographically embedded by DeepSound (http://jpinsoft.net/deepsound/).
This method is known to work with files created by DeepSound 2.0.
Input files should be in .wav format. Hashes can be recovered from audio files
even after conversion from other formats, e.g.,
ffmpeg -i input output.wav
Usage:
python3 deepsound2john.py carrier.wav > hashes.txt
john hashes.txt
This software is copyright (c) 2018 Ryan Govostes <[email protected]>, and
it is hereby released to the general public under the following terms:
Redistribution and use in source and binary forms, with or without
modification, are permitted.
'''
import logging
import os
import sys
import textwrap
def decode_data_low(buf):
return buf[::2]
def decode_data_normal(buf):
out = bytearray()
for i in range(0, len(buf), 4):
out.append((buf[i] & 15) << 4 | (buf[i + 2] & 15))
return out
def decode_data_high(buf):
out = bytearray()
for i in range(0, len(buf), 8):
out.append((buf[i] & 3) << 6 | (buf[i + 2] & 3) << 4 \
| (buf[i + 4] & 3) << 2 | (buf[i + 6] & 3))
return out
def is_magic(buf):
# This is a more efficient way of testing for the `DSCF` magic header without
# decoding the whole buffer
return (buf[0] & 15) == (68 >> 4) and (buf[2] & 15) == (68 & 15) \
and (buf[4] & 15) == (83 >> 4) and (buf[6] & 15) == (83 & 15) \
and (buf[8] & 15) == (67 >> 4) and (buf[10] & 15) == (67 & 15) \
and (buf[12] & 15) == (70 >> 4) and (buf[14] & 15) == (70 & 15)
def is_wave(buf):
return buf[0:4] == b'RIFF' and buf[8:12] == b'WAVE'
def process_deepsound_file(f):
bname = os.path.basename(f.name)
logger = logging.getLogger(bname)
# Check if it's a .wav file
buf = f.read(12)
if not is_wave(buf):
global convert_warn
logger.error('file not in .wav format')
convert_warn = True
return
f.seek(0, os.SEEK_SET)
# Scan for the marker...
hdrsz = 104
hdr = None
while True:
off = f.tell()
buf = f.read(hdrsz)
if len(buf) < hdrsz: break
if is_magic(buf):
hdr = decode_data_normal(buf)
logger.info('found DeepSound header at offset %i', off)
break
f.seek(-hdrsz + 1, os.SEEK_CUR)
if hdr is None:
logger.warn('does not appear to be a DeepSound file')
return
# Check some header fields
mode = hdr[4]
encrypted = hdr[5]
modes = {2: 'low', 4: 'normal', 8: 'high'}
if mode in modes:
logger.info('data is encoded in %s-quality mode', modes[mode])
else:
logger.error('unexpected data encoding mode %i', modes[mode])
return
if encrypted == 0:
logger.warn('file is not encrypted')
return
elif encrypted != 1:
logger.error('unexpected encryption flag %i', encrypted)
return
sha1 = hdr[6:6+20]
print('%s:$dynamic_1529$%s' % (bname, sha1.hex()))
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='store_true')
parser.add_argument('files', nargs='+', metavar='file',
type=argparse.FileType('rb', bufsize=4096))
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.INFO)
else:
logging.basicConfig(level=logging.WARN)
convert_warn = False
for f in args.files:
process_deepsound_file(f)
if convert_warn:
print(textwrap.dedent('''
---------------------------------------------------------------
Some files were not in .wav format. Try converting them to .wav
and try again. You can use: ffmpeg -i input output.wav
---------------------------------------------------------------
'''.rstrip()), file=sys.stderr)
用脚本获取hash值,
再用
得到密码为feedback,将deepsound解密得到key
key:e575ac894c385a6f
得到key肯定需要我们解密什么东西,用FTK挂载后找到这两个文件
将这两个文件提取出来,用VeraCrypt加载key就是我们解出来的那个key,经过测试$RDWTTK4可以成功加载
有一个spiral文件用010打开是压缩包
里面一个png图片已损坏打不开,从网上找螺旋的脚本
def function(n):
matrix = [[0] * n for _ in range(n)]
number = 1
left, right, up, down = 0, n - 1, 0, n - 1
while left < right and up < down:
# 从左到右
for i in range(left, right):
matrix[up][i] = number
number += 1
# 从上到下
for i in range(up, down):
matrix[i][right] = number
number += 1
# 从右向左
for i in range(right, left, -1):
matrix[down][i] = number
number += 1
for i in range(down, up, -1):
matrix[i][left] = number
number += 1
left += 1
right -= 1
up += 1
down -= 1
# n 为奇数的时候,正方形中间会有个单独的空格需要单独填充
if n % 2 != 0:
matrix[n // 2][n // 2] = number
return matrix
f = open('spiral.zip','rb').read()
s = function(87)
# print(s)
s = sum(s,[])
#print(s)
f1 = open('fla.zip','wb')
arr = [0]*7569
# print(arr)
for i in range(len(s)):
arr[i] = f[s[i]-1]
#print(arr)
# print(arr)
for i in arr:
print(hex(i)[2:].zfill(2),end='')
放入010生成一个新的压缩包里面有一个1.png
49位7个行七列将第一行去掉,剩下的按螺旋的方式读下来就是flag
边栏推荐
- P3 元宝第七单元笔记
- 猜数字小游戏(随机生成’三剑客‘)
- Graphic mirror symmetry (schematic diagram)
- 人生的第一篇博客(初识代码)
- Navicat connection MySQL error: 1045 - Access denied for user 'root'@'localhost' (using password YES)
- G Bus Count (Google Kickstart2014 Round D Problem B) (DAY 89)
- 【线性神经网络】线性回归 / 基础优化方法
- 524.通过删除字母匹配到字典里最长单词
- mysql处理insert冲突的解决方案
- Qt对动态库(*.dll)的封装以及使用
猜你喜欢
随机推荐
MongoDB快速入门与基本使用
认识虚拟dom
sqli-labs靶场 SQL注入学习 Less-1
P3 元宝序列化笔记
Koa2框架快速入门与基本使用
三子棋游戏实现(c语言)
453.最小操作数使数组元素相等
easyexcel使用教程-导出篇
配环境 / 初步测试
argparse —— 命令行选项、参数和子命令解析器
数据操作 / 数据预处理
字符串(一) 哈希
事件高级:事件的绑定及取消、DOM事件流、事件委托
C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
417.太平洋大西洋水流问题
秒杀项目的总结及面试常见问题
JDBC一文搞懂
【Pytorch】torch.manual_seed()、torch.cuda.manual_seed() 解释
cross_val_score的用法
自定义异常类的使用