gamexg
V2EX  ›  问与答

有靠谱的 js 加密方式吗?

  •  
  •   gamexg · Sep 5, 2017 · 2973 views
    This topic created in 3202 days ago, the information mentioned may be changed or developed.

    从网上找了几个,试了下去掉最后的括号后直接秒解... 即使这么搞不定,直接把 eval 改成打印也就 ok 了。

    google 家的混淆方案倒是挺牛,可惜目的是压缩代码及提升性能,没往加密上面考虑。

    目前有实现到语义级别的加密吗?

    比如将单个函数内容拆分到多个函数。 然后将函数内容互相交叉,互相调用的方式来使用。

    对变量名、函数名等能混淆就混淆,库名等不能混淆的就加密。 变量能复用就复用,前一段代码表示是用户名,用完下一句就改成存放用户年龄。

    不直接使用标准库,改成动态映射,和变量名一样复用着玩。

    实在想坑人还可以改成动态加密,加密时随机数参与进去,每次加密结果都变化,刚刚解密完一部分下次又需要从头再来...

    这么搞应该没人愿意解密了,但是对性能应该很大。

    7 replies    2017-09-06 00:03:28 +08:00
    f2f2f
        1
    f2f2f  
       Sep 5, 2017
    不是说 js 再怎么加密,执行一下不都全出来了。
    gamexg
        2
    gamexg  
    OP
       Sep 5, 2017
    @f2f2f #1 是的,我试的几个都是执行下就出来了。那几种公开的只是将代码整体加密,运行时解密传递给 eval 执行,只要拦截到 eval 内容就出来了。

    但是如果做到上面那几条,机器解密很麻烦,人肉识别也会很头疼。
    rogwan
        3
    rogwan  
       Sep 5, 2017 via Android   ❤️ 1
    最终你还是要考虑浏览器看的懂哇😭 所以是无解的。
    icedx
        4
    icedx  
       Sep 5, 2017   ❤️ 1
    没有
    去年自己写了个把 JS 脚本转成字节码的小玩意
    基本上吊锤那些加密混淆过的 JS
    KeepPro
        5
    KeepPro  
       Sep 5, 2017 via Android
    你说的方案只能是混淆,不能叫加密吧
    shiji
        6
    shiji  
       Sep 5, 2017 via Android   ❤️ 1
    参考 datatables editor, 试用 30 天,js 文件上来就是 var remaining = ......
    小白一想,啊哈,这个真弱智,直接乘以一万。。。顺手写个博客得瑟一下。。。
    结果 30 天后所有功能都依旧被锁死。。。
    wdlth
        7
    wdlth  
       Sep 6, 2017   ❤️ 1
    试试把一些算法用 asm.js 处理,至少看上去不是 JS 的样子。
    完全加密是不好做的,毕竟最终使用者还是浏览器的 JS 引擎,如果有心人在引擎上做手脚,把 opcode 弄到,也可以知道程序在干什么。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1693 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 16:21 · PVG 00:21 · LAX 09:21 · JFK 12:21
    ♥ Do have faith in what you're doing.