用户名  找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
热搜: 活动 交友 discuz
查看: 182|回复: 0

神奇的 Base64 隐写

[复制链接]

2万

主题

158

回帖

17万

积分

管理员

积分
170484
发表于 2022-4-21 22:40:14 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 mind 于 2022-4-21 22:42 编辑

神奇的 Base64 隐写



俄罗斯有个叫 Olympic_ctf 的 CTF, 在 2014 年有道 misc 题是关于 Base64 的隐写题. 做完真是感觉无处不能用于隐写
题目
大意就是给了你一段字符串, 让你找 flag.
这里放上字符串, 便于读者实验
复习一下 Base64 吧
BASE64 是一种编码方式, 是一种可逆的编码方式.
编码后的数据是一个字符串, 包含的字符为: A-Za-z0-9+/
共 64 个字符:26 + 26 + 10 + 1 + 1 = 64
其实是 65 个字符, = 是填充字符.
64 个字符需要 6 位二进制来表示, 表示成数值为 0~63.

这样, 长度为 3 个字节的数据经过 Base64 编码后就变为 4 个字节
编码
比如, 字符串"Tr0"经过 Base64 编码后变为"VHIw"

上面说的字符串长度为 3 个字节的数据位数是 8x3=24, 可以精确地分成 6x4.
如果字节数不是 3 的倍数, 则位数就不是 6 的倍数, 那么就不能精确地划分成 6 位的块.
此时, 需在原数据二进制值后面添加零, 使其字节数是 6 的倍数.
然后, 在编码后的字符串后面添加 1 个或 2 个等号"=", 表示所添加的零值字节数.
比如, 字符串"Tr0y"经过 Base64 编码后变为"VHIweQ=="
Tr0y
橙色底纹就是添加的 0.
这是 Base64 编码的方式.
解码
解码就是编码的逆过程。
  • 把 Base64 字符串去掉等号, 转为二进制数(VHIweQ== -> VHIweQ -> 010101000111001000110000011110010000).
  • 从左到右, 8 个位一组, 多余位的扔掉, 转为对应的 ASCII 码(01010100 01110010 00110000 01111001 0000 -> 扔掉最后 4 位 -> 01010100 01110010 00110000 01111001 -> Tr0y)
隐写原理
注意红色的 0, 我们在解码的时候将其丢弃了, 所以这里的值不会影响解码. 所以我们可以在这进行隐写.
为什么等号的那部分 0 不能用于隐写? 因为修改那里的二进制值会导致等号数量变化, 解码的第 1 步会受影响. 自然也就破坏了源字符串.
而红色部分的 0 是作为最后一个字符二进制的组成部分, 还原时只用到了最后一个字符二进制的前部分, 后面的部分就不会影响还原.
唯一的影响就是最后一个字符会变化. 如下图


如果你直接解密'VHIweQ=='与'VHIweR==', 得到的结果都是'Tr0y'.

当然, 一行 base64 顶多能有 2 个等号, 也就是有 2*2 位的可隐写位. 所以我们得弄很多行, 才能隐藏一个字符串, 这也是为什么题目给了一大段 base64 的原因.
接下来,把要隐藏的 flag 转为 8 位二进制, 塞进去就行了.
加密解密



Emmmmmm

很多国外的 CTF 出题思路异常开阔, 值得好好学学.
最后附上这道题的答案吧


话说貌似 ZJPCCTF 也出过这种题.

from: link

回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-1-26 21:17

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表