求推荐前端混淆算法/库/工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bronyakaka
V2EX    前端开发

求推荐前端混淆算法/库/工具

  •  
  •   bronyakaka 127 天前 1445 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要提高前端 js 代码的破解难度,进行混淆,目前用的是 star 很多的开源项目: https://github.com/Javascript-obfuscator/Javascript-obfuscator

    想问下目前是否有更全的混淆方式?或者别的前端防破解的方式,比如 wasm

    9 条回复    2025-08-26 14:15:12 +08:00
    MuscleOf2016
        1
    MuscleOf2016  
       127 天前
    再高级复杂的要付费了。专门做加固加密的公司,有产品
    Ketteiron
        2
    Ketteiron  
       127 天前
    wasm 最安全
    没事别玩 js 混淆了,人类很难阅读高度混淆的 js 代码,但是 AI 可以轻松还原语义,js 层面的混淆已经可以说毫无用处了,仅仅是让所有用户打开网站卡得半死而已。js 不会让全球变暖,但是 Javascript-obfuscator 会。
    bronyakaka
        3
    bronyakaka  
    OP
       126 天前
    @dssxzuxc 但是 wasm 二进制体积很大啊 像 go 打出来的起步就几 mb
    Ketteiron
        4
    Ketteiron  
       126 天前
    @bronyakaka #3
    https://go.dev/wiki/WebAssembly
    看了下 go 的 wiki ,起步确实是 2m ,应该是 go 运行时打进去了。
    下面有推荐一些减少体积的办法,手动优化几百 k ,TinyGo 可以优化到 10k 。
    或者看看 rust
    https://github.com/wasm-bindgen/wasm-bindgen
    bronyakaka
        5
    bronyakaka  
    OP
       125 天前
    @dssxzuxc #4 说到 wasm ,如果别人把 wasm 文件下载下来,本地用 node 调用,他是不是都不需要管 wasm 内部实现,只需要处理参数就行,也相当于破解吧,这个有办法吗
    Ketteiron
        6
    Ketteiron  
       125 天前
    是的,并不需要知道它实现了什么,只要找到调用入口就行了。这个逻辑在 js 也是一样。
    混淆其实分为两种,混淆调用实现,混淆调用入口。js 层面的混淆同时做了这两件事,破解者要还原逻辑只要耐心点是一定能成功的,本质上是增加了破解成本。但是目前可以通过反混淆工具+AI 轻易还原,至少对我个人来说是没有成本的。虽然混淆后代码是多样的,但是混淆的方案是已知的可预测可学习的,这点是 AI 的强项。
    wasm 在这里是增加了阅读调用实现的代价,从高度混淆的 js 转成更难处理的 wasm 文件,但是调用入口无法隐藏,有些时候并不需要知道里面实现了什么逻辑,只需要 hook 调用就行了。
    还可以从另一个方向入手,魔改 Javascript-obfuscator ,自己实现的 js 混淆 AI 不好还原,因为它的训练材料里没这玩意。这个可以跟 wasm 方案合起来,逆向成本足以让大多数人止步了。
    再进一步,实现一个虚拟机,应该是目前最安全的。想给逆向增加多少成本,自己就得投入更多成本,没有上限。
    bronyakaka
        7
    bronyakaka  
    OP
       125 天前
    @dssxzuxc #6 问了下 ai ,说

    1 、攻击者最容易入手的地方就是 JS 和 WASM 的“胶水代码”,目标是让这个接口变得难以理解和模拟。不要使用 wasm.do_something(param1, param2) 这种清晰的调用方式。取而代之,让 JS 将参数写入 WASM 的线性内存( WebAssembly.Memory )中的一个复杂数据结构里,然后只给 WASM 传递一个指向该结构的指针(一个整数)。WASM 函数执行完毕后,再将结果写入内存,JS 从内存中读取。
    2 、 让 WASM 感知并依赖于执行环境 (环境指纹)
    这是对抗模拟调用的核心思想。WASM 模块需要验证自己是否运行在预期的网页环境中。

    是不是指纹是一个关键
    bronyakaka
        8
    bronyakaka  
    OP
       125 天前
    @dssxzuxc #6 不过既然都用指纹了 那我直接不用 wasm ,而是在服务端做不就行了
    似乎 wasm 不能提高多少安全
    Ketteiron
        9
    Ketteiron  
       125 天前
    @bronyakaka #7 在实践中,一般会将加密方法放在 wasm 中,然后在 wasm 环境判断当前客户端是否可信,不可信就返回虚假的结果。当然这个理论无法实现,因为所有客户端必然不可信,而且 wasm 几乎获取不到什么关键信息能用来区分是否是恶意调用。这只能给逆向的玩家们增加一点难度,或者说时间成本。如果只能通过特定参数、算法、环境因素等等才能获取到正确结果,那逆向的思路就换成了模拟出这些前置要求,防是防不住的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     942 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:30 PVG 03:30 LAX 11:30 JFK 14:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86