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

时间:2011-11-06 17:59:13

标签: java c++ windows

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


修改

我的目标是保护我的java代码免受反向引擎。

我在C ++中编写了一个启动程序,它使用我的加密jar文件,解密并启动它。 小问题是我必须在文件系统的某个地方编写我的解密jar文件,因此可以很容易地捕获和反编译......没有办法阻止这个?

2 个答案:

答案 0 :(得分:8)

不,这样做是不可能的。没有系统调用说“把我的记忆中的这一部分用作新过程的图像”。

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

关于Java特定部分:

您可embed a Java interpreter within your C++可执行文件。您可以编写自己的Java类加载器(通过CVM接口连接到JVM),它将从加密的Jar文件中加载类。这样你就可以避免将未加密的Jar文件写入磁盘。当然,任何拥有调试器的人都可以在内存中看到它......

答案 1 :(得分:0)

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

  1. 创建一个RAM磁盘。例如通过使用Java的ProcessBuilder运行ImDisk工具包
  2. 将exe文件复制/创建到RAM磁盘
  3. 执行RAM磁盘上的文件
  4. 删除RAM磁盘

设置单个文件执行的速度很慢,但可以完成此工作。