V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kisshere
V2EX  ›  问与答

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

  •  
  •   kisshere · 2014-12-05 16:46:36 +08:00 via Android · 11416 次点击
    这是一个创建于 3624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    网上查了查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   ·   实用小工具   ·   5715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 06:31 · PVG 14:31 · LAX 22:31 · JFK 01:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.