首页
社区
课程
招聘
郁闷啊,谁知道BMP图片加密技术吗
发表于: 2007-1-13 16:48 13442

郁闷啊,谁知道BMP图片加密技术吗

2007-1-13 16:48
13442
小弟很菜,菜菜的脱了个程序的壳,UPX0.89的,没附加数据,没加花指令.
OD手脱了,修正入口点,程序可以正常运行,PEID查显示ARJ Archive *这个不知道什么东西
这也无所谓了
反正可以直接编辑资源了
于是把程序里面一张BMP图片提出来
修改
再替换
问题来了
程序打不开了
一闪就关了
纳闷
以为是壳没脱好
继续反复脱了几次
还是这样的情况
于是研究起那张图片来
BMP的
800*600
24位
71分辨率
1.37M
这是个疑点
一般的这么大图片不可能这么大的,一般是几百K而已
是不是图片加密了?有碰到过的提示下
各位老大分析下
提供程序下载地址
http://www.gz2008.com.cn/soft/menu.rar
壳脱的应该没问题的
因为替换回他自己的图片又可以正常运行
所以怀疑是不是图片上做了手脚

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
BMP的加密我了解一些,不过和你说的好像有些不一样
在一个BMP文件里,一个点有三个颜色数据,Rgb,每一个颜色8位,因此是24位的图片,加密时,对一个点(24位的数据)里提取一个位,作为保存数据用,一个800*600的图就可以保存800*600 bit(不是byte)的数据,在24个位里面选取合适的位,就可以使图片看起来没什么改变,但数据也存好了

和你说的有不一样的地方就是,这样不会增加文件大小

可能还有别的隐藏技术吧~
2007-1-13 17:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
...汗了
这么复杂啊
那要解密怎么搞?
  看样子不是我菜鸟所能做的了的
至少现在是没办法完成的
继续等高手指点
..小豆豆谢谢你了!
呵呵
至少让我确定是有这种技术存在!
2007-1-13 17:38
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
跟图片加密好像没有关系....
2007-1-13 17:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
再补充一下
刚发现图片可能大小没改变
就是1.37M的
刚测试过一张800*600/24位BMP
也正好是1.37M
小豆豆,能把你知道的那种没改变大小的加密技术详细介绍下吗?
它用哪种算法之类的
谢谢!
2007-1-13 17:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 sbright 发布
跟图片加密好像没有关系....

有关系啊
为什么用别的图片就不行
用它的图片就可以呢?
我试过了
只要改动图片上的几个字就不行
改图片上其他地方就可以!
所以才怀疑图片的问题
而且程序里的资源没网址的
可运行程序后图片上会覆盖上一行其他文字和网址的超连接
2007-1-13 17:54
0
雪    币: 250
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
有文件大小校验
2007-1-13 18:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最初由 邪秀才 发布
有文件大小校验

文件大小是一样的啊
1.37M
大小:1.37 MB (1,440,056 字节)
空间占用 :1.37 MB (1,441,792 字节)
都一模一样
继续期待看雪高手
2007-1-13 18:09
0
雪    币: 236
活跃值: (35)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
LZ是不是说得是bmp的像素签名?
就是通过修改RGB每个字节位,将目标数据存入,
具体原理和代码可以看下面这篇文章:

http://www.vchelp.net/vchelp/zsrc/hideb.asp?type_id=23&class_id=1&cata_id=12&article_id=256&search_term=

"根据亮度公式: I = 0.3R + 0.59G + 0.11B 以及人眼视觉对绿色最敏感,对蓝色最不敏感,如果绿色分量改变1不影响人的感觉,蓝色分量相应改变5也不会影响人的感觉,红色分量改变2亦不会影响人的感觉,所以可对R G B 相应改变低2,1,3位。相当于位图内容的1/4"
2007-1-13 18:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢!
呵呵
大致明白了
研究去!GO!
2007-1-13 19:05
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
大小:1.37 MB (1,440,056 字节)
空间占用 :1.37 MB (1,441,792 字节)
好像不一样
2007-1-14 01:53
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
最初由 greatcsk 发布
LZ是不是说得是bmp的像素签名?
就是通过修改RGB每个字节位,将目标数据存入,
具体原理和代码可以看下面这篇文章:

http://www.vchelp.net/vchelp/zsrc/hideb.asp?type_id=23&class_id=1&cata_id=12&article_id=256&search_term=
........


第一次听说这个叫"像素签名",我太孤陋寡闻,BAIDU下。

据偶专业课本定义,这个"像素签名"叫LSB数据隐藏"或者"LSB隐写术",是最简单、健壮性最低的隐写手段

可以用统计之类的隐写分析判断是否包含信息

附带我们信息隐藏实验的LSB隐写的程序
----------------
实现24B位图文件(BMP)的LSB基本隐藏和提取操作。
数据被隐藏到R层。
使用HASH随机置乱来实现一定程度的数据位均有分布。
没有加入容错处理
上传的附件:
2007-1-14 03:00
0
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
根据人类视觉系统的特性,人眼对于细微的亮度变化的敏感度很低,特别是当图像对比度很小的时候。最低有效位算法(LSB:least significant bits)利用的就是这一人类生理特性。它利用图像的视觉冗余,将嵌入信息转换为二进制数据码流后依次写到掩体图像各RGB字节的最低有效位上面(这里最低有效位指的是图像RGB字节的最后一位)。对于掩体图像来说,仅相当于叠加了一个能量微弱的信号,在视觉上很难察觉,从而达到迷惑攻击者和保护秘密信息的目的。
实际应用上LSB算法通常与各类加密和压缩算法结合,先对待隐藏的信息进行预处理,然后再隐写入文件。

