【问题标题】:Recover javascript source code from uglifyjs source map从 uglifyjs 源映射中恢复 javascript 源代码
【发布时间】:2015-08-23 01:52:36
【问题描述】:

我正在对一个神奇的脚本进行逆向工程。我有一个 uglifyjs 生成的 uglified 源代码和源图

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

谢谢!

【问题讨论】:

  • 我不知道有一种工具可以将这种情况从我的脑海中扭转过来。但是,如果您在 Chrome 中的 HTML 页面中加载文件并打开开发工具,它应该能够显示源代码。如果混淆后的代码没有对源映射的引用,您可能需要自己添加。
  • 如果你有一个“晦涩难懂的方式”,而且你只需要这样做一次,你为什么不这样做呢?
  • 您是如何获得源地图的,而无需在原始源上运行 uglify 自己?原作者肯定不会提供它,通过丑化表明他们的意图。

标签: javascript obfuscation uglifyjs source-maps deobfuscation


【解决方案1】:

有一个名为 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/

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 谢谢!但我非常了解这些工具。我需要获取原始变量名称才能使这段代码可读。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2011-05-07
        • 2017-06-23
        相关资源
        最近更新 更多