我正在逆向工程一个神奇的脚本。我有一个由 uglifyjs 生成的 lified源代码和源地图。
有没有人知道如何从直接的方式如何实现至少部分可读的源代码?我发现了一些不起眼的方法,包括通过多种语言进行转换,但我希望更好的存在。
谢谢!
答案 0 :(得分:4)
有一个名为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/
我不想保留这个东西,所以如果有人想改进它,请把它分开并指出人们。 : - )
答案 1 :(得分:0)
如果使用webpack / browserify捆绑了项目,则可以使用Debundle package进行反向工程。 恕我直言,结果会好坏取决于某些项目。
并且因为它仅反编译JS(丑陋的webpack管道),所以如果您使用Vue SFC,则Debundle无法生成您的原始.vue文件,而是JS文件。
如果在阅读源代码的情况下,如果您的网页没有隐藏源地图文件,则可以使用Chrome DevTool
> Source
面板轻松读取漂亮的源代码:
答案 2 :(得分: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);
});
});
答案 3 :(得分:-1)
有一些工具可以帮助解决这个问题。我之前使用过http://www.cleancss.com/javascript-beautify/和http://jsbeautifier.org/,效果很好。如果您在Google中快速搜索JavaScript Beautifier,您会发现许多类似的结果。希望这有帮助!