将 Js 代码编译成汇编形式的 Js 代码,能否起到加密作用?

29 天前
 heroisuseless

我先实现一个简单的虚拟机,例如叫 jsm ,有 ax ,bx ,cx ,dx 四个寄存器,外加一个 stack 执行栈。

现在加密一个 js 函数,例如一个简单的 add 函数:

function add(x, y) {
	return x + y;
}

经过编译后,变成了类汇编的 js 代码:

jsm.label('add');
jsm.pop(jsm.ax);
jsm.pop(jsm.bx);
jsm.add(jsm.ax, jsm.bx);
jsm.push(jsm.ax);
jsm.ret();

更近一步地,将 js 代码编译成二进制文件,然后再在网页上的虚拟机上运行,是否能起到加密作用?

1787 次点击
所在节点    奇思妙想
15 条回复
iikebug
29 天前
1 、前端网页的是否需要考虑性和网页大小
2 、首先你虚拟机的逻辑也会被反编译出来,意义不是很大
3 、加密优先考虑一下 wasm ?比自己写个虚拟机方便多了
nomagick
29 天前
不要敝帚自珍了。。。js 里面一个断点 console.log ,随你数据咋生成的
luckyrayyy
29 天前
你是说 WebAssembly?
MRG0
29 天前
纯前端的加密,似乎不怎么有人提到。重要内容都放后端呗
yichya
29 天前
您要找的是不是: https://blog.jsvmp.com/
tsem1n
29 天前
jsvmp 就是你说的这种, 国内已经有很多用了
nulIptr
29 天前
不是哥们你有这个水平还来提这个问题?搞出这个东西就为了加密?
lisongeee
29 天前
Blanke
29 天前
你是在说 js vmp?
rekulas
29 天前
是否能起到加密作用

当然可以,你都会写虚拟机了这个问题应该不用问别人才对,我之前玩过 php 语言的底层混淆也做过 js 逆向,js 安全性差的一个重要原因就是逆向直接调试明文就行了,相比二进制程序来说要容易许多,如果跑在虚拟机自然难度就提高了
lisxour
28 天前
可以大幅提高破解门槛
heroisuseless
28 天前
@Blanke 怎么感觉这条路已经没有人在做了
codehz
28 天前
js 的一个大问题是运行环境很容易被模拟,而你检测环境的代码本身就算混淆加密了也一样容易被糊弄过去,以至于像 YouTube 这样的头部公司,对抗下载器,用了各种黑科技(每次请求可能都返回不一样的代码),人家 youtube-dl 只需要简单的做了一个 js 解释器就可以直接绕过加密(去广告只能不停更新策略则是因为 uBlock 的限制,无法在规则里执行代码,否则也是一样可以一劳永逸的破解)
iqoo
28 天前
过时了,现在都用 wasm 了
Blanke
28 天前
@heroisuseless 国内外很成熟的,叫得出名字的大厂几乎都是

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

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

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

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

© 2021 V2EX