您现在的位置是:首页 > 正文

零宽度字符隐写(CTF) 热门推荐

2024-04-01 00:57:02阅读 1

零宽度字符简介

零宽度字符是一些不可见的,不可打印的字符。它们存在于页面中主要用于调整字符的显示格式

常见的零宽度字符及它们的unicode码和原本用途:

零宽度空格符 (zero-width space) U+200B : 用于较长单词的换行分隔
零宽度非断空格符 (zero-width no-break space) U+FEFF : 用于阻止特定位置的换行分隔
零宽度字符 (zero-width joiner) U+200D : 用于阿拉伯文与印度语系等文字中,使不会发生连字的字符间产生连字效果
零宽度字符 (zero-width non-joiner) U+200C : 用于阿拉伯文,德文,印度语系等文字中,阻止会发生连字的字符间的连字效果
左至右符 (left-to-right mark) U+200E : 用于在混合文字方向的多种语言文本中(例:混合左至右书写的英语与右至左书写的希伯来语),规定排版文字书写方向为左至右
右至左符 (right-to-left mark) U+200F : 用于在混合文字方向的多种语言文本中,规定排版文字书写方向为右至左

用法

零宽度字符在通常情况下,在一般的文本编辑器中是不可见的,比如:‌‌‌‌‍‎‍‎Hello,misc‌‌‌‌‍‎‌‌‌‌‌‍‎‌‍!‌‌‌‌‍‎‍
在这句话中我就用零宽度字符隐藏了信息,用CyberChef查看一下即可发现其中的奥秘
在这里插入图片描述
当然,将文本储存为txt格式,用vim查看也可以直接看到其中隐藏的零宽度字符
在这里插入图片描述
其实每一种基于零宽度字符的隐写都可以有自己的隐写方式及加密方式,所以可能用这一个工具(或脚本)加密过的字符串在另一个解密网站就无法成功解密……

转化为二进制的加密:https://zhuanlan.zhihu.com/p/87919817
转化为Morse编码的加密:https://zhuanlan.zhihu.com/p/75992161

加密方式虽多种多样,但万变不离其宗。使用零宽度字符隐写,关键是将想要隐藏的内容用零宽度字符来表示,通过使用不同的零宽度字符,以及不同字符间的排列组合方式来达到隐写的目的

注:加密和解密是一个可逆的过程,但是一定要用相同的方式(相同的工具/网址)进行加解密

在线解密:
https://330k.github.io/misc_tools/unicode_steganography.html

其他用法

隐形水印
逃脱敏感词匹配
传递隐秘信息

相关文章:
用零宽度字符水印揭露泄密者身份:
https://www.freebuf.com/articles/web/167903.html

零宽度字符:和谐?屏蔽?不存在的
https://juejin.cn/post/6844903669192720391

例题:[UTCTF2020] zero

附件链接:https://pan.baidu.com/s/1Ivadp2r9cbKjIZM2vSFDQw
提取码:7vmf

下载附件得到一个txt文件,里面是一长段英文,乍一看没有什么特别的地方,但是将这个文件用vim查看,就会发现其中隐藏了大量的信息
在这里插入图片描述
很显然是零宽度字符隐写,在线网站弄一下,在上图中可以看到共有五种零宽度字符,尝试一下将U+200B这一项去掉,选择其他四种字符进行解密,就可以得到flag:flag{whyNOT@sc11_4927aajbqk14}
在这里插入图片描述
在这里插入图片描述

网站文章

  • 延迟绑定与ret2dlresolve

    延迟绑定与ret2dlresolve

    2024-04-01 00:56:38
  • Java Junit 由浅入深

    Java Junit 由浅入深

    JUnit4的常用方法:fail()方法:是指测试失败assertEquals()方法:测试2个参数(一个是预期值,一个是实际值)是否相等1. @Test : 测试方法,测试程序会运行的方法,后边可以跟参数代表不同的测试,如(expected=XXException.class) 异常测试,(timeout=xxx)超时测试2. @Ignore : 被忽略的测试方法3. @Befo...

    2024-04-01 00:56:31
  • stm32延时函数的三种写法 热门推荐

    我常用的延时函数有3种,一种是空循环,一种是使用systick中断,还有一种是正点原子的延时。 第一种就不做举例,因为平时不常用。但是一些模块给的参考代码的延时函数都会采用这样的方法,直接用就好了,不...

    2024-04-01 00:56:25
  • 在cmd中查询mysql数据库中文显示为“ ?”的解决办法

    在cmd中查询mysql数据库中文显示为“ ?”的解决办法

    解决命令提示符中查询mysql中文显示为问号的方法 今天在使用Navicat给mysql建表的时候输入了一些包含中文的数据,然后想在cmd中操作一下,查询的时候发现中文字段都变成了问号??? 之后我看了一下Navicat中编码方式为UTF-8,而cmd默认编码格式是GBK, 所以只需要在cmd中加上set names gbk; 就能解决了。 ...

    2024-04-01 00:56:00
  • springcloud——客户端Eureka Client实现负载均衡 Ribbon

    springcloud——客户端Eureka Client实现负载均衡 Ribbon

    一、简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均...

    2024-04-01 00:55:54
  • 引用和指针那些事

    对一个数据建立一个“引用”,其作用是为一个已经定义的变量起一个别名【1】引用的格式 类型& 引用的变量名(别名)=定义过的变量名 比如有一个变量a,想给他起一个别名:int a=10; //定义一个变量aint& b=a; //声明b是a的引用cout<<a<<endl; //10cout<<b&...

    2024-04-01 00:55:48
  • 万事开头难? 喵小DI玩“羊了个羊”可不难

    万事开头难? 喵小DI玩“羊了个羊”可不难

    DI-sheep 版 羊了个羊

    2024-04-01 00:55:42
  • UML的学习专题

    根据大神的博客,进行学习UML-统一建模语言

    2024-04-01 00:55:18
  • Django 路径

    django BASE_DIRimport osBASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) PROJEC...

    2024-04-01 00:55:09
  • 【Springboot】springboot中使用mybatis操作数据库

    【Springboot】springboot中使用mybatis操作数据库

    新建springboot项目的时候,选择好web,mybatis,JDBC在application.properties或者application.yml中配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:33...

    2024-04-01 00:55:02