LSB最低有效位隐写

LSB隐写


LSB全称leastsignificant bit,是一种基于图片最低有效位修改储存信息的隐写方法,为什么会有这种隐写方法的产生呐,其实很简单,我们都知道三原色,即:红绿蓝。就是大多数的颜色都可以通过三原色的不同比例调剂出来。

RGB

图片的图像像数一般都是由RGB三原色(红绿蓝)组成,每一种颜色占8位,取值为0x00~0xFF,就是256种,一共包含了256的3次方种颜色,即16777216种颜色

但是人类的眼睛只可以分辨大概1000万种不同的颜色,还有很多种细微的变化人类的眼睛是觉察不到的


而LSB隐写就是通过修改RGB颜色分量的最低位二进制(LSB),来进行信息的储存,人类的眼睛并不能感知到前后的变化

每个像数可以携带3bit的信息

PYthon脚本实现LSB隐写

# -*- coding: UTF-8 -*-

from PIL import Image

def plus(str):

      #Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。

    return str.zfill(8)

def get_key(strr):

      #获取要隐藏的文件内容

    tmp = strr

    f = file(tmp,"rb")

    str = ""

    s = f.read()

    for i in range(len(s)):

        #逐个字节将要隐藏的文件内容转换为二进制,并拼接起来

        #1.先用ord()函数将s的内容逐个转换为ascii码

        #2.使用bin()函数将十进制的ascii码转换为二进制

        #3.由于bin()函数转换二进制后,二进制字符串的前面会有"0b"来表示这个字符串是二进制形式,所以用replace()替换为空

        #4.又由于ascii码转换二进制后是七位,而正常情况下每个字符由8位二进制组成,所以使用自定义函数plus将其填充为8位

        str = str+plus(bin(ord(s[i])).replace('0b',''))

        #print str

    f.closed

    return str

def mod(x,y):

    return x%y;

#str1为载体图片路径,str2为隐写文件,str3为加密图片保存的路径

def func(str1,str2,str3): 

    im = Image.open(str1)

    #获取图片的宽和高

    width = im.size[0]

    print "width:"+str(width)+"\n"

    height = im.size[1]

    print "height:"+str(height)+"\n"

    count = 0

    #获取需要隐藏的信息

    key = get_key(str2)

    keylen = len(key)

    for h in range(0,height):

        for w in range(0,width):

            pixel = im.getpixel((w,h))

            a=pixel[0]

            b=pixel[1]

            c=pixel[2]

            if count == keylen:

                break

            #下面的操作是将信息隐藏进去

            #分别将每个像素点的RGB值余2,这样可以去掉最低位的值

            #再从需要隐藏的信息中取出一位,转换为整型

            #两值相加,就把信息隐藏起来了

            a= a-mod(a,2)+int(key[count])

            count+=1

            if count == keylen:

                im.putpixel((w,h),(a,b,c))

                break

            b =b-mod(b,2)+int(key[count])

            count+=1

            if count == keylen:

                im.putpixel((w,h),(a,b,c))

                break

            c= c-mod(c,2)+int(key[count])

            count+=1

            if count == keylen:

                im.putpixel((w,h),(a,b,c))

                break

            if count % 3 == 0:

                im.putpixel((w,h),(a,b,c))

    im.save(str3)

#原图

old = "E:\Users\\test.png"

#处理后输出的图片路径

new = "E:\Users\\LSBencode.png"

#需要隐藏的信息

enc = "E:\Users\\flag.txt"

func(old,enc,new)

参考链接:LSB隐写算法 - 扣扣白白 - CSDN博客

链接中还有介绍到Python脚本实现LSB解码提取隐藏的文本信息,在此不再详细表述

在此我们以一道例题为例:


这是从网上获取的一张照片,我们运行LSB_encode.py脚本来将flag.txt 中 zhangyuxiaowanzi 的内容加密到这张图片中。

加密成功,获取图片LSBencode.png


为了获取图片最低位的有效隐藏信息,我们在这里介绍一个神器 Stegsolve 下载地址:Stegsolve下载

Stegsolve不但可以图片每个颜色通道的关闭开启的效果,而且可以指定通道的内容用HEX来显示进行预览,也可以将不同的颜色通道进行XOR、OR、AND、ADD等操作来发现通道中隐藏的内容。

我们使用Stegsolve将加密前和加密后的图片进行XOR、OR、AND、SUB等比较

在比较时候,我们发现在进行SUB的操作的时候

说明两张图片是不一样的,但是我们的肉眼并不能观察出来,

然后我们通过关闭和开启每个颜色不同的通道来观察HEX码是否有我们想要的内容。

最后在RGB三原色都在0通道的时候发现了隐藏的信息

但是这只是Stegsolve 的简单应用和LSB隐写的简单加密,而且有些题目中还可以将图片或者二维码隐藏到另一张图片中。比如说在试验吧中的一道题 最低位的吻 图片链接: http://ctf5.shiyanbar.com/stega/01.bmp

这道题目就比较好玩了因为如果你直接把图片放到Stegsolve中,你什么信息都得不到,什么都得不到.......

以为题目中给的图片为位深度为8位的.bmp图片,但是StegSolve解析8位的BMP存在一些问题

所以会产生一些错误,我们只需要将其修改为位深度为24 的.png图片即可

通过Stegsolve打开,在Red palne 0的通道中发现了一个二维码

扫描就可得到flag{i love you}

但是我一直不会的就是怎样将图片隐藏的另一张图片中,就像这道题目将二维码隐藏到了一张图片中

如果有知道的大佬不妨高抬贵手分享给我 坐等大佬指点

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,037评论 1 32
  • 隐写术总结 AppLeU0·2015/02/10 10:14 http://drops.wooyun.org/ti...
    tmdsb38阅读 4,410评论 0 16
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,210评论 0 17
  • 一、概述 0x01 模型介绍 STEGA即隐写术,将信息隐藏在多种载体中,如:视频、硬盘和图像,将需要隐藏的信息通...
    Killshadow阅读 23,774评论 7 27
  • 最近喜欢关注小故事,甚至想着哪天再重新读一读《安徒生童话》、《格林童话》、《一千零一夜》……这些由成人讲述的童话,...
    宛宛花开阅读 605评论 3 3