到目前为止,有没有把 js 完全加密的方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kisshere
V2EX    问与答

到目前为止,有没有把 js 完全加密的方法?

  •  
  •   kisshere 201-12-05 16:46:36 +08:00 via Android 11822 次点击
    这是一个创建于 3965 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上查了查js加密,都能很轻易的解密,请教V友,有没有将js加密后不能被破解的方法或软件?
    29 条回复    2014-12-07 13:34:15 +08:00
    tabris17
        1
    tabris17  
       2014-12-05 16:47:25 +08:00
    除非不在客户端执行
    kiritoalex
        2
    kiritoalex  
       2014-12-05 17:04:33 +08:00
    楼上+1
    kisshere
        3
    kisshere  
    OP
       2014-12-05 17:08:36 +08:00 via Android
    @tabris17 是确确定定不能在浏览器加密么?
    easychen
        4
    easychen  
       2014-12-05 17:08:39 +08:00
    木有。不过现在已经可以把一部分代码用node在云端执行,这样就不会被人偷代码了。
    smblog
        5
    smblog  
       2014-12-05 17:08:56 +08:00
    make the code unreadable.
    kisshere
        6
    kisshere  
    OP
       2014-12-05 17:16:03 +08:00 via Android
    @smblog 能举个实际例子嘛,谢啦
    lincanbin
        7
    lincanbin  
       2014-12-05 17:18:46 +08:00   1
    浏览器能解析,就能解密。
    你能做的无非就是按照《如何写出无法维护的代码的教程去进行混淆罢了。
    例如随机更换变量名。
    txlty
        8
    txlty  
       2014-12-05 17:37:21 +08:00
    为楼上补充一个自动化工具。
    http://utf-8.jp/public/jjencode.html
    royzheng
        9
    royzheng  
       2014-12-05 17:39:32 +08:00
    混淆吧 混淆后那么恶心了 我想没人去搞这货吧 出了问题都没法改
    tabris17
        10
    tabris17  
       2014-12-05 17:41:25 +08:00
    问题是Javascript这种动态语言很难实现变量名替换的混淆方式
    Bluek404
        11
    Bluek404  
       2014-12-05 17:43:27 +08:00
    表示用dart自动生成的混淆后js,又长又难看
    RemRain
        12
    RemRain  
       2014-12-05 18:04:17 +08:00   1
    用 js 写一个操作系统(比如 http://jslinux.org/),在系统里面用 C 开发,编译后删除源文件,只留二进制文件,然后再给二进制文件加壳。

    要是你愿意的话,还可以用 C 实现 js, 再用 js 实现操作系统加 C,循环 N 次,然后所有人就都给你跪下了 @_@
    zythum
        13
    zythum  
       2014-12-05 18:33:31 +08:00
    理论上是可以的。看个例子吧。这个是letv的加密方法。从网站上拷贝下来的。

    https://gist.github.com/zythum/4982268b3bb21825847f
    http://gist.github.com/zythum/4982268b3bb21825847f

    但是问题是js的代码是明文的。可以被拷走的。这样只能做到看不懂。但是依然可以运行。开一个js虚拟机就可以了。
    zythum
        14
    zythum  
       2014-12-05 18:34:19 +08:00
    @livid 我错了。我把样式搞坏了。
    a2z
        15
    a2z  
       2014-12-05 18:35:54 +08:00
    @zythum
    这个把最后一个eval改成console.log就出来了……
    scusjs
        16
    scusjs  
       2014-12-05 18:38:57 +08:00
    @zythum 笑翻了,这是什么节奏
    zythum
        17
    zythum  
       2014-12-05 18:42:24 +08:00
    @a2z 这个做法就是,我中间的过程看不懂。解出来估计也是数学家了。但是我可以跑啊。
    zythum
        18
    zythum  
       2014-12-05 18:44:29 +08:00
    @scusjs 会不会有letv的同行来打我。 话说回家还要修 妈妈计划了。估计好久了。应该好多都不能用了,最近比较忙。
    cctvsmg
        19
    cctvsmg  
       2014-12-05 19:13:07 +08:00   1
    其实可以仿照vmprotect写一个js版本的,vmprotect思想来源于门电路
    原理是,把加减乘除都用nor指令实现,nor = not not and
    于是原来很容易看出逻辑的 and xor not or 都加密成了整齐划一的单一操作字符nor
    再从nor还原回去变的极为困难
    目前为止vmp虚拟机加密只能半自动甚至手工还原,还原vmp至今是仍然有很大难度(爆破是另一回事)

    Javascript也可以这么做,也就是在js虚拟机上再搞vmp虚拟机
    但是似乎js界和搞加密解密的交集太少,没有人去做这个事情
    也可能是js并没有那么高的价值值得如此保护
    a2z
        20
    a2z  
       2014-12-05 19:15:49 +08:00
    @cctvsmg
    机器码可以这么搞,js这么搞chrome什么的还行,ie直接卡出翔了
    icedx
        21
    icedx  
       2014-12-05 19:44:56 +08:00 via Android
    @zythum 借楼问下朱一大神 有木有微博图床上传过程的原理解析可以参考
    aaaa007cn
        22
    aaaa007cn  
       2014-12-05 21:47:03 +08:00   1
    http://nej.netease.com/
    未混淆前就是一堆下划线下划线$$$加上单字符变量(哦他们管这个叫“约定”)
    http://nej.netease.com/course/standard/index
    混淆后的效果可以参考 music.163.com
    虽然一样可以被逆推出来
    不过有多少人会去自找麻烦?
    scusjs
        23
    scusjs  
       2014-12-05 22:15:42 +08:00
    @zythum 嗯啊一年半了呢
    pysama
        24
    pysama  
       2014-12-05 23:48:52 +08:00
    @zythum
    @cctvsmg 为何你们都知道这么多,我能想到的就是变量混淆。降低可读性
    msg7086
        25
    msg7086  
       2014-12-06 12:17:44 +08:00 via iPhone
    建议参考IOCCC
    hester
        26
    hester  
       2014-12-06 16:24:50 +08:00
    混淆后的代码可读性几乎 = 0,如果再加上一些MVC结构的话,基本上想读懂不太可能...
    如果只是想寻求这个问题的答案到还好,如果你就想实现你说的方式的话,似乎有些没必要...
    zythum
        27
    zythum  
       2014-12-07 12:52:20 +08:00   1
    @pysama 知道多有毛用。又不涨工资...

    @icedx 很简单。自己动手,去截获下weibo的上传图片的接口。自己伪造一个就可以了。

    @hester 其实只是混淆了的话,没有在写代码的时候就考虑的话,还是挺好看的。现在safari的内置开发者工具就自动beautify,看起来很容易的。做妈妈计划的时候,里面的逻辑都是这么抓的。facebook,twitter 的js源码也基本能看懂怎么实现的。就是费点眼神罢了。 话说朱一是不是这样算闲着蛋疼。
    zythum
        28
    zythum  
       2014-12-07 12:52:59 +08:00
    @scusjs 我错了,只是业余项目。所以最近我自己不怎么用了。没空看视频了。也就搁置了。
    icedx
        29
    icedx  
       2014-12-07 13:34:15 +08:00 via Android
    @zythum QAO
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3061 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:45 PVG 20:45 LAX 05:45 JFK 08:45
    Do have faith in what you're doing.
    ubao 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