我有一个似乎是压缩的PNG文件的原始数据,我需要找到用于未知压缩的解压缩算法。
您可以在这里看到该文件。
我认为他们正在使用某种LZRW 1带有一些奇怪的字典构建例程。

我成功地正确解压缩了文件的IHeader(我用CRC进行了验证)。
它们之间的比较:

这是它使用的算法:

每8个字节有一个1字节的标志。
如果标志是> 0,我正在检查其位。 br />例如:08 (0000 1000) 00 00 02 58 (00 83) 5A 08 06

标志是08 => 0000 1000
,所以它需要在标志=> 00 83后向前5步....

该字典似乎由2个字节构成,例如:00 83
以二进制形式:0000 0000 1000 0011

从右边开始的前4位可能是长度,而其余部分(12位) )可能是绝对偏移。
偏移长度(0000 0000 1000) (0011)
我看在第一个大块字典(0x0 0x83)之后查看下一个标志,并看到一个新的字典(0x9 0x84),但效果不佳:

这是我的算法收到的“最佳”结果:

我的算法伪代码:

data = readFile(filePath)
i = 0
while i < len(data):
    controlbits = data[i] // controlbits is 8 bites
    i += 1
    for bit in controlbits:
        if bit == 0:
            output += data[i]
            i += 1
        else: // bit is 1
            // Example: data[i] = 0x0, data[i+1] = 0x83
            // data[i] = 0000 0000
            // data[i+1] = 1000 0011
            // dict = 0000 0000 1000 0011
            dict = data[i] << 8
            dict |=  data[i+1]


            offset = dict[0:12]
            len = dict[12:16]
            output += output[offset: offset+len]
            i += 2


我在开头给出了完整文件内容的链接,但您也可以在此处找到文件中的570个字节:

