进阶MIsc-1

文章讲述了如何使用LSB隐写技术将文本嵌入图片中,并展示了LSB还原的过程。同时,提及了RAR包损坏的修复方法以及在Linux环境下通过binwalk命令进行文件分离的操作。
摘要由CSDN通过智能技术生成

1、LSB隐写

打开一张.bmp图片,用各种传统方法试了都没得到答案,用winhex打开后发现一点线索,看到一些零碎字符,考虑LSB隐写--将文字嵌入图片。

LSB写入代码

import numpy as np
import PIL.Image as Image

# 读取图片的像素信息
picture = Image.open('./pic/pic.jpg')
pic_data = np.array(picture)

# 读取要隐写的文件,长度为4893
with open('./pic/secret.py', encoding="utf-8") as file:
    secrets = file.read()

# 将图片拷贝一份,作为最终的图片数据
im_data = np.array(picture.copy()).ravel().tolist()

def cover_lsb(bin_index, data):
    '''
    :param bin_index:  当前字符的ascii的二进制
    :param data: 取出数组像素的八个数值
    :return: LSB隐写后的字符
    '''
    res = []
    for i in range(8):
        data_i_bin = bin(data[i])[2:].zfill(8)
        if bin_index[i] == '0':
            data_i_bin = data_i_bin[0:7] + '0'
        elif bin_index[i] == '1':
            data_i_bin = data_i_bin[0:7] + '1'
        res.append(int(data_i_bin, 2))
    return res


pic_idx = 0
# 采用LSB隐写技术,横向取数据,每次取9个数据,改变8个像素最低位
res_data = []
for i in range(len(secrets)):
    # 拿到隐写文件的字符ascii数值, 并转换为二进制,填充成八位
    index = ord(secrets[i])
    bin_index = bin(index)[2:].zfill(8)
    # 对数据进行LSB隐写,替换操作
    res = cover_lsb(bin_index, im_data[pic_idx * 8: (pic_idx + 1) * 8])
    pic_idx += 1
    res_data += res
# 对剩余未填充的数据进行补充填充,防止图像无法恢复
res_data += im_data[pic_idx * 8:]

# 将新生成的文件进行格式转换并保存,此处一定保存为压缩的png文件
new_im_data = np.array(res_data).astype(np.uint8).reshape((pic_data.shape))
res_im = Image.fromarray(new_im_data)
res_im.save('./pic/res_encode.png')

LSB还原

import numpy as np
import PIL.Image as Image

# 打开隐写文件
picture = Image.open('./pic/res_encode.png')
pic_datas = np.array(picture).ravel().tolist()

# 字符的长度为4893
with open('./pic/secret.py', encoding="utf-8") as file:
    secrets = file.read()

str_len = len(secrets)
print('字符的长度为:', str_len)

# 将图片拷贝一份,作为最终的图片数据
im_data = np.array(picture.copy()).ravel().tolist()


def lsb_decode(data):
    '''
    :param bin_index:  当前字符的ascii的二进制
    :param data: 取出数组像素的八个数值
    :return: LSB隐写后的字符
    '''
    str = ''
    for i in range(len(data)):
        print(bin(data[i])[2:])
        data_i_bin = bin(data[i])[2:][-1]
        str += data_i_bin
    return str


pic_idx = 0
# 采用LSB隐写技术,横向取数据,每次取9个数据,改变8个像素最低位
res_data = []

for i in range(len(secrets)):
    # 拿到第i个数据,转换成二进制
    data = im_data[i * 8: (i + 1) * 8]
    data_int = lsb_decode(data)
    # 找到最低位
    res_data.append(int(data_int, 2))

# 将二进制数据转换成ASCII
str_data = ''
for i in res_data:
    temp = chr(i)
    str_data += temp
print(str_data)

还有一种方法就是将.bmp文件用画图软件打开然后另存尾png文件,然后用stegsolve打开即可看到答案

2、RAR包损坏

借鉴某个大佬的总结https://blog.csdn.net/destiny1507/article/details/89928234

当我们打开压缩包只看到一个文本文件,但是用winhex打开却又

看到了里面有.png文件,所以我们判断应该是RAR包有损坏所以解压不出,

根据上思维导图中的提示把下图的7A改为74,即可解压成功。

3、linux命令进行文件分离

主要的步骤

其中ls显示当前目录下的文件

binwalk -e对文件进行剥离

^C对剥离后的新的数据导出为新的文件夹

更多的命令请参考Kali Linux 的常用命令_kali linux命令大全-CSDN博客

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值