对使用 zeit/pkg 来“编译”它的节点应用程序进行逆向工程

问题描述 投票:0回答:1

我有一个应用程序(我相信其中有恶意软件,但我想在继续使用它之前确认一下),它已使用 Zeit 的 PKG 编译/打包。

似乎使用了 v8 的快照功能来混淆代码...有什么方法可以扭转这个问题吗?我知道它在 exe 中编译了节点,但我对编程和逆向工程很陌生。

我从哪里开始对这个东西进行逆向工程?谢谢!

javascript node.js reverse-engineering v8 zeit-pkg
1个回答
0
投票

首先您需要了解它是如何工作的。您会发现它分叉了node.js 存储库并更改了负责启动引擎的引导代码。

第二部分是序列化数据。它使用 V8 引擎(运行 Node.js 和基于 chromium 的浏览器的 javascript 引擎)创建整个程序的字节码并将其附加到二进制文件的末尾。

因此,要反转该二进制文件:

  1. 您需要首先提取该尾随部分。它将包含一个保存为 JSON 的伪文件系统。您只需要包含字节码的文件。该文件可以在十六进制编辑器中打开,并且您可以搜索字符串,除非它们被混淆了。
  2. 您需要将 v8 引擎创建的二进制字节码转换为可读的字节码。在撰写本文时,还没有可用的公共工具,或者已经非常过时了。现在您已经有了一些类似于汇编的东西,您可以阅读并理解它。
  3. 您可以进一步将字节码转换为 JavaScript 代码,但这是一项非常艰巨的任务,因为引擎在优化中剥离了一些逻辑。

顺便说一句,v8 引擎允许您通过传递标志

-print-bytecode
和可选的
--print-bytecode-filter=func_name
直接以文本格式转储字节码。但是,v8 引擎不会转储常量池,因为该功能已从发布通道中删除。这将允许您看到函数代码,但看不到函数使用的值。

© www.soinside.com 2019 - 2024. All rights reserved.