经过LSB算法处理过的图片大小与原图片完全一样,因此不能通过比较文件大小来检测其是否包含隐藏数据。
不过通常该算法实现的时候都会在位图文件头(BitMapFileHeader)的两个保留字段(WORD)里留下某些信息以方便将来提取之用,例如隐藏的信息长度以及某些自定义的信息。由于保留字段默认值为0,因此可以通过检测该两个字段是否为0来简单判断bmp文件是否包含有秘密数据。

LSB算法是一种典型的时空域算法,虽然应用简单高效,但是稳健性很差。恶意攻击者可以通过使用加噪,压缩,拉伸,剪切,旋转等简单变换来破坏隐藏信息的完整性,这时候嵌入信息就不能得到有效的恢复。

附上BMP文件格式:
BMP 图象文件通常分为四个部分:位图文件头(BitMapFileHeader)、位图信息头(BitMapInfoHeader)、调色板(Palette)和位图数据(ImageData)。位图文件头是一个长度为14字节的结构,其中包含了BMP文件的类型、文件大小和位图起始位置等信息,其定义如下:
typedef struct tagBitMapFileHeader{
WORD bfType;                //文件类型
DWORD bfSize;                //文件大小
WORD bfReserved1;                //保留字段1
WORD bfReserved2;                //保留字段2
DWORD bfOffBits;                //数据偏移
} BitMapFileHeader;
其中WORD为16位无符号整数,DWORD为32位无符号整数,字段bfType的值规定文件类型只能是BM(即0x424D)。两个WORD类型的保留字段默认为0,有些信息隐藏技术就是利用此两个字段来存储图象是否已经隐藏信息及已隐藏信息的长度,字段bfOffBits则给出了BMP图象数据的存储位置。
位图信息头是一个长度为40字节的结构,描述了位图的尺寸、颜色等信息,其定义为:
typedef struct tag BitMapFileHeader {
DWORD biSize;                        //位图文件头的大小(包括调色板)
DWORD biWidth;                        //图像宽度(列数)
DWORD biHeight;                        //图像高度(行数)
WORD biPlanes;                        //目标设备的位平面数,必须置1
WORD biBitCount;                        //每个图象素的位数,必须为1、4、8或24
DWORD biCompression;                   //压缩方式
DWORD biSizeImage;                //图像的字节数
DWORD biXPelsPerMeter;        //目标设备水平方向每米长度上的像素数
DWORD biYPelsPerMeter;        //目标设备垂直方向每米长度上的像素数
DWORD biClrUsed;                //颜色表中点阵位图实际使用的颜色数
DWORD biClrImportant;                  //给出重要的颜色索引值,若被置为0则所有的颜色都是重要的
} BitMapFileHeader;
其中biCompression的值为0表示位图数据不压缩,值为1表示BI_RLE8压缩类型(即每像素为8位的点阵位图采用行程编码格式);值为2表示BI_RLE4压缩类型(即每像素为4位的点阵位图采用行程编码格式),这里为了能隐藏更多的信息将其设为0。
调色板用于说明位图中像素的颜色,它有若干项,每一项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
调色板数据中RGBQUAD结构数据的个数由位图信息头里的biBitCount来确定。当biBitCount=1,4,8 时,分别有2,16,256项;当biBitCount=24时(即24位真彩色BMP图像),没有调色板数据。
位图信息头和调色板组成位图信息。位图数据记录了位图的每一个象素值。每个象素值所占的位数即为biBitCount的值:当biBitCount=24时,1个象素占24位空间。记录顺序从位图的左下角开始,即在扫描行内是从左到右,扫描行之间则是从下到上:也就是说图象数据是以相反的顺序存储的,即从文件中读出的第一行实际上是图象的最后一行。因此BMP位图数据的大小(在不压缩情况下)为DataSize= biHeight*biWidth* biBitCount/8。然而,实际上Windows规定一个扫描行所占的字节数必须是4的倍数(即以DWORD为单位),不足的用0填充。例如,对于24位BMP图像,设width=101,则width*24/8=303,但是实际上每行图像所含字节数为304,即在303的基础上加上1使得其成为4的倍数。这样,每行图象数据的最后可能有0 至3 个字节是多余的,且均为0。显然这些多余的字节是不能隐藏信息的。
24位真彩色位图有其自身的特点,由于它没有调色板数据,因此从第55 个字节开始,是该文件的图象数据部分,数据的排列顺序以图象的左下角为起点,每连续3 个字节便描述图象一个象素点,这三个字节分别代表B、G、R(即蓝、绿、红)三基色在此像素中的亮度,若某连续三个字节为:FFH ,00H ,00H ,则表示该像素的颜色为纯蓝色。
2007-1-14 03:32
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主,我想和你一起讨论这个问题。可以加我QQ吧 QQ:87452710
2007-1-15 16:11
0
雪    币: 280
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
学习
2007-1-15 18:18
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov
2007-1-15 21:03
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
怀疑是你没修复资源
2007-1-15 21:10
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
18
这玩艺好象叫Steganography,有电子书
2007-1-15 21:22
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
还没搞定这个问题,
大家都发表下意见
2007-1-23 16:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最初由 greatcsk 发布
LZ是不是说得是bmp的像素签名?
就是通过修改RGB每个字节位,将目标数据存入,
具体原理和代码可以看下面这篇文章:

http://www.vchelp.net/vchelp/zsrc/hideb.asp?type_id=23&class_id=1&cata_id=12&article_id=256&search_term=
........


多谢9楼的指教!!
2007-1-23 18:57
0
雪    币: 220
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习中,不是很明白。
2007-2-13 08:33
0
游客
登录 | 注册 方可回帖
返回
//