1
关于 js 的自身加密混淆,还有这骚操作?
source link: https://www.v2ex.com/t/789341
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
我发现知乎看到了这个 https://www.zhihu.com/question/454938362第一次见到这种所谓自身加密,看这加密疑似 base64,但不管是编码还是加密混淆,最终是下载到客户端打开的,所以这个加密方式是否能运行?望大佬们解惑
18 条回复 • 2021-07-14 22:11:04 +08:00
ysc3839 1 天前 2
简单分析了一下,原数据不是 js 代码,是 JSON 数据。
那个变量名第一个字符是随机的,第二个字符固定是 i,后面跟着的是域名倒序的 MD5 值,变量名这么处理猜测是为了反爬虫。
后面的字符串中 '.' 会先被替换为 't',然后去掉开头 16 个字符,再用非标准的 Base64 解码。
这就只是一个非常简单的编码,依靠算法保密来“保密”,大概只是为了防一些自动化的爬虫,人工分析一下全都出来了。
那个变量名第一个字符是随机的,第二个字符固定是 i,后面跟着的是域名倒序的 MD5 值,变量名这么处理猜测是为了反爬虫。
后面的字符串中 '.' 会先被替换为 't',然后去掉开头 16 个字符,再用非标准的 Base64 解码。
这就只是一个非常简单的编码,依靠算法保密来“保密”,大概只是为了防一些自动化的爬虫,人工分析一下全都出来了。
FaiChou 16 小时 36 分钟前
我见过这种的劫持代码:
```
['son']["\x66\x69\x6c\x74\x65\x72"]["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"](((['son']+[])["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"]['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']['\x61\x70\x70\x6c\x79'](null,"xxxxxxxx...xxx"['\x73\x70\x6c\x69\x74'](/[a-zA-Z]{1,}/))))('son');
```
16 进制转成 string 是以下代码, 依然非常模糊
```
['son']["filter"]["constructor"](((['son'] + [])["constructor"]['fromCharCode']['apply'](null, "xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/))))('son');
```
拆解下:
```
(['son'] + [])["constructor"]
```
上面👆这个其实是个构造器 `f String() {}`
```
"xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/)
```
上面👆执行的是 str.split(/[a-zA-Z]{1,}/) 将 str 的字母部分拿掉, 剩下的用数组形式代表, 以字母切割的数组 `String.fromCharCode([88, 111, 222....])`
最终翻译成就是普通的 js 代码了.
```
['son']["\x66\x69\x6c\x74\x65\x72"]["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"](((['son']+[])["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"]['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']['\x61\x70\x70\x6c\x79'](null,"xxxxxxxx...xxx"['\x73\x70\x6c\x69\x74'](/[a-zA-Z]{1,}/))))('son');
```
16 进制转成 string 是以下代码, 依然非常模糊
```
['son']["filter"]["constructor"](((['son'] + [])["constructor"]['fromCharCode']['apply'](null, "xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/))))('son');
```
拆解下:
```
(['son'] + [])["constructor"]
```
上面👆这个其实是个构造器 `f String() {}`
```
"xxxxxxxx...xxx"['split'](/[a-zA-Z]{1,}/)
```
上面👆执行的是 str.split(/[a-zA-Z]{1,}/) 将 str 的字母部分拿掉, 剩下的用数组形式代表, 以字母切割的数组 `String.fromCharCode([88, 111, 222....])`
最终翻译成就是普通的 js 代码了.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK