- lsb隐写
- 引用一段百度内容
-
LSB隐写就是修改RGB颜色分量的最低二进制位也就是最低有效位(LSB),而人类的眼睛不会注意到这前后的变化,每个像数可以携带3比特的信息。能够使用lsb隐写的图片格式只能是png或bmp,jpg无法实现lsb隐写
-
- 一般这种隐写可以使用stegsovle破解
- 引用一段百度内容
- TTL图片隐写
-
TTL是IP V4的一个8位报头,正常情况下我们拿到的数据包时一段无意义的数字,我们可以首先把这些数据转化为二进制,并且要转化为八位的二进制
-
为什么要转化成8位二进制?因为TTL隐写最多一次就是八位,想想看是不是。
-
with open('C:/Users/brighten/Desktop/attachment.txt', 'r') as f: for line in f: num=int(line) ss=bin(num) while len(ss)<10: ss=ss[:2]+'0'+ss[2:] print(ss)#把多个数据转化成八位的二进制
- 转换成为多个8位二进制数据后,会发现每个数据的后6位都是1,这也就是TTL隐写的秘密了。
- 一个数据要实现TTL隐写就是把它转换成为一个8位二进制,然后按两位为一组,每组数据后面拼接6个1形成8位数据。比如
-
4410=001011002
加密结果:
00 111111
10 111111
11 111111
00 111111 - 所以可以先看看破解隐写后是什么数据类型
-
count = 0
str=""
with open('C:/Users/brighten/Desktop/attachment.txt', 'r') as f:
for line in f:
num = int(line)
ss = bin(num)
while len(ss) < 10:
ss = ss[:2] + '0' + ss[2:]
#print(ss)
str=str+ss[2:4]
count += 1
if count == 4:
count = 0
sum=0
#print(str)
for i in range(len(str)):
if str[i]=='1':
sum=sum*2+1
else:
sum=sum*2
# print(sum)
print(chr(sum),end="")
str="" -
-
鄙人认为难点是在于要判断ttl破解后的数据包是什么类型,像我这里破解出来的是504b说明是一个zip压缩包,那就可以接下来继续操作,把数据封装成一个zip然后打开即可
-
import binascii
with open('D:/desktop/ctf题目/net.txt','r') as fp:
a=fp.readlines()
p=[]
for x in range(len(a)):
p.append(int(a[x]))
s=''
for i in p:
if(i==63):
b='00'
elif(i==127):
b='01'
elif(i==191):
b='10'
else:
b='11'
s+=b
flag=''
for i in range(0,len(s),8):
flag+=chr(int(s[i:i+8],2))
flag=binascii.unhexlify(flag)
wp = open('D:/desktop/ctf题目/ttl_solve.zip','wb')
wp.write(flag)
wp.close()
-
- 认识到明文攻击
-
引用自博主 https://blog.csdn.net/qq_52974719/article/details/117084427
-
适合明文攻击的情况,得到了泄露的压缩包,还有一个加密的压缩包,且两个压缩包的CRC32相同
- 这种情况直接用ARPR明文破解即可
-
- outguess解码格式(图片)
- outguess -k 密码 -r 图片 要输出的文件格式
- 常见的文件分离指令
- binwalk -e 文件(绝对路径,取决于自己的终端打开位置)
- foremost -T 文件(绝对路径,取决于自己的终端打开位置)
-