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

2021-07-13 20:59:36 +08:00
 qinghuida1997
我发现知乎看到了这个 https://www.zhihu.com/question/454938362

第一次见到这种所谓自身加密,看这加密疑似 base64,但不管是编码还是加密混淆,最终是下载到客户端打开的,所以这个加密方式是否能运行?望大佬们解惑
3466 次点击
所在节点    JavaScript
20 条回复
muzuiget
2021-07-13 21:56:11 +08:00
无非就是定义一个变量而已,后面的代码肯定拿来解析,你当它下载一个 zip 文件就是,里面可以是任何数据,图片、样式、脚本都可以。
zhaiblog
2021-07-14 00:43:01 +08:00
chromw 打个断点就知道了
zhaiblog
2021-07-14 00:43:16 +08:00
@zhaiblog chrome
wyx119911
2021-07-14 01:07:25 +08:00
都是提高门槛的操作,可以把代码的抽象语法数进行变换加密
x4storm
2021-07-14 01:42:51 +08:00
像这种么 aem1k.com/world
ysc3839
2021-07-14 03:40:37 +08:00
简单分析了一下,原数据不是 js 代码,是 JSON 数据。
那个变量名第一个字符是随机的,第二个字符固定是 i,后面跟着的是域名倒序的 MD5 值,变量名这么处理猜测是为了反爬虫。
后面的字符串中 '.' 会先被替换为 't',然后去掉开头 16 个字符,再用非标准的 Base64 解码。

这就只是一个非常简单的编码,依靠算法保密来“保密”,大概只是为了防一些自动化的爬虫,人工分析一下全都出来了。
stkstkss
2021-07-14 09:04:37 +08:00
B 站昨晚崩了 打脸吗
Dididadada
2021-07-14 09:40:50 +08:00
https://www.obfuscator.io/
是这个东西吧,之前用过一两次,能跑,但性能差很多
cheng6563
2021-07-14 09:59:11 +08:00
这不就是加壳
lizhenda
2021-07-14 10:06:35 +08:00
蛮有意思的,这个加密是为了加密啥,资源吗?看起来不像加密代码
libook
2021-07-14 10:32:03 +08:00
防机器人不防小人,对付机器人足够了。

如果对前端闭源感兴趣可以了解一下 WebAssembly 。
FaiChou
2021-07-14 15:11:25 +08:00
我见过这种的劫持代码:

```
['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
2021-07-14 22:01:06 +08:00
@muzuiget 受教了,谢谢讲解
qinghuida1997
2021-07-14 22:02:07 +08:00
@muzuiget 受教了,谢谢讲解
@zhaiblog 断点 yyds
qinghuida1997
2021-07-14 22:06:13 +08:00
@wyx119911 提高门槛的操作...在下格局小了,惭愧惭愧
qinghuida1997
2021-07-14 22:08:52 +08:00
@x4storm 不错,开头 eval 就暴露了,一目了然过于简单(* ̄ 0  ̄)
qinghuida1997
2021-07-14 22:09:53 +08:00
@ysc3839 非常大佬的详细讲解
qinghuida1997
2021-07-14 22:11:04 +08:00
@stkstkss 不明所以...
qinghuida1997
2021-07-15 12:19:59 +08:00
@Dididadada 用过一次,不在乎性能其他的用这个加密还是可以的
@lizhenda 这就是问题的关键了...
@libook 听说过 WebAssembly,但没有深入研究了解
@FaiChou 劫持加密?感谢提供详解...
qinghuida1997
2021-07-15 12:22:33 +08:00
@ysc3839 非常感谢大佬的详细讲解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/789341

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX