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

js 代码混淆的另一种思路

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

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

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

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

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

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

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

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

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

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

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