0000-0010:  00 89 50 4e-47 0d 0a 1a-0a 00 00 00-00 0d 49 48  ..PNG... ......IH
0000-0020:  44 52 08 00-00 02 58 00-83 5a 08 06-80 00 83 64  DR....X. .Z.....d
0000-0030:  31 28 fe 00-00 21 00 c7-49 44 41 54-78 9c ed 00  1(...!.. IDATx...
0000-0040:  dd 79 54 14-57 fa 37 f0-00 6f 2f ac-22 8d a2 20  .yT.W.7. .o/."...
0000-0050:  41 00 40 82-4b 5c 23 2e-e8 24 00 ae-e8 88 1a b5  A.@.K\#. .$......
0000-0060:  d1 38 81 00-18 46 09 82-26 26 18 67-00 8c fa 33  .8...F.. &&.g...3
0000-0070:  a2 a2 a3 31-06 00 c6 2d-1a 15 63 3c-2a d1 00 18  ...1...- ..c<*...
0000-0080:  25 c6 65 cc-28 51 8f 00-21 6a 30 1a-11 a2 a0 c6  %.e.(Q.. !j0.....
0000-0090:  00 05 d4 38-80 2c 8d 46-a1 00 e9 a6-de 3f 3c f4  ...8.,.F .....?<.
0000-00a0:  4b 2d 00 dd-54 77 57 43-8b cf e7 00-1c ce a1 aa  K-..TwWC ........
0000-00b0:  6e df ba d5-00 b5 3d 5d-f7 d6 bd 32-86 00 61 18  n.....=] ...2..a.
0000-00c0:  10 42 08 21-84 10 02 c9-c8 1b bb 00-84 09 84 4d  .B.!.... .......M
0000-00d0:  08 0d 05 58-84 09 84 12-a3 00 41 8b-09 84 44 62  ...X.... ..A...Db
0000-00e0:  14 60 11 09-94 08 48 8c-02 2c 09 95-89 51 80 42  .`....H. .,...Q.B
0000-00f0:  45 09 a4 22-31 0a b0 09-a4 42 08 24-46 01 16 09  E.."1... .B.$F...
0000-0100:  b3 42 88 c4-09 28 c0 22-84 09 83 91-18 0a 63 ff  .B...(." ......c.
0000-0110:  09 84 0a 94-09 84 0a d5-09 94 0b 24-09 95 0b 64  ........ ...$...d
0000-0120:  fe 09 a4 0b-a4 09 a4 0b-e5 09 b3 0c-37 09 83 91  ........ ....7...
0000-0130:  7f 18 0a 63-09 84 0a 94-09 84 0a d5-09 94 0b 24  ...c.... .......$
0000-0140:  ff 09 95 0b-64 09 a4 0b-a4 09 a4 0b-e5 09 b3 0c  ....d... ........
0000-0150:  37 80 09 83-91 98 52 ea-0c 1f 3f 00-7e 8c 07 0f  7.....R. ..?.~...
0000-0160:  1e a0 b2 b2-00 12 1e 1e-1e 68 d9 b2-25 00 94 4a  ........ .h..%..J
0000-0170:  c9 57 d3 24-65 66 00 66-e2 f4 e9 d3-b8 7b f7 00  .W.$ef.f .....{..
0000-0180:  2e 34 1a 0d-00 60 eb d6-00 ad 8d 5c-2a 22 25 3a  .4...`.. ...\*"%:
0000-0190:  3f 00 08 21-f6 aa b4 b4-14 a9 00 a9-a9 d0 68 34  ?..!.... ......h4
0000-01a0:  18 37 6e 00-1c 5e 7e f9-e5 c6 2e 92-00 64 0a 0a  .7n..^~. .....d..
0000-01b0:  0a b0 68 d1-22 00 38 38-38 40 a5 52-a1 43 00 87  ..h.".88 8@.R.C..
0000-01c0:  0e 18 3c 78-30 5e 7a 00-e9 25 9b ad-53 c6 30 0c  ..<x0^z. .%..S.0.
0000-01d0:  00 63 6d 26-85 85 85 d8-b0 00 61 03-d2 d2 d2 90  .cm&.... ..a.....
0000-01e0:  97 97 00 87-9a 9a 1a c3-32 85 42 00-81 4e 9d 3a  ........ 2.B..N.:
0000-01f0:  61 e9 d2 a5-01 78 fd f5-d7 59 9f 1b-11 33 00 ae  a....x.. .Y...3..
0000-0200:  5d bb 66 32-ef bf fd 00-ed 6f f8 d7-bf fe 65 6d  ].f2.... .o....em
0000-0210:  00 11 ed da-d9 b3 67 31-7d 00 fa 74-e4 e4 e4 b0  ......g1 }..t....
0000-0220:  e6 2b 00 14-0a e8 74 3a-ab f3 1f 00-38 70 20 8a  .+....t: ....8p..
0000-0230:  8b 8b 0d d3-00 cb 96 2d-c3 c4 89 13-ad 00 ce 97  .......- ........
0000-0240:  88 63 e9 f9-41 48 00 53-b1 62 c5 0a-6c df be 00  .c..AH.S .b..l...
0000-0250:  dd 30 fd ca-2b af e0 cb-00 2f bf 6c-c4 12 11 ae  .0..+... ./.l....
0000-0260:  a2 00 a2 22-04 07 07 e3-8f 3f 80 01-a3 28 95 4a  ...".... .?...(.J
0000-0270:  7c f7 dd 77-00 78 ed b5-d7 1a bc 2c-fb 00 f7 ef  |..w.x.. ...,....
0000-0280:  c7 fc f9 f3-0d d3 00 ad-5b b7 46 46-46 86 55 00  ........ [.FFF.U.
0000-0290:  79 66 65 65-21 38 38 98-00 37 ff af-7f fd 2b b6  yfee!88. .7....+.
0000-02a0:  6c 00 d9 82-80 80 00 ab-f2 17 00 62-f5 4f e7 a3  l....... ...b.O..
0000-02b0:  47 8f 62 00-d2 a4 49 28-2d 2d 15 5c-00 ae d7 eb  G.b...I( --.\....
0000-02c0:  71 e5 ca 15-5c 00 bf 7e-9d b7 ec e6-cd 9b 00 b8  q...\..~ ........
0000-02d0:  7a f5 aa c9-fc ef df 20-bf 6f 17 33-5a 46 46 06  z....... .o.3ZFF.
0000-02e0:  86 00 0f 1f-0e ad 56 6b-b3 75 a0 21-23 1d 14 03  ......Vk .u.!#...
0000-02f0:  86 e9 f2 f2-72 00 9b ad-ab a1 dd be-7d 1b 00 27  ....r... ....}..'
0000-0300:  4e 9c 40 68-68 28 da 00-b5 6b d7 d8-c5 e1 b1 e6  N.@hh(.. .k......
0000-0310:  10 fc 78 56-23 c4 f7 ee-dd 43 00 71-71 31 b4 5a  ..xV#... .C.qq1.Z
0000-0320:  2d dc dd 00-dd 11 10 10-80 f6 ed db-00 c3 c1 c1  -....... ........
0000-0330:  a1 d1 cb 66-cf 02 c7 8b-bd 97 cf 52-14 03 ac 00  ...f.... ...R....
0000-0340:  6b 7d db b6-6d 1b b1 34-00 44 c8 fa-f5 eb 0d c1  k}..m..4 .D......
0000-0350:  15 40 00 18-63 24 26 26-36 4a 80 00-a5 d1 68 58  .@..c$&& 6J....hX
0000-0360:  c7 8b 2d ef-00 59 e9 e9-e9 08 09 09-c1 00 85 0b  ..-..Y.. ........
0000-0370:  17 24 3f 2e-ad 6a 00 83-95 9d 9d 8d-f1 e3 c7 00  .$?..j.. ........
0000-0380:  1b bd 79 10-d3 f4 7a 3d-00 a2 a3 a3-79 c1 55 bb  ..y...z= ....y.U.
0000-0390:  76 00 ed 30-62 c4 08 7a-a2 61 00 44-69 69 29 e2  v..0b..z .a.Dii).
0000-03a0:  e2 e2 10 00-14 14 84 c0-c0 40 4c 9d-00 3a 15 77  ........ .@L..:.w
0000-03b0:  ef de 6d ec-62 00 f1 3c-4f e7 c7 ef-bf ff 00 8e  ..m.b..< O.......
0000-03c0:  19 33 66 20-30 30 10 00-81 81 81 18-30 60 00 c6  .3f.00.. ....0`..
0000-03d0:  00 8f 1f 8f-88 88 08 8c-1a 00 35 0a-5d ba 74 81  ........ ..5.].t.
0000-03e0:  4a a5 40 42-24 43 16 2f-5e 8c c7 8f-00 1f 37 58  J.@B$C./ ^.....7X
0000-03f0:  d9 ec fd 78-b1 00 f7 f2-d9 9b e4 e4-64 38 00 3b  ...x.... ....d8.;
0000-0400:  3b 1b fe ba-76 ed 6a 00-32 bd 46 a3-61 a5 77 76  ;...v.j. 2.F.a.wv
0000-0410:  00 76 c6 c9-93 27 1b a8-b4 00 cf 8e-ba 3f c2 6b  .v...'.. .....?.k
0000-0420:  fd ef 04 7f-ff 13 fd f9-29 d3 9a b5-00 5f 1a 9a  ........ )...._..
0000-0430:  87 87 07 5e-7f 00 fd 75-0c 1e 3c 18-5e 5e 00 5e  ...^...u ..<.^^.^
0000-0440:  ac 65 45 45-45 98 39 00-73 a6 e4 eb-b4 ea 09 d6  .eEEE.9. s.......
0000-0450:  00 9c 39 73-f0 e4 c9 13-d6 40 bc 12-b3 22 26 26  ..9s.... .@..."&&
0000-0460:  06 7e 7e 00-7e a8 a8 a8-40 51 51 11-00 ae 5c b9  .~~.~... @QQ...\.
0000-0470:  22 f8 6b 6c-c6 00 8c 19-28 2a 2a 62-cd 4b 00 49  ".kl.... (**b.K.I
0000-0480:  49 69 f2 4f-ad 6a 1d 00-3b 76 0c 37-6f de 34 4c  Ii.O.j.. ;v.7o.4L
0000-0490:  08 3b 3a 3a-62 25 33 98-30 61 00 42-23 96 ca fe  .;::b%3. 0a.B#...
0000-04a0:  15 15 15 00-e1 8b 2f be-68 ec 62 d4-00 cb da f3  ....../. h.b.....
0000-04b0:  e3 59 a0 d5-6a 00 31 7b-f6 6c 6c da-b4 a9 00 de  .Y..j.1{ .ll.....
0000-04c0:  ea ec 27 4f-9e e0 e4 02-c9 93 38 79-f2 24 2c 93  ..'O.... ..8y.$,.
0000-04d0:  e0 00 ea ea-da 20 65 b4-f7 e3 00 c5-de cb 67 6f  ......e. ......go
0000-04e0:  74 3a 1d 00-aa aa aa 0c-d3 75 ff 17-00 c2 30 0c  t:...... .u....0.
0000-04f0:  2f 8d 5e af-b7 00 49 d9-9e 65 61 61-61 48 00 49  /.^...I. .eaaaH.I
0000-0500:  49 61 cd 1b-35 6a 94 02-e8 cf 57 57-57 9b 34 23  Ia..5j.. ..WWW.4#
0000-0510:  5a 80 2b b3-b0 6f df 3e-00 40 4d 10-4d 0d fe 33  Z.+..o.> .@M.M..3
0000-0520:  a3 63 ee dc-b9 00 86 e5-07 0e 1c c0-fd fb 00 f7  .c...... ........
0000-0530:  e1 e3 e3 23-d9 3a 2d 00-0e b0 4a 4a-4a f0 c3 0f  ...#.:-. ..JJJ...
0000-0540:  00 3f b0 e6-4d 9b 36 0d-9b 00 37 6f-16 9d c7 8c  .?..M.6. ..7o....
0000-0550:  19 33 00 78-f3 0e 1f 3e-fc dc 04 00-58 a7 4f 9f  .3.x...> ....X.O.
0000-0560:  66 4d c7 c7-00 c7 53 70-d5 44 48 71-7e 20 d8 bb  fM....Sp .DHq~...


评论

可以肯定的是您已经想到了这一点,但是是否还有其他压缩示例?可能是纯文本,XML文件,也可能是未经压缩的文件。这样可以更容易地猜出词典是如何构建的。

不幸的是,这不是因为它是CTF的一部分,而面临的挑战是在不了解压缩的情况下找出解压缩算法。您只需要查看压缩图像就可以弄清楚。 PNG具有标准标头,因此应该是线索,因为我已经展示了如何找出原始标头,但我们还需要在数据上进行操作。