• 请不要在回答技术问题时复制粘贴 AI 生成的内容
pysama
V2EX  ›  程序员

js 代码混淆的另一种思路

  •  
  •   pysama · Dec 15, 2016 · 5241 views
    This topic created in 3475 days ago, the information mentioned may be changed or developed.
    不想让自己的成果被人快速窃取,常规的代码保护方式就是代码压缩、混淆变量名和函数名。针对这种加密,格式化+变量名逐个还原,也能逐步的解密代码。

    我的思路是:通过自动化工具,在代码中故意加入各种干扰代码,即:一本正经的胡说八道。这样一来,即使格式化后,也会因为颇为庞大的代码量和莫名其妙的代码而极大降低了代码的可阅读和可维护性。

    当然也有局限性,真正对外的项目肯定不能这么干。只适用于公司内部的一些自研项目。通过这种方式,以避免拿来主意的同事拿着你的代码随便改改就去邀功。
    37 replies    2021-09-28 16:08:43 +08:00
    akira
        1
    akira  
       Dec 15, 2016
    干扰代码一样可以去掉的
    jarlyyn
        2
    jarlyyn  
       Dec 15, 2016   ❤️ 4
    哼哼,我写的 js 自带混淆,我自己都看不懂.
    anubiskong
        3
    anubiskong  
       Dec 15, 2016   ❤️ 1
    倒是一个思路
    用力过猛的话会增加性能损耗和网络压力
    说回来如果只是防同事的话, 既然是同事他应该能拿到和你同等的代码权限才对啊, 这么防也防不住啊
    pysama
        4
    pysama  
    OP
       Dec 15, 2016
    @jarlyyn 厉害了, word 哥
    pysama
        5
    pysama  
    OP
       Dec 15, 2016
    @akira 哇,这都可以。 我孤陋寡闻了。
    bumz
        6
    bumz  
       Dec 15, 2016
    其实,还不如学学 Google 的 No CAPTCHA ReCAPTCHA

    人家自己设计了一套语言和虚拟机,用来执行验证代码

    而验证代码是可以直接修改虚拟机当中的变量的

    等于说相当于,程序执行了一半,换了一套语言,接着解析执行。
    bumz
        7
    bumz  
       Dec 15, 2016
    *修改虚拟机本身的变量

    **换成什么语言取决于之前程序执行的结果
    binux
        8
    binux  
       Dec 15, 2016
    快速窃取的思路不是直接受控黑盒调用吗?为什么要解密代码?
    pysama
        9
    pysama  
    OP
       Dec 15, 2016
    @anubiskong 没关系,我放到服务器上的代码就是“加工过的”,他拿到,也没啥用。

    自己最近在给一些内部项目做优化的时候,突然想到:我 tmd 是不是吃饱了撑的,优化个毛。 代码能跑通就行了。
    我把代码理的这么顺,注释写这么清晰,又不给我加薪。 so ,我做他干什么呢?

    诚然,这么想,显得我非常狭隘和短见。然而,我还是控制不住自己的强迫症。
    pysama
        10
    pysama  
    OP
       Dec 15, 2016
    @bumz
    @binux
    大神们,你们说的太高深了,我不懂。
    我只略微懂点 js ,写点 node.js 项目。所以,我这个 topic 的思路也只是基于 js 代码哈。
    anubiskong
        11
    anubiskong  
       Dec 15, 2016
    @pysama 用 shi 做蛋糕口味的参照物, 何必自寻苦恼?
    shyling
        12
    shyling  
       Dec 15, 2016
    其实我觉得...那主要是为了压缩不是混淆
    zhuangzhuang1988
        13
    zhuangzhuang1988  
       Dec 15, 2016
    用 clojure, scalajs 写
    然后编译+压缩下,
    基本作者自己都看不懂
    SilentDepth
        14
    SilentDepth  
       Dec 15, 2016
    嗯,同意 @akira 的观点,干扰代码也能去掉,因为毕竟是「逻辑上没有意义的代码」,做语法分析很容易移除。如果真的要加大混淆力度的话,干脆不要写 JS ——用别的语言写,然后编译到 JS ,这样应该比手动设计干扰内容更高效。当然,理论上 JS 就没有所谓的源码加密……
    onceyoung
        15
    onceyoung  
       Dec 15, 2016
    很多程序员写出来的代码自带混淆的
    an168bang521
        16
    an168bang521  
       Dec 15, 2016
    你最终要让浏览器来执行的, 浏览器上能正常执行的代码,都防不住真正想拿你代码的人;
    你听说过有哪个前端框架或者类库是封闭的吗?
    只要东西好用,即使不想开源,也"被开源"了,
    我感觉是,没必要那么倒腾。
    chemzqm
        17
    chemzqm  
       Dec 15, 2016
    这技术已经有了,小程序开发工具源码后来的混淆就加了很多拉圾代码进去,只是比较初级,很容易识别。
    SlipStupig
        18
    SlipStupig  
       Dec 15, 2016
    估计 LZ 最近被同事给恶心了,你这种方法,跑一下 coverage 基本上就没用了.....
    nfroot
        19
    nfroot  
       Dec 15, 2016   ❤️ 1
    来来来,转换成风骚六进制。。。。。。。。。。

    [][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
    onlyhot
        20
    onlyhot  
       Dec 15, 2016 via iPhone
    不懂混淆的意义,每次解混淆就完了
    SourceMan
        21
    SourceMan  
       Dec 15, 2016 via iPhone
    压缩后基本就不可读了
    sagaxu
        22
    sagaxu  
       Dec 15, 2016 via Android
    你这种员工,直接开除就行了
    schezukNewTos
        23
    schezukNewTos  
       Dec 15, 2016
    FrankFang128
        24
    FrankFang128  
       Dec 15, 2016 via Android
    加一个反义词库就行了
    alqaz
        25
    alqaz  
       Dec 15, 2016
    大家那么忙,谁会在意的你 js 代码,当真的到达这个地步了,买一个专业工具吧。
    q397064399
        26
    q397064399  
       Dec 16, 2016
    全都是脱了裤子放屁,

    如果代码有被偷的价值>反混淆成本,无论你怎么搞 都是没有意义的
    techmoe
        27
    techmoe  
       Dec 16, 2016 via Android
    往里加东西的话体积不就大了么
    Kokororin
        28
    Kokororin  
       Dec 16, 2016
    haocity
        29
    haocity  
       Dec 16, 2016
    @jarlyyn +1 过两天...这是谁写的代码?
    misaka19000
        30
    misaka19000  
       Dec 16, 2016
    @nfroot 这个是怎么转化的?
    nfroot
        31
    nfroot  
       Dec 16, 2016
    @misaka19000 这个东西叫 jsfuck , jsfuck.com
    nfroot
        32
    nfroot  
       Dec 16, 2016
    @q397064399 一般来说反混淆成本太高,所以平常保护一下还是有意义的。(毕竟不是每个项目都那么有价值)
    yivanus
        33
    yivanus  
       Dec 16, 2016
    你有值得别人借鉴的代码证明实力比别人强啊。一直被模仿,从未被超越。。怕啥。你防着的这些时间可能已经比别人进步更多了。
    jyf007
        34
    jyf007  
       Dec 16, 2016 via Android
    虚拟机
    stormpeach
        35
    stormpeach  
       Dec 16, 2016
    一般的业务代码没有被偷的价值,有价值的一般是某些算法代码,这些代码可以用能编译成二进制的语言来写;但是如果对方能够反编译+看懂你的算法代码,那也只能说他厉害了。然而有这个实力的为什么还要偷你的代码呢。。。。
    Warder
        36
    Warder  
       Dec 16, 2016
    楼主的动机真是奇怪,居然是为了防同事。
    chiuan
        37
    chiuan  
       Sep 28, 2021
    为什么要防同事????
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3533 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 124ms · UTC 00:49 · PVG 08:49 · LAX 17:49 · JFK 20:49
    ♥ Do have faith in what you're doing.