2018.4.29 CISCN CTF MISC-PICTURE

本文介绍如何从一张图片中提取隐藏的ZIP文件,并通过解析ZLIB压缩数据、Base64解码等步骤逐步解开层层加密,最终获得flag。

PICTURE

拿到之后是个图片,首先用010Editor打开发现是一个jpg:

 

再用ubuntu的binwalk查看是否还有其他文件:

 

 

FF D9是jpg的标准结尾。78 9C是zlib的开始。

利用如下代码解密zlib数据:(python 2)

import zlib

import binascii

data ="789CAD50C9929B400CFD200E060C060E3974B3B9C1F6B00468B8D1801B308B3D80B1F9FA402533955B2E51A99E9EA457924A3E0734085D005607889D1B7609AE357A4474CD75016CB841CC2BB704EBB6EC87CFBC8E778FE22C97533E75B475F4FCFA298530C7B9D4702F271062E5D117E579D6693570EA699C9EE4C3D2F054D9240BBA0ECBDD25DD993816AD72E4E30377637C27B53C38CFAE5279AE2E758811C5D129AF73FDD1667A084FC0453BF0AF3BD5ADF9DBD0378335E1BD46A5807E15005C29347702C2293B1B85373143A97CFE04A1684A87F7911FCF30D00703D23FFA7574B8F1E3BC82960163740BECF58417E8B912F6D8656DA716186497CAE3C8F7D735D7DC7B90B5469D445619F303B54DEE99ED5D9AB5E15A1359645E4A62CE9498C692ABB783E6F614E9C99D980145F56B2EF0A54FA2D78016C0A06AD33553E283D749857752019944CA2D8F5E8D43591BA980FEBD3B6AC33761BD7BDE364B1A299387AD37D9A3C3B726FD4FD107F2C987738C2F4BCE2BEF440592FDF50B007EFC0269EAC2D4".decode('hex')

result = binascii.hexlify(zlib.decompress(data))

print result

 

这些应该是文件的hex,看看对应的ascii的字符,再解一次hex:

result.decode(‘hex’)

 

里面是0-9a-zA-z /+,最后又是=,所以是个base64,所以解密:


 

#python2

import zlib

import binascii

import base64



data = "789CAD50C9929B400CFD200E060C060E3974B3B9C1F6B00468B8D1801B308B3D80B1F9FA402533955B2E51A99E9EA457924A3E0734085D005607889D1B7609AE357A4474CD75016CB841CC2BB704EBB6EC87CFBC8E778FE22C97533E75B475F4FCFA298530C7B9D4702F271062E5D117E579D6693570EA699C9EE4C3D2F054D9240BBA0ECBDD25DD993816AD72E4E30377637C27B53C38CFAE5279AE2E758811C5D129AF73FDD1667A084FC0453BF0AF3BD5ADF9DBD0378335E1BD46A5807E15005C29347702C2293B1B85373143A97CFE04A1684A87F7911FCF30D00703D23FFA7574B8F1E3BC82960163740BECF58417E8B912F6D8656DA716186497CAE3C8F7D735D7DC7B90B5469D445619F303B54DEE99ED5D9AB5E15A1359645E4A62CE9498C692ABB783E6F614E9C99D980145F56B2EF0A54FA2D78016C0A06AD33553E283D749857752019944CA2D8F5E8D43591BA980FEBD3B6AC33761BD7BDE364B1A299387AD37D9A3C3B726FD4FD107F2C987738C2F4BCE2BEF440592FDF50B007EFC0269EAC2D4".decode('hex')

result = binascii.hexlify(zlib.decompress(data))

print result

result = result.decode('hex')

print result

r = base64.b64decode(result)

print r

f = open(r"2.zip","wb")

f.write(r)

f.close()

打开之后发现一个被加密的文件,双击的时候出来这个所以修复文件头:KP -> PK

 

 

看到注释,密码已经很明显了,python2:

 

解压得到

begin 644 key.txt

G0TE30TY[-T$X0T5$1D$V-#1".#<T,D8Y,3)!0CDQ-T4T-4%#,#9]

`

end

这是个uucode,直接解密:

>>> import binascii
>>> binascii.a2b_uu('G0TE30TY[-T$X0T5$1D$V-#1".#<T,D8Y,3)!0CDQ-T4T-4%#,#9]')
b'CISCN{7A8CEDFA644B8742F912AB917E45AC06}'

得到flag。

CISCN{7A8CEDFA644B8742F912AB917E45AC06}

# 题目重述 给出一段由摩斯电码(Morse Code)组成的信号: ``` -- --- .-. ... . ..--.- .. ... ..--.- -.-. --- --- .-.. ..--.- -... ..- - ..--.- -... .- -.-. --- -. ..--.- .. ... ..--.- -.-. --- --- .-.. . .-. ..--.- -- -- -.. -.. -- -.. -- -.. -- -- -- -.. -.. -.. /-- -.. -- -.. -.. --/ -- -- -- -- -- /-- -.. -.. -- -.. -- /-- -.. -.. -- ``` 要求将其解码为明文,可能包含 flag。 --- # 详解 我们将摩斯电码逐段翻译成字母。 注意:`..--.-` 是下划线 `_` 的摩斯编码,常用于 CTF 中表示分隔符。 ### 摩斯电码对照表(常用部分): - `A`: `.---` - `B`: `-...` - `C`: `-.-.` - `D`: `-..` - `E`: `.` - `F`: `..-.` - `G`: `--.` - `H`: `....` - `I`: `..` - `J`: `.---` - `K`: `-.-` - `L`: `.-..` - `M`: `--` - `N`: `-.` - `O`: `---` - `P`: `.---.` - `Q`: `--.-` - `R`: `.-.` - `S`: `...` - `T`: `-` - `U`: `..-` - `V`: `...-` - `W`: `.--` - `X`: `-..-` - `Y`: `-.--` - `Z`: `--..` - `_`: `..--.-` --- ### 逐词解码: 1. `--` → M 2. `---` → O 3. `.-.` → R 4. `...` → S 5. `.` → E 6. `..--.-` → _ 👉 `MORSE_E` 7. `..` → I 8. `...` → S 9. `..--.-` → _ 👉 `IS_` 10. `-.-.` → C 11. `---` → O 12. `---` → O 13. `.-..` → L 14. `..--.-` → _ 👉 `COOL_` 15. `-...` → B 16. `..-` → U 17. `-` → T 18. `..--.-` → _ 👉 `BUT_` 19. `-...` → B 20. `.-` → A 21. `-.-.` → C 22. `---` → O 23. `-.` → N 24. `..--.-` → _ 👉 `BACON_` 25. `..` → I 26. `...` → S 27. `..--.-` → _ 👉 `IS_` 28. `-.-.` → C 29. `---` → O 30. `---` → O 31. `.-..` → L 32. `.` → E 33. `.-.` → R 34. `..--.-` → _ 👉 `COOLER_` 35. `--` → M 36. `-..` → D 37. `-..` → D 38. `--` → M 39. `-..` → D 40. `--` → M 41. `-..` → D 42. `--` → M 43. `--` → M 44. `-..` → D 45. `-..` → D 46. `-..` → D 👉 `MDDMMDMDMMMDDD` 47. `/` → (分隔符) 48. `--` → M 49. `-..` → D 50. `-..` → D 51. `--` → M 52. `-..` → D 53. `--` → M 👉 `MDDMMDM` 54. `/` → (分隔符) 55. `--` → M 56. `--` → M 57. `--` → M 58. `--` → M 59. `--` → M 👉 `MMMMM` 60. `/` → (分隔符) 61. `--` → M 62. `-..` → D 63. `-..` → D 64. `--` → M 65. `-..` → D 66. `--` → M 👉 `MDDMMDM` 67. `/` → (分隔符) 68. `--` → M 69. `-..` → D 70. `-..` → D 71. `--` → M 👉 `MDDMM` --- ### 合并结果: ``` MORSE_IS_COOL_BUT_BACON_IS_COOLER_MDDMMDMDMMMDDD/MDDMMDM/MMMMM/MDDMMDM/MDDMM ``` 观察发现后半段可能是某种编码或干扰项。重点在于前半句: > **MORSE_IS_COOL_BUT_BACON_IS_COOLER** 这本身就是一条提示! 在 CTF 中,“Bacon” 不仅指食物,还指 **培根密码(Baconian Cipher)** —— 一种用两种字符(如 A/B)表示字母的隐写方式。 而后半段: ``` MDDMMDMDMMMDDD/MDDMMDM/MMMMM/MDDMMDM/MDDMM ``` 很可能就是 **培根密码的变体**,其中: - `M` 代表一种类型(如 A) - `D` 代表另一种类型(如 B) 但当前没有足够信息继续解培根密码。 --- # 最终答案 $$ \text{MORSE\_IS\_COOL\_BUT\_BACON\_IS\_COOLER} $$ 可能 flag 为: ``` flag{MORSE_IS_COOL_BUT_BACON_IS_COOLER} ``` 或 ``` CTF{MORSE_IS_COOL_BUT_BACON_IS_COOLER} ``` 取决于题目格式。 --- # 知识点 1. **摩斯电码(Morse Code)** 使用点和划表示字符,`..--.-` 代表下划线,广泛用于无线电通信和 CTF 隐写题。 2. **培根密码(Baconian Cipher)** 由弗朗西斯·培根发明,用五位二元序列(A/B)编码字母,常用于文本隐写。 3. **CTF 中的隐写提示** 当出现 “Bacon” 时,往往暗示存在培根密码或 A/B 编码模式,需寻找双态符号(如大小写、黑白、M/D)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值