V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
289396212
V2EX  ›  Node.js

怎么能不完全把一个 node 项目给别人,比如代码混淆一部分,或者用自己的 npm 源做插件

  •  
  •   289396212 · 2024-07-28 10:53:09 +08:00 · 4360 次点击
    这是一个创建于 404 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2024-07-30 10:16:52 +08:00
    alanhe421
        1
    alanhe421  
       2024-07-28 10:57:02 +08:00
    牵扯到编译打包不就好了吗,平时访问的网站说白了代码也是给了客户端即用户。
    rabbbit
        2
    rabbbit  
       2024-07-28 10:59:58 +08:00
    emscripten
    EndlessMemory
        4
    EndlessMemory  
       2024-07-28 12:27:05 +08:00
    看你想法,如果只是不想别人轻易弄懂你的代码,那就上 ob 混淆+反调试
    taotaodaddy
        5
    taotaodaddy  
       2024-07-28 12:30:49 +08:00
    v8 jsc,我在 electron 项目中已经使用了
    tcper
        6
    tcper  
       2024-07-28 12:38:40 +08:00
    虽然 wasm 不是为了代码混淆的,但是你用别的语言搞一个 wasm 包,解密确实费劲不少
    BaiLinfeng
        7
    BaiLinfeng  
       2024-07-28 14:58:35 +08:00
    所以这是啥保密的项目尼?这样的做法市面上多不多
    wjx0912
        8
    wjx0912  
       2024-07-28 15:00:48 +08:00
    vx7298
        9
    vx7298  
       2024-07-28 15:04:39 +08:00
    用 golang 吧,哈哈,
    humbass
        10
    humbass  
       2024-07-28 21:03:43 +08:00
    同 5#,nodejs 也可以直接使用 jsc.
    zsj1029334
        11
    zsj1029334  
       2024-07-29 00:51:52 +08:00 via iPhone
    Bun 包子,新 js 运行时,后端的话可以直接编译单个可执行文件,比如 express 单文件运行,打包大小 90mb ,还有 nodejs22 以后版本也在往这个方向发展
    visper
        12
    visper  
       2024-07-29 09:02:05 +08:00
    v8 编译 js 成字节码。
    lee88688
        13
    lee88688  
       2024-07-29 10:17:15 +08:00
    @taotaodaddy 请问一下有没有相关的教程或者文档?我去官方没搜到相关的文档和教程😂。
    taotaodaddy
        14
    taotaodaddy  
       2024-07-29 10:42:25 +08:00
    @lee88688

    用的是这个 https://github.com/bytenode/bytenode

    支持把一段代码编译

    也支持整个文件编译:
    npx bytenode -c ./public/a.js
    然后
    require('./a.jsc');
    taotaodaddy
        15
    taotaodaddy  
       2024-07-29 10:50:32 +08:00
    @lee88688
    忘记说了,还有一部分代码用 dll 实现了
    总体来说,dll 的安全性最佳
    其次是 v8 字节码 (jsc)
    混淆更低

    另外 node 支持 C++ addons ,可以作为 dll 的替代方案
    lisxour
        16
    lisxour  
       2024-07-29 11:08:16 +08:00
    目前纯代码混淆是比较稳当且成本廉价的方案,上面提到的各种编译打包的方案(我指的是所有,包括 wasm )都存在两个大问题,上面没有一个人提到:
    1. 有的打包只是纯将 node 和代码打包在一起,并没有任何编译,很容易解包出来
    2. 打包编译对项目要求贼高,项目是 cjs 还是 esm 都有影响,有些库打包不进去报错(包括很多常用库),跨平台兼容问题
    lisxour
        17
    lisxour  
       2024-07-29 11:10:11 +08:00
    @lisxour 特别是第二条,在现实项目面前,这起码扼杀了 60%-70%的 node 项目,除非你为了兼容打包,对项目结构做大改。
    SchwarzeR
        18
    SchwarzeR  
       2024-07-29 13:27:39 +08:00
    核心逻辑写成 wasm ?就是有点折腾还会牵扯到别的语言[比如 rust
    lee88688
        19
    lee88688  
       2024-07-30 08:03:49 +08:00
    @taotaodaddy 官方文档上二进制扩展基本都是推荐 addon ,dll 这种动态链接库目前有比较好的包来加载吗?例如 Python 官方就给了一个很方便的加载和使用动态链接库的方案。
    lee88688
        20
    lee88688  
       2024-07-30 08:05:17 +08:00
    写成 wasm 加载肯定很方便,但是毕竟要使用其他语言编写,开发成本会增加很多。
    taotaodaddy
        21
    taotaodaddy  
       2024-07-30 10:16:52 +08:00
    @lee88688 dll 的包官方的是 ffi-napi,我开始用的是这个包,后来换掉了,因为中间发现一些问题(问题和 electron 的版本有关系)
    最终用的是 koffi
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2844 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:09 · PVG 19:09 · LAX 04:09 · JFK 07:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.