是否可以在Windows中将文件读入内存(保留数据到字节数组),从文件系统中删除原始文件并从内存中执行它?
编辑
我的目标是保护我的Java代码不被反向工程。
我编写了一个C++启动器,它接受我的加密jar文件,对其进行解密并启动它。 问题是我不得不将我的解密后的jar文件写入文件系统某处,以便轻松捕获和反编译它......有什么办法可以防止这种情况发生吗?
是否可以在Windows中将文件读入内存(保留数据到字节数组),从文件系统中删除原始文件并从内存中执行它?
编辑
我的目标是保护我的Java代码不被反向工程。
我编写了一个C++启动器,它接受我的加密jar文件,对其进行解密并启动它。 问题是我不得不将我的解密后的jar文件写入文件系统某处,以便轻松捕获和反编译它......有什么办法可以防止这种情况发生吗?
不,这样做是不可能的。没有系统调用可以说“拿走我的一部分内存并将其作为新进程的镜像使用”。
您可以将代码加载到内存中,并在当前进程中跳转到它,但这是一件丑陋的事情,因为您必须处理所有的重定位。
关于Java特定部分:
您可以在C++可执行文件中嵌入Java解释器。您可以通过C++接口到JVM编写自己的Java类加载器,从加密的Jar文件中加载类。这样,您就可以避免将未加密的Jar文件写入磁盘。当然,任何带有调试器的人都可以在内存中看到它...
IInspectable,jmax表示这个答案可以作为保护文件的解决方案的一部分使用,但他们不能在评论区提供完整的解决方案。如果您正在尝试实现这样的解决方案,请提出一个新问题,说明您已经尝试过什么以及卡在哪里了。评论区不应该用于探讨更多的话题或请求有关实施新内容的详细信息。
虽然这是一个老问题,但有一种方法可以将文件读入内存并执行它,这被称为RAM磁盘。这可用于任何编程语言。
对于单个文件执行来说,这样设置速度会比较慢,但可以完成任务。
C:
更改为任何给定RAM磁盘实现决定分配的D:
,Z:
或其他[MS-DOS设备名称](https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-ms-dos-device-names)。 - IInspectableCreateProcess
需要可执行映像的文件系统路径,并且只要进程将其映射到内存中,该映像就不能从文件系统中删除。如果CreateProcess
可以找到可执行映像,那么其他人也可以找到它。这并没有实现任何目的。 - IInspectable