读取内存中的exe文件并执行它
read exe file in memory and execute it
是否有可能使用Windows将文件读取到内存中(将数据保存在字节数组中),从文件系统中删除原始文件并从内存中执行?
编辑
我的目标是保护我的java代码不被逆向工程。
我用c++写了一个启动器,它接受我加密的jar文件,解密并启动它。一个小问题是,我必须在文件系统的某个地方写我的解密jar文件,所以它可以很容易地捕获和反编译…没有办法预防吗?
不,那样做是不可能的。没有系统调用说"取我的这一块内存并使用它的这一部分作为新进程的映像"。
你可以将代码加载到内存中,并在当前进程中跳转到它,但这是一件丑陋的事情,因为你必须处理所有的重定位。
关于Java特定部分:
你可以在你的c++可执行文件中嵌入Java解释器。您可以为Java编写自己的类装入器(通过与JVM的c++接口),它将从加密的Jar文件装入类。这样就可以避免将未加密的Jar文件写入磁盘。当然,任何有调试器的人都可以在内存中看到它…
IInspectable, jmax已经声明这个答案可以作为解决方案的一部分来保护文件,他们不能在评论部分提供完整的解决方案。如果你试图实施这样的解决方案,那么请你提出一个新的问题,你已经尝试过,你被困在哪里。评论部分不应该用来探讨进一步的主题或要求实现新功能的详细信息。
虽然这是一个老问题,但有一种方法可以将文件读入内存并执行它,它称为RAM磁盘。这可以用于任何编程语言。
- 创建RAM磁盘。例如,通过使用java的ProcessBuilder 运行ImDisk工具包
- 复制/创建exe文件到RAM磁盘
- 在RAM磁盘上执行文件
- 删除内存盘
对于单个文件执行来说,这将是缓慢的设置,但可以完成任务。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何在可执行文件中存储常量数组?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 可执行文件C++包括.obj,.lib和.dll吗?
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"