从可执行文件 (.exe) 中恢复 NodeJS 代码

Posted

技术标签:

【中文标题】从可执行文件 (.exe) 中恢复 NodeJS 代码【英文标题】:Recover NodeJS code from executable (.exe) 【发布时间】:2021-08-06 16:11:17 【问题描述】:

一位朋友给了我一个他多年前购买的程序。除了可执行文件和无用的自述文件(真的没有什么值得分享的,我不允许分享 .exe 文件)之外,没有什么可看的。不幸的是,我们也无法联系到最初的开发者。当程序给我时,我被告知它是用 python 编写的。所以我尝试用我在谷歌上搜索到的各种库来反编译.exe。它们似乎都不起作用,但 Pydecipher 在其日志文件中有以下输出:

2021-05-17 08:26:34,828: [*] Unpacking /home/me/Repos/myrepo/executable.exe
2021-05-17 08:26:34,828: [*] Checking PortableExecutable magic for file executable.exe
2021-05-17 08:26:46,090: [*] Determined executable.exe type to be PortableExecutable
2021-05-17 08:26:46,090: [*] This PE had the following VersionInfo resource: 
    "CompanyName": "Node.js",
    "ProductName": "Node.js",
    "FileDescription": "Node.js: Server-side javascript",
    "FileVersion": "10.21.0",
    "ProductVersion": "10.21.0",
    "OriginalFilename": "node.exe",
    "InternalName": "node",
    "LegalCopyright": "Copyright Node.js contributors. MIT license."

2021-05-17 08:26:46,267: [+] Dumped this PE's overlay data to pydecipher_output_executable/overlay_data
2021-05-17 08:26:56,782: [*] Found the following strings (and their surrounding bytes, for context) in this PE, which may indicate the version of Python used to freeze the executable:
[('1.0', 'tial-scale=1.0, minimum-scale=1.0,
...

我在this thread 找到了最有用的答案

简短的回答。如果你足够好。

我相信 js 代码一定在某处。这意味着您可以尝试使用 unix 命令字符串来提取它

到目前为止,Unix 命令对我的帮助并不大。所以首先,我可以依赖我正在处理 NodeJS 的假设吗?如果是这样,我可以采取哪些步骤来恢复代码?有没有可能?

更新

它肯定是用 NodeJS 编写的

【问题讨论】:

从您找到的 reddit 线程中,也有相关性:“将取决于很多事情,例如它是如何编译的,它是用什么制作的等等”。 如果这实际上是一个打包的 node.js 应用程序,那么通常它会包含 js 代码以及节点引擎可执行文件,以及一个执行它的微型包装器。 什么意思是“它通常包含 js 代码和节点引擎可执行文件”?就像我说的,只有 .exe 文件。 .exe 文件是二进制文件,对吧?它怎么可能包含JS?是否需要先反编译才能过滤掉 JS-parts? 二进制文件仍然包含数据 - 它可能是压缩的 js 文件,或其他一些编码。 做出正确的猜测,使用逆向工程套件为您进行猜测,和/或将程序加载到调试器中以查看它在做什么。 @Lalithkumar 是的,我确实找到了解决方案。不幸的是,没有比人们已经在这里写的更好的答案了。你需要“逆向工程”。我通过让程序运行一周来做到这一点,以监控它产生的请求。通过他们的有效载荷,我能够理解程序的工作流程。从此我重写了程序。没有简单的解决方案,即使用工具。 【参考方案1】:

我不确定您是否可以完全相信它是基于 Node.js 的应用程序,除非您使用各种工具进行检查。我个人喜欢这里的答案:Is it possible to "decompile" a Windows .exe? Or at least view the Assembly? 建议使用 PEiD 进行检查。

此外,如果该可执行文件是可视的(具有 UI、窗口)并使用 Node.js,那么它很可能是使用 NodeWebkitElectron 制作的。所以你可以朝那个方向挖掘,如何decompile NodeWebkit exedecompile Electron exe

【讨论】:

很遗憾没有 UI,没有。但我现在可以验证它是 NodeJS

以上是关于从可执行文件 (.exe) 中恢复 NodeJS 代码的主要内容,如果未能解决你的问题,请参考以下文章

如何从可执行文件中提取数组?

Apparmor:是不是可以从可执行文件中调用另一个可执行文件?

从可执行文件中找出编译优化标志

nodejs 怎么打包成可执行文件

将类从可执行文件导出到 dll

是否可以在 Windows 上运行时从可执行文件中定位函数?