Stegsolve有bug: 只支持32/24bit真彩色, 解析灰度图像有问题(附排查过程)

结论: 如题目所示。切勿直接相信它对灰度图像的解析

 

发现过程:

在给学生排查毕设代码的时候, 发现明明只改了0-3四个位平面, 但用Stegsolve观察的时候发现连红色通道的6号位平面都出现相似的条纹了。

排查的过程: 首先怀疑代码哪里写错, 毕竟 Stegsolve是个用得挺多的工具, 首先不会怀疑它。之后发现利用matlab再读回这个图片, 结果是正常的, 即第六位平面是没有这样的条纹。由此基本上判定是Stegsolve的问题。

之后我造了一张灰度Lenna, 然后把低四平面的数据删掉, 全部置为0或1。结果在lenna那里打开, RGB三个通道依然有明暗差异。

随后利用jd-gui-1.6.6.jar逆向了一下StegsolveV1.4的代码, 通过一个个搜索特定关键词, 最终定位到下图这里。(当然, 这个字符串的搜索还是比较头痛, 因为不能全局搜索, 得一个个文件点开。搜索顺序如下: plane, 然后看到有个类需要originalimage, 一路网上找, trans, stegtrans...., 就定位到下面这个类了。)

因此, 问题的核心原因就是stegsolve默认图片就是个32位的真彩色图像, 之后直接求异或。如果输入的图像是一个灰度图像, 由于假设不符, 因此运算结果会出错。

posted @ 2024-04-29 11:47  lynnzixing  阅读(16)  评论(0编辑  收藏  举报