【技术分享】王者荣耀重复名原理
2022-02-11 / 0 评论 / 127 阅读 / 13 点赞

【技术分享】王者荣耀重复名原理

发光的神
2022-02-11 / 0 评论 / 127 阅读 / 正在检测是否收录...

简介

最近在玩CTF中,发现有一种叫零宽度字符的东西,"它是隐藏不显示的,也是不可打印的,也就是说这种字符用大多数程序或编辑器是看不到的",要是往里插入零宽度字符,我们肉眼是看不出来区别的。
最常见的是零宽度空格,它是Unicode字符空格,就像如果在两个字母间加一个零宽度空格,该空格是不可见的,表面上两个字母还是挨在一起的。

zero-width-lib

lcbk783l.png
lcbizgeh.png

在线加密 | Github网址

1.这个项目是用JavaScript写的,这种是带文字的隐写加密,可以用来发一些加密的通话别人也看不到异常。

lcbjwqpf.png

var text = "我‏‍‎‏‏‍‎​‏‌‏‍‍​‏‌‎‏‏‏喜欢你"
text.length
// 输出结果 27
var text1 = "我喜欢你"
text1.length
// 输出结果 4
text === text1
// 输出结果 false

2.虽然看不到,但是字符长度是不一样text与text1也不是同一个字符串,只要把字替换成空格的零字符,随便加入或插入一个位置,就又是一个新的字符了,这样就实现了重名的效果。

源码使用

lcbklxfn.png

npm install zero-width-lib

lcbl38u2.png

"type":"module"

1.要有node环境这里我就不多说了,首先新建一个文件夹在里面创建 index.js 文件,然后在这里启动cmd下载第三方库,下载完然后记在 package.json 加入 "type":"module" 不然运行会报错的,然后把以下代码写到 index.js 文件里。

import * as z from 'zero-width-lib';

const visble = 'hello world';
const hidden = 'I like you, but just like you';
const encoded = z.encode(visble, hidden); // 'h*********ello world'
console.log(encoded)
const decoded = z.decode(encoded); // 'inpired by @umpox'
// console.log(decoded)

// 3. extract ZWC from text
const extracted = z.extract(encoded);
const vis = extracted.vis; // 'hello world'
const hid = extracted.hid; // '*********'
console.log(vis,hid)

// 4. escape from string matching
const forbidden = 'forbidden';
const escaped = z.split(forbidden); // 'f*o*r*b*i*d*d*e*n*' 
console.log(escaped)

lcbl6uxa.png

2.然后运行一下 index.js 就可以生成结果,可以看到有一些空格不用管,直接全复制 粘贴下就可以看到效果了。

13

评论 (0)

取消
0:00