1

关于 js 的自身加密混淆,还有这骚操作?

 3 years ago
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.
neoserver,ios ssh client

V2EX  ›  JavaScript

关于 js 的自身加密混淆,还有这骚操作?

  qinghuida1997 · 1 天前 · 1890 次点击
我发现知乎看到了这个 https://www.zhihu.com/question/454938362第一次见到这种所谓自身加密,看这加密疑似 base64,但不管是编码还是加密混淆,最终是下载到客户端打开的,所以这个加密方式是否能运行?望大佬们解惑
18 条回复    2021-07-14 22:11:04 +08:00

muzuiget

muzuiget   1 天前   ❤️ 1

无非就是定义一个变量而已,后面的代码肯定拿来解析,你当它下载一个 zip 文件就是,里面可以是任何数据,图片、样式、脚本都可以。

zhaiblog

zhaiblog   1 天前 via iPhone

chromw 打个断点就知道了

zhaiblog

zhaiblog   1 天前 via iPhone

@zhaiblog chrome

wyx119911

wyx119911   1 天前

都是提高门槛的操作,可以把代码的抽象语法数进行变换加密

ysc3839

ysc3839   1 天前   ❤️ 2

简单分析了一下,原数据不是 js 代码,是 JSON 数据。
那个变量名第一个字符是随机的,第二个字符固定是 i,后面跟着的是域名倒序的 MD5 值,变量名这么处理猜测是为了反爬虫。
后面的字符串中 '.' 会先被替换为 't',然后去掉开头 16 个字符,再用非标准的 Base64 解码。

这就只是一个非常简单的编码,依靠算法保密来“保密”,大概只是为了防一些自动化的爬虫,人工分析一下全都出来了。

stkstkss

stkstkss   22 小时 43 分钟前

B 站昨晚崩了 打脸吗

cheng6563

cheng6563   21 小时 49 分钟前

这不就是加壳

lizhenda

lizhenda   21 小时 41 分钟前

蛮有意思的,这个加密是为了加密啥,资源吗?看起来不像加密代码

libook

libook   21 小时 16 分钟前

防机器人不防小人,对付机器人足够了。

如果对前端闭源感兴趣可以了解一下 WebAssembly 。

FaiChou

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 代码了.

qinghuida1997

qinghuida1997   9 小时 42 分钟前

@wyx119911 提高门槛的操作...在下格局小了,惭愧惭愧

qinghuida1997

qinghuida1997   9 小时 39 分钟前

@x4storm 不错,开头 eval 就暴露了,一目了然过于简单(* ̄ 0  ̄)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK