Steganography 1.50 1.60 加密特征分析
Steganography 是Pipisoft公司推出的一款隐写软件,能够把你想加密的文件隐藏在其他的文件当中。
工具下载:steganography.zip
1.50版本:
预览版的加密:
在一张JPG图片中隐藏另一个图片。使用十六进制编辑器查看该JPG图片
文件末尾显示为
00004A80 34 BA 2C BC F0 4C 42 78 40 3E 5C 55 5B DF F1 37 4¦,+_LBx@>\U[_±7
00004A90 F3 AB 6F FF 00 6E 7E B5 45 38 87 FF D9 50 4B 03 _½o_.n~¦E8ç_+PK.
00004AA0 04 14 00 02 00 08 00 6A 4C 78 2F C1 66 CC 56 FE .¶.....jLx/-f¦V_
00004AB0 5D 00 00 81 63 00 00 0C 00 11 00 6A 65 6E 6E 69 ]..üc......jenni
00004AC0 66 65 72 2E 6A 70 67 55 54 0D 00 07 58 60 C1 3F fer.jpgUT...X`-?
00004AD0 00 AF C5 3F 7D 3E C6 3F ED BB 65 54 5C 4D B7 2E .»+?}>¦?_+eT\M+.
可以看到,在JPG文件尾 FF D9 后,存在这一个ZIP压缩包(50 4B 03 04)
不难看出,1.50版本的Steganography加密方式为:将被“隐藏的” 文件(“ jennifer.jpg”)压缩为ZIP文件,添加在原文件末尾。
正式版的加密:
正式版可以添加密码,在文件结尾加了16字节字符串用来校验密码
但经过测试,即使设置了密码,隐藏的数据也不会被加密,并且无需任何特殊的工具就可以提取出来,以下是在JPG中隐藏一个hiddenmessage.txt文档的示例:
00000090 00 00 00 FF DA 00 08 01 01 00 00 3F 00 AA 60 3F ..._+......?.¬`?
000000A0 FF D9 50 4B 03 04 14 00 02 00 08 00 9C 41 23 30 _+PK..¶.....£A#0
000000B0 05 0B 24 E1 0A 00 00 00 0B 00 00 00 11 00 11 00 ..$ß............
000000C0 68 69 64 64 65 6E 6D 65 73 73 61 67 65 2E 74 78 hiddenmessage.tx
000000D0 74 55 54 0D 00 07 D8 BF F6 3F A0 92 F6 3F D6 BF tUT...++÷?áÆ÷?++
000000E0 F6 3F 2B C8 CF C9 CF 55 28 00 91 00 50 4B 01 02 ÷?++-+-U(.æ.PK..
000000F0 17 0B 14 00 02 00 08 00 9C 41 23 30 05 0B 24 E1 ..¶.....£A#0..$ß
00000100 0A 00 00 00 0B 00 00 00 11 00 09 00 00 00 00 00 ................
00000110 00 00 20 00 80 81 00 00 00 00 68 69 64 64 65 6E .. .Çü....hidden
00000120 6D 65 73 73 61 67 65 2E 74 78 74 55 54 05 00 07 message.txtUT...
00000130 D8 BF F6 3F 50 4B 05 06 00 00 00 00 01 00 01 00 ++÷?PK..........
00000140 48 00 00 00 4A 00 00 00 00 00 48 49 5A 00 A8 00 H...J.....HIZ.¿.
00000150 00 00 64 34 31 64 38 63 64 39 38 66 30 30 62 32 ..d41d8cd98f00b2
00000160 30 34 00 00 03 00 04....
以上是不使用密码进行加密的文件结尾
00000090 00 00 00 FF DA 00 08 01 01 00 00 3F 00 AA 60 3F ..._+......?.¬`?
000000A0 FF D9 50 4B 03 04 14 00 02 00 08 00 9C 41 23 30 _+PK..¶.....£A#0
000000B0 05 0B 24 E1 0A 00 00 00 0B 00 00 00 11 00 11 00 ..$ß............
000000C0 68 69 64 64 65 6E 6D 65 73 73 61 67 65 2E 74 78 hiddenmessage.tx
000000D0 74 55 54 0D 00 07 D8 BF F6 3F A0 92 F6 3F D6 BF tUT...++÷?áÆ÷?++
000000E0 F6 3F 2B C8 CF C9 CF 55 28 00 91 00 50 4B 01 02 ÷?++-+-U(.æ.PK..
000000F0 17 0B 14 00 02 00 08 00 9C 41 23 30 05 0B 24 E1 ..¶.....£A#0..$ß
00000100 0A 00 00 00 0B 00 00 00 11 00 09 00 00 00 00 00 ................
00000110 00 00 20 00 80 81 00 00 00 00 68 69 64 64 65 6E .. .Çü....hidden
00000120 6D 65 73 73 61 67 65 2E 74 78 74 55 54 05 00 07 message.txtUT...
00000130 D8 BF F6 3F 50 4B 05 06 00 00 00 00 01 00 01 00 ++÷?PK..........
00000140 48 00 00 00 4A 00 00 00 00 00 48 49 5A 00 A8 00 H...J.....HIZ.¿.
00000150 00 00 30 63 63 31 37 35 62 39 63 30 66 31 62 36 ..0cc175b9c0f1b6
00000160 61 38 00 00 03 00 a8....
以上是使用密码'a'来进行加密的文件结尾
00000090 00 00 00 FF DA 00 08 01 01 00 00 3F 00 AA 60 3F ..._+......?.¬`?
000000A0 FF D9 50 4B 03 04 14 00 02 00 08 00 9C 41 23 30 _+PK..¶.....£A#
0000000B0 05 0B 24 E1 0A 00 00 00 0B 00 00 00 11 00 11 00 ..$ß............
000000C0 68 69 64 64 65 6E 6D 65 73 73 61 67 65 2E 74 78 hiddenmessage.tx
000000D0 74 55 54 0D 00 07 D8 BF F6 3F A0 92 F6 3F D6 BF tUT...++÷?áÆ÷?++
000000E0 F6 3F 2B C8 CF C9 CF 55 28 00 91 00 50 4B 01 02 ÷?++-+-U(.æ.PK..
000000F0 17 0B 14 00 02 00 08 00 9C 41 23 30 05 0B 24 E1 ..¶.....£A#0..$ß
00000100 0A 00 00 00 0B 00 00 00 11 00 09 00 00 00 00 00 ................
00000110 00 00 20 00 80 81 00 00 00 00 68 69 64 64 65 6E .. .Çü....hidden
00000120 6D 65 73 73 61 67 65 2E 74 78 74 55 54 05 00 07 message.txtUT...
00000130 D8 BF F6 3F 50 4B 05 06 00 00 00 00 01 00 01 00 ++÷?PK..........
00000140 48 00 00 00 4A 00 00 00 00 00 48 49 5A 00 A8 00 H...J.....HIZ.¿.
00000150 00 00 39 32 65 62 35 66 66 65 65 36 61 65 32 66 ..92eb5ffee6ae2f
00000160 65 63 00 00 03 00 ec....
以上是使用密码'b'来进行加密的文件结尾
可以看到,无论使用何种密码,数据部分均相同,仅仅是末尾的一个字符串不同,表明密码与被隐藏的数据压缩包加密效果无关(仅仅是做了压缩)。
观察末尾字符串
使用""加密:d41d8cd98f00b204
MD5("")= d41d8cd98f00b204e9800998ecf8427e
使用'a'加密:0cc175b9c0f1b6a8
MD5('a')=0cc175b9c0f1b6a831c399e269772661
使用'b'加密:92eb5ffee6ae2fec
MD5('b')=92eb5ffee6ae2fec3ad71c777531578f
可以看到,末尾字符串为md5(密码)的前16位
1.60版本:
00000290 08 09 42 00 4A 52 30 00 D8 01 A0 3F FF D9 9E 97 ..B.JR0.Ø..?ÿÙ..
000002A0 BA 2A 00 80 88 C9 A3 70 97 5B A2 E4 99 B8 C1 78 º*...É£p.[¢ä.¸Áx
000002B0 72 0F 88 DD DC 34 2B 4E 7D 31 7F B5 E8 70 39 A8 r..ÝÜ4+N}1.µèp9¨
000002C0 B8 42 75 68 71 91 03 5F A4 A4 E0 EA 43 9F AA 8E ¸Buhq‘._¤¤àêC.ª.
000002D0 04 99 FA A5 EC 63 9F 23 79 7E 5D 91 33 43 3B C3 ..ú¥ìc.#y~]‘3C;Ã
000002E0 C1 C4 21 5F 71 5F DF C5 D9 1C C5 DE 83 6C 4D EC ÁÄ!_q_ßÅÙ.ÅÞ.lMì
000002F0 D5 DC 45 A9 D7 C7 09 EE 15 21 53 28 0E 56 4A A9 ÕÜE©×Ç.î.!S(.VJ©
00000300 22 71 C1 03 3E D5 F0 EE 68 F5 4F DC 08 01 F3 61 "qÁ.>ÕðîhõOÜ..óa
00000310 34 41 E7 10 89 75 89 30 C0 49 7A CF C6 CB 11 B4 4Aç..u.0ÀIzÏÆË.´
00000320 F1 10 19 93 83 27 E2 8B 49 26 33 F3 76 8E A4 11 ñ....'â.I&3óv.¤.
00000330 D2 7D A6 17 96 F9 11 58 02 E2 4C A3 B5 32 33 32 Ò}¦..ù.X.âL£µ232
00000340 21 B1 1A A6 D9 FD 23 45 1F 87 13 3F 45 34 E0 8C !±.¦Ùý#E...?E4à.
00000350 F1 E5 0D 35 A9 5C EB DD F3 EC 32 5F DE 38 93 86 ñå.5©\ëÝóì2_Þ8..
00000360 8A D7 F8 5D EB B9 FC 1C E0 68 D7 C2 91 68 B1 DC .×ø]ë¹ü.àhבh±Ü
00000370 44 6C E2 DC 27 E1 A3 5B 71 29 8B 78 E5 04 D5 6E DlâÜ'á£[q).xå.Õn
00000380 81 CF 34 BF 1F 5B E8 55 B1 C2 7F F3 62 F0 48 49 .Ï4¿.[èU±Â.óbðHI
00000390 5A 00 F0 00 00 00 38 6B 6B 39 3F 3D 6A 31 6B 38 Z.ð...8kk9?=j1k8
000003A0 6E 39 6A 3E 69 30 00 00 03 00 n9j>i0....
以上是使用密码'a'来进行加密的文件结尾,可以看到,1.60版本加密后已经看不到zip文件结构
让我们进一步研究16个带下划线的红色字节。我们记得在该软件的1.50版中,它是密码MD5的一半。对于密码'a',我们有:
v1.50: 30 63 63 31 37 35 62 39 63 30 66 31 62 36 61 38 0cc175b9c0f1b6a8
现在,使用相同的密码“ a”,我们有:
v1.60: 38 6B 6B 39 3F 3D 6A 31 6B 38 6E 39 6A 3E 69 30 8kk9?= j1k8n9j> i0
没有密码时,字符串为(v1.50):
v1.50: 64 34 31 64 38 63 64 39 38 66 30 30 62 32 30 34 d41d8cd98f00b204
没有密码时,字符串为(v1.60):
v1.60: 6C 3C 39 6C 30 6B 6C 31 30 6E 38 38 6A 3A 38 3C l <9l0kl10n88j:8 <
稍加计算,可以看到1.60版本末尾密码可以由1.50版本末尾密码+8得到
一般的CTF题目特征:
6C 3C 39 6C 30 6B 6C 31 30 6E 38 38 6A 3A 38 3C l <9l0kl10n88j:8 <
由于密码没什么意义,因此大多数题目都不设置密码,通过文件结尾的“l<9l0kl10n88j:8<”字符串 ,明确需要使用的工具是Steganography即可。
变态的CTF题目特征:
部分题目仍然会设置密码,但是末尾字符串的格式是不会变的,取值范围在ascii('0123456789abcdef')+8中,如果已经在题目的先前步骤中,甚至可以反推末尾的密码校验字符串。
有些文件(如jpg)中很少出现连续(甚至长度达16+个)的可显字符,尤其是在文件结尾,因此文件末的连续字符串也可当作特征(jpg的隐写方法就那么几种F5、outguess等也不会出现这种情况)。