V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Zach369
V2EX  ›  程序员

如何反编译写好的前端代码?

  •  1
     
  •   Zach369 · 2020-06-09 17:51:28 +08:00 · 6342 次点击
    这是一个创建于 1409 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天同事问了一个比较好的问题.

    web 前端的代码 经过编译混淆,能不能反编译出源代码? 这个源代码是 有目录结构的.

    有知道的大佬,说说你的技巧.

    第 1 条附言  ·  2020-06-10 15:21:24 +08:00
    多谢大家的意见.... 昨天研究了下.终于懂了....
    21 条回复    2020-06-10 18:47:22 +08:00
    noe132
        1
    noe132  
       2020-06-09 17:55:42 +08:00
    最简单的
    // a.js
    console.log(1)

    // b.js
    import './a.js'
    console.log(2)

    经过 webpack concatenate 或者 rollup 打包后
    生成的 chunk 文件内容是
    console.log(1)
    console.log(2)

    如果没有 sourcemap,你是绝对不可能还原出目录结构的。
    pinkSlime
        2
    pinkSlime  
       2020-06-09 18:21:49 +08:00
    想啥呢 还比较好的问题, 这是个根本没有意义的问题好么
    打包过程是不可逆的,这中间有些信息丢掉了 找不回来了 不然要 sourcemap 干嘛呢
    你能把 jpg 还原成 raw 吗
    superrichman
        3
    superrichman  
       2020-06-09 18:35:31 +08:00 via iPhone
    给你一杯橘子汁,那你能帮帮我还原一个橘子吗?
    这种不可逆的压缩+混淆已经丢失了一些原始的信息。
    youla
        4
    youla  
       2020-06-09 18:40:47 +08:00
    审查元素不是看得到吗?
    youla
        5
    youla  
       2020-06-09 18:41:34 +08:00
    没注意看题,我以为你要借鉴别人前端的某些地方
    Vegetable
        6
    Vegetable  
       2020-06-09 18:45:44 +08:00
    不行
    压缩的本身是丢弃尽可能多的,对于机器无用的信息,目录信息恰恰如此。往往还会往里边添加点垃圾增加安全性。
    如果你足够的耐心,并且有足够的经验,可以将前端代码人工还原一遍,也可能还原的非常 nice,但是不可能和原始目录一样。
    kop1989
        7
    kop1989  
       2020-06-09 18:47:28 +08:00 via iPhone
    如果要逆混淆,可以,但是还需要和原项目目录结构一致?这是想达成什么目的?
    DOLLOR
        8
    DOLLOR  
       2020-06-09 21:00:03 +08:00
    最多只能通过 js beautify 把代码格式化好。
    想得到“有目录结构的”代码,你只能期待站长犯傻不小心把 source map 发布上线,不然就是做梦。
    black11black
        9
    black11black  
       2020-06-09 23:16:04 +08:00
    @pinkSlime 杠一下,jpg 还原成 raw 现在技术条件下没准还真能做到(满足 raw 功能性的“raw”)
    no1xsyzy
        10
    no1xsyzy  
       2020-06-10 01:53:12 +08:00
    @black11black #9 我也杠一下,那直接用 js2js 反编译一下也行,已经确定能做到了
    js2js 比较复杂,类 unix 下也可以用 cat 取代。
    XanderChen
        11
    XanderChen  
       2020-06-10 03:52:23 +08:00 via Android
    有你研究怎么反编译的功夫,都不如直接仿造一个…
    zk8802
        12
    zk8802  
       2020-06-10 05:33:00 +08:00 via iPhone
    可以试试 jsnice
    ibegyourpardon
        13
    ibegyourpardon  
       2020-06-10 08:29:51 +08:00
    @black11black 路人插入回杠。

    应该不行。

    raw → jpg 就是个丢弃信息( even the information is useful )的过程。

    从这个角度来说,基本不可能回溯成 『满足 raw 功能性的 raw 』。最多是满足我当前需要的 jpg 本质的 raw 后缀名文件。
    Mutoo
        14
    Mutoo  
       2020-06-10 08:33:27 +08:00
    尝试一下 .map 文件,如果存在的话,下载下来后,可以用这个工具还原出带目录结构的源码
    https://github.com/mutoo/webpack-sourcemap-unpacker#
    zqguo
        15
    zqguo  
       2020-06-10 08:35:20 +08:00
    你在想啥呢,大兄弟 ?
    gimp
        16
    gimp  
       2020-06-10 08:40:16 +08:00   ❤️ 1
    视频打了马赛克能还原吗?
    GzhiYi
        17
    GzhiYi  
       2020-06-10 08:46:52 +08:00 via iPhone
    怎么可能??这本身就是不可逆的。
    takemeaway
        18
    takemeaway  
       2020-06-10 09:20:43 +08:00
    前端还需要反编译?那叫做混淆还原吧?
    没见过前端有多难仿制的东西。
    再说了,打包后的也是直接复制能用的。
    cweijan
        19
    cweijan  
       2020-06-10 10:50:25 +08:00
    就像 MD5 一样, 编译后已经丢失了原来的信息, 所以是不可能的, 如果是加密, 解析后看到的代码也是压缩的
    BreezeInWind
        20
    BreezeInWind  
       2020-06-10 11:02:26 +08:00
    var nameIsOne = 1,nameIsTwo = 2 ;
    打包混淆后
    var a = 1, b = 2
    你怎么去还原回来 nameIsOne 跟 nameIsTwo
    black11black
        21
    black11black  
       2020-06-10 18:47:22 +08:00
    @ibegyourpardon 所谓丢信息主要是 dct 变换精度,以及 quantization 的问题。已知原图片信息,量化表是可猜的,也许可以用某种神奇的方式脑补出丢失的高频信息,我觉得没啥问题。另外就是 cbcr 平面的分辨率问题,这个更好解决,现在超分这么多,还有 luma 辅助判断
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   988 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:50 · PVG 03:50 · LAX 12:50 · JFK 15:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.