繁体   English   中英

从 uglifyjs 源映射中恢复 javascript 源代码

[英]Recover javascript source code from uglifyjs source map

我正在逆向工程一个神奇的脚本。 我有一个由uglifyjs生成的 ug lified 源代码和源映射

有没有人知道如何从中获得至少部分可读的源代码的任何直接方法 我发现了一些晦涩的方法,包括通过多种语言进行转换,但我希望存在更好的方法。

谢谢!

有一个名为maximize的 npm 库旨在执行此操作,但我无法使其正常工作。 我将它重写为unsourcemap但我不是Node JS 开发人员,所以我确定它很糟糕。 无论如何,这是source-map npm 包的一个非常简单的应用程序。

一旦您完成了安装 node-js 和 nvm 等所有繁琐的工作,您就可以克隆该 repo 并说:

npm install . -g
unsourcemap path/to/packed.js path/to/packed.js.map path/to/output-dir/

我不想维护这个东西,所以如果有人想改进它,请把它分叉并指出它。 :-)

如果项目是使用 webpack/ browserify 打包的,可以使用Debundle 包做逆向工程。 恕我直言,根据某些项目,结果或好或坏。

而且因为它只对 JS 进行反编译(丑陋的 webpack 管道),所以如果您使用 Vue SFC,Debundle 无法生成您的原始 .vue 文件,而是 JS 文件。

Anw,在阅读源代码的情况下,如果您的网页没有隐藏源地图文件,您可以使用Chrome DevTool > Source面板轻松阅读精美的源代码:

Chrome DevTool - 源面板

检查这个简单的 NodeJS 实现:它获取带有嵌入源映射的编译文件并解析它。 仅修改和提供地图文件很容易。

const fs = require('fs');
const { SourceMapConsumer } = require("source-map");

fs.readFile('./example.js', 'utf8' , (err, data) => {
  if (err) return console.error(err);

  const sourceMapData = data.split('//# sourceMappingURL=data:application/json;base64,')[1];
  let buff = new Buffer.from(sourceMapData, 'base64');
  let rawSourceMap = buff.toString('ascii');

  const parsed = SourceMapConsumer(rawSourceMap);

  fs.writeFile('example.ts', parsed.sourcesContent, function (err) {
    if (err) return console.log(err);
  });
});

有一些工具可以帮助解决这个问题。 我之前使用过http://www.cleancss.com/javascript-beautify/http://jsbeautifier.org/并且取得了很好的效果。 如果您在 Google 中快速搜索 JavaScript Beautifier,您会发现很多类似的结果。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM