文本隐写(txt零宽度隐写)

介绍

零宽度字符是一种字节宽度为0的不可打印的Unicode字符, 在浏览器等环境不可见, 但是真是存在, 获取字符串长度时也会占位置, 表示某一种控制功能的字符。

1
2
3
4
5
6
7
8
9
10
11
12
零宽空格(zero-width space, ZWSP)用于可能需要换行处。
Unicode: U+200B HTML: ​
零宽不连字 (zero-width non-joiner,ZWNJ)放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。
Unicode: U+200C HTML: ‌
零宽连字(zero-width joiner,ZWJ)是一个控制字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个本不会发生连字的字符产生了连字效果。
Unicode: U+200D HTML: ‍
左至右符号(Left-to-right mark,LRM)是一种控制字符,用于计算机的双向文稿排版中。
Unicode: U+200E HTML: ‎ ‎ 或‎
右至左符号(Right-to-left mark,RLM)是一种控制字符,用于计算机的双向文稿排版中。
Unicode: U+200F HTML: ‏ ‏ 或‏
字节顺序标记(byte-order mark,BOM)常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的标记。
Unicode: U+FEFF

1727169730063-ac38b178-af87-4b96-a7e5-824df088a345.png

我们能看到的只有六个字,但是显示的length有34,零宽度字符就会产生这个效果,他不影响阅读,但是真实存在,也会占长度。

虽然我们看到的样子是上面这个样子,但是实际上他是下面这个样子~

1727169771601-c13d9c9f-e824-4b39-a4bb-dc32997c2495.png

1727169779897-bd10d910-2812-4fdc-a278-973cc94228e9.png

判断

1727169806784-458d8dc8-1ad2-48a5-9f19-275be57a26c6.png

蓝色的就是零宽度字符啦

1727170020099-34815226-2a05-432e-84a5-d1d74795feeb.png

在线解密

https://tool.bfw.wiki/tool/1695021695027599.html

零宽文本加解密工具 - 翰络云工具 (hanloth.cn)(推荐这个)

Unicode Steganography with Zero-Width Characters (mzy0.com)(有200f)

Unicode Steganography with Zero-Width Characters (330k.github.io)

Offdev.net - Zero-width space steganography javascript demo

自定义零宽 提取一下16进制f3a084和f3a85

hidden-word.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def process_file(input_file, output_file):
with open(input_file, 'rb') as f_in, open(output_file, 'wb') as f_out:
data = f_in.read()
i = 0
while i < len(data) - 3: # 需要至少4字节: f3 a0 (84/85) XX
# 检查是否匹配 0xf3 0xa0
if data[i] == 0xf3 and data[i+1] == 0xa0:
opcode = data[i+2]

# 确定要加的值
if opcode == 0x85:
add_value = 0xd0
elif opcode == 0x84:
add_value = 0x90
else:
i += 1
continue

# 处理下一个字节
if i + 3 < len(data):
original_byte = data[i+3]
result_byte = (original_byte + add_value) % 256 # 防止溢出
f_out.write(bytes([result_byte]))

i += 4 # 跳过已处理的4字节
else:
i += 1

process_file('hidden-word.txt', 'flag.txt')
print("处理完成!结果字节已保存到flag.txt")

例题

零宽字符隐写——2021网刃杯CTF 签到_零宽隐写-CSDN博客

零宽度字符隐写(CTF) - Hardworking666 - 博客园 (cnblogs.com)

1、

发现显示长度与所见长度不合,是txt零宽度隐写

1727168251957-d17c4a2d-ff0e-411f-8e4e-a8acf25a58b1.png

放入kali里面

用vi +文件名 命令打开1727168212851-04de2979-eb96-48e1-8f5a-fd9449e6a4f0.png

很明显是零宽度字符隐写,在上面有找到4种零宽度字符,使用在线解密工具进行解密

零宽文本加解密工具 - 翰络云工具 (hanloth.cn)

有feff、200f、200e、200b、200c

1727174345421-21bd6add-c6c8-4528-9d50-03afd004a79c.png

拿到密码,解一下佛教

1727174412482-f9b917d8-64a0-4aa9-a371-e0230afaf594.png

1727174715148-c4347e29-2891-44be-94b6-7254ae174181.png

更新: 2025-10-31 15:27:15
原文: https://www.yuque.com/chaye-apqbl/vsc85q/gbn435ihvmwgudak


http://example.com/2026/01/19/MISC/隐写/文本隐写(txt零宽度隐写)/
Author
chaye
Posted on
January 19, 2026
Licensed under