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

2020-06-09 17:51:28 +08:00
 Zach369

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

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

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

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

应该不行。

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

从这个角度来说,基本不可能回溯成 『满足 raw 功能性的 raw 』。最多是满足我当前需要的 jpg 本质的 raw 后缀名文件。
Mutoo
2020-06-10 08:33:27 +08:00
尝试一下 .map 文件,如果存在的话,下载下来后,可以用这个工具还原出带目录结构的源码
https://github.com/mutoo/webpack-sourcemap-unpacker#
zqguo
2020-06-10 08:35:20 +08:00
你在想啥呢,大兄弟 ?
gimp
2020-06-10 08:40:16 +08:00
视频打了马赛克能还原吗?
GzhiYi
2020-06-10 08:46:52 +08:00
怎么可能??这本身就是不可逆的。
takemeaway
2020-06-10 09:20:43 +08:00
前端还需要反编译?那叫做混淆还原吧?
没见过前端有多难仿制的东西。
再说了,打包后的也是直接复制能用的。
cweijan
2020-06-10 10:50:25 +08:00
就像 MD5 一样, 编译后已经丢失了原来的信息, 所以是不可能的, 如果是加密, 解析后看到的代码也是压缩的
BreezeInWind
2020-06-10 11:02:26 +08:00
var nameIsOne = 1,nameIsTwo = 2 ;
打包混淆后
var a = 1, b = 2
你怎么去还原回来 nameIsOne 跟 nameIsTwo

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680092

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX