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

8
我正在逆向分析一个神奇的脚本。我有一个由uglifyjs生成的丑化源代码和源映射。
有没有人知道任何简单明了的方法来从中实现至少部分可读的源代码?我发现了一些晦涩的方法,包括通过多种语言进行转换,但我希望存在更好的方法。
谢谢!

我目前不知道有什么工具可以反转这个。但是,如果您在Chrome中加载HTML页面并打开开发工具,它应该能够显示源代码。如果混淆的代码没有引用源映射,则可能需要自己添加。 - Boushley
如果你有一种“奇怪的方法”,而且你只需要做一次,为什么不直接这样做呢? - Ira Baxter
你是如何获取源代码映射的,而不必在原始源代码上自己运行uglify呢?毫无疑问,原始作者不会提供它,因为他们通过混淆已经表明了自己的意图。 - Ira Baxter
4个回答

8
有一个名为maximize的npm库声称可以做到这一点,但我无法使其工作。我将其改写为unsourcemap,但我不是Node JS开发人员,所以我确定它很糟糕。无论如何,这是source-map npm包的一个相当琐碎的应用。

一旦您经历了安装node-js和nvm等所有麻烦事,您就可以克隆该存储库并说:

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

我不想维护这个东西,所以如果有人想要改进它,请直接fork它并指向那个版本。:-)


语法错误:意外的标记'(',"(()=>{var ..."不是有效的JSON。 - Got To Figure

5
如果使用webpack / browserify捆绑项目,您可以使用Debundle package进行反向工程。我的看法是,结果将取决于某些项目的好坏。
由于它仅对JS进行反编译(即丑化的webpack管道),因此如果您使用Vue SFC,则Debundle无法生成原始的.vue文件,而是生成JS文件。
无论如何,在阅读源代码时,如果您的网页没有隐藏源映射文件,则可以使用Chrome DevTool > Source面板轻松地阅读美丽的源代码。

Chrome DevTool - Source pannel


0

请查看这个简单的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);
  });
});

只是想提醒一下,这是一个npm包:https://www.npmjs.com/package/source-map - undefined

-2

谢谢!但是我对这些工具非常熟悉。我需要获取原始变量名称以使代码可读。 - yety

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接