WeChat昵称bug


前言

这次要说的,是前几天出现的微信小bug,就是昵称里对Unicode字符的过滤不到位。

利用这个bug能做到什么呢?我先上张图大家感受一下:

其实这个bug在挺早的时候就有人发现过了,当时微信并没有修改,但这次可能使用的人太多,对微信的使用造成了一定的影响,所以微信很快就把这个bug封了。

接下来,我们就来看看这个bug到底是怎么实现的

预备知识

当然首先要了解一点基本知识:

Unicode控制字符就是特殊的Unicode字符:

  • 启动从左到右的优先(LRO):当需要用于特殊情况(例如,用于部件编号)时,优先于双向字符类型。LRO强制字符成为从左到右的字符。
  • 启动从右到左的优先(RLO):当需要用于特殊情况(例如,用于部件编号)时,优先于双向字符类型。RLO强制字符成为从右到左的字符。
  • ……

看到了吗?就是上面那个RLO字符,当你在微信昵称后面插入一个RLO字符,然后再倒序输出你想要的文字效果,例如:

YTJ(RLO字符)脸小的你下一了亲并

撤回时就会变成

YTJ (撤回了一条消息)并亲了一下你的小脸

括号里面是微信自己的文字,呐原理是不是很简单?

实现方法

现在弄懂了这个原理,是不是好奇那个字符怎么打出来呢?

1.复制别人发给你的字符
2.如果手机有Unicode之类的软件,可以直接搜索这个字符,u+202e是他的代码,复制然后按照上面的方法就可做到了

当然了,由于这个消息欺骗性高,误导性强,所以微信已经修复了这个bug,现在已经无法使用了,但是你们可以试试其他的软件,说不定也能有奇效哦

最后,不得不说一句,WeChat团队程序猿简直注孤生啊,这么好的撩妹工具就这么没了(手动再见)

Update

看到网上网友讨论,可能名称最后还要加一个LRO字符修正,代码是U+202d(0x202d),可惜微信已经修复了,不然就能实践一下看看是不是真的要了

Update 2016-05-19

今天在看到微信那个bug又能用了,别人用的是JS自动生成,于是看了网站源代码

String.fromCharCode(65197)+suffix +String.fromCharCode(65197) + name;

查询了Unicode字符库,官方说是Arabic Letter Reh Isolated Form,代码中将后缀隔在Unicode字符中,但这两个字符貌似并不是控制字符,对原理表示疑惑,但是这方法在微信中可以使用,先Mark.

Update 2017-10-01

最新的字符 \ufee9
传送门

String.fromCharCode(65257)+suffix +String.fromCharCode(65257) + name;