显隐术:如何阅读由零宽字符写的信息?

安全 应用安全
今天,我们来说说,拿到一段通过零宽字符隐藏了信息的字符串,我们怎么阅读被隐藏的信息。

 [[380651]]

今天,我们来说说,拿到一段通过零宽字符隐藏了信息的字符串,我们怎么阅读被隐藏的信息。

例如下面这个字符串:

一日一技是一个每天更新的栏目,希望做到在每天几分钟让你获得提高。

人眼能够正确阅读,但如果我们把它粘贴到 Jupyter里面,大家就能发现零宽字符的踪迹,如下图所示:

在上一篇文章中,我们提到可以使用零宽字符8204代替1,8205代替0,那么,现在我们只需要使用字符串的.replace()方法,就能反向替换回来,如下图所示:

有了这些二进制数以后,我们就能把他们先转成十进制数,然后再转成汉字,如下图所示:

现在,我们想把这个过程自动化。实现一段代码,依次遍历字符串中的每一个字符,发现连续由8204和8205构成的字符串,就把它存起来,直到遇到一个普通字符。拿到每一串由零宽字符构成的字符串以后,把它们分别先替换成字符串形式的二进制数,然后使用int函数转成十进制数,再使用chr函数转成普通的字符。

这个逻辑的代码实现如下图所示:

  1. sentence = ' 一‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌日‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌一‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍技‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌是‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌一‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌个‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍每‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌天‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌更‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌新‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍的‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌栏‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌目‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌,‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍希‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌望‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌做‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌到‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍在‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌每‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌天‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌几‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍分‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌钟‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌让‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌你‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍获‌‍‌‍‍‌‌‍‌‍‌‍‌‌‌得‌‌‍‍‍‌‍‍‍‍‌‍‍‍‌提‌‌‍‍‌‌‍‍‍‌‍‌‌‌‌高‌‍‍‌‍‌‌‌‍‌‍‌‍‍‌‍。' 
  2. char_1 = chr(8204) 
  3. char_0 = chr(8205) 
  4. hide_word_start = False 
  5. hide_word = '' 
  6. hide_word_list = [] 
  7. for char in sentence: 
  8.     if char not in [char_1, char_0]: 
  9.         if not hide_word_start: 
  10.             continue 
  11.         else
  12.             hide_word_list.append(hide_word) 
  13.             hide_word = '' 
  14.             hide_word_start = False 
  15.     else
  16.         hide_word += char 
  17.         if not hide_word_start: 
  18.             hide_word_start = True 
  19.  
  20. code_book = {} 
  21. for word in hide_word_list: 
  22.     if word in code_book: 
  23.         continue 
  24.     word_in_1_0 = word.replace(chr(8204), '1').replace(chr(8205), '0'
  25.     real_word = chr(int(word_in_1_0, 2)) 
  26.     code_book[word] = real_word 
  27.  
  28. for hide_word, real_word in code_book.items(): 
  29.     sentence = sentence.replace(hide_word, real_word) 
  30. print(sentence) 

运行效果如下图所示:

本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。

 

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2018-05-18 14:40:34

2021-01-27 21:53:50

版权保护隐写

2020-09-23 17:16:52

Python技术工具

2024-04-16 11:49:08

2019-07-01 13:06:45

隐写术网络安全威胁

2019-04-08 10:26:20

2018-04-09 03:43:41

零宽字符秘密字符数据泄露

2020-10-28 10:46:52

Purple Fox攻

2018-08-10 09:52:00

2024-04-25 14:52:34

2012-06-20 15:42:51

华硕一体机

2012-11-27 09:54:57

简历创业项目

2012-03-28 11:26:33

戴尔台式机

2016-12-20 08:40:00

印刷术信息安全

2021-05-25 11:40:27

网络安全隐写互联网

2013-12-04 09:31:10

2022-02-23 21:24:21

索引SQL字符

2018-11-16 16:35:19

Java源码编程语言

2010-05-07 10:28:51

CIO

2020-10-13 10:05:04

信息安全数据技术
点赞
收藏

51CTO技术栈公众号