读取内存中的exe文件并执行它

read exe file in memory and execute it

本文关键字:执行 文件 exe 内存 读取      更新时间:2023-10-16

是否有可能使用Windows将文件读取到内存中(将数据保存在字节数组中),从文件系统中删除原始文件并从内存中执行?


编辑

我的目标是保护我的java代码不被逆向工程。

我用c++写了一个启动器,它接受我加密的jar文件,解密并启动它。一个小问题是,我必须在文件系统的某个地方写我的解密jar文件,所以它可以很容易地捕获和反编译…没有办法预防吗?

不,那样做是不可能的。没有系统调用说"取我的这一块内存并使用它的这一部分作为新进程的映像"。

你可以将代码加载到内存中,并在当前进程中跳转到它,但这是一件丑陋的事情,因为你必须处理所有的重定位。

关于Java特定部分:

你可以在你的c++可执行文件中嵌入Java解释器。您可以为Java编写自己的类装入器(通过与JVM的c++接口),它将从加密的Jar文件装入类。这样就可以避免将未加密的Jar文件写入磁盘。当然,任何有调试器的人都可以在内存中看到它…

IInspectable, jmax已经声明这个答案可以作为解决方案的一部分来保护文件,他们不能在评论部分提供完整的解决方案。如果你试图实施这样的解决方案,那么请你提出一个新的问题,你已经尝试过,你被困在哪里。评论部分不应该用来探讨进一步的主题或要求实现新功能的详细信息。

虽然这是一个老问题,但有一种方法可以将文件读入内存并执行它,它称为RAM磁盘。这可以用于任何编程语言。

  1. 创建RAM磁盘。例如,通过使用java的ProcessBuilder
  2. 运行ImDisk工具包
  3. 复制/创建exe文件到RAM磁盘
  4. 在RAM磁盘上执行文件
  5. 删除内存盘

对于单个文件执行来说,这将是缓慢的设置,但可以完成任务。