一个用Nim实现的从内存中反射加载PE的代码。该代码的基础取自RunPE-In-Memory - 我将其移植到了Nim。
您需要安装以下依赖:
nimble install ptr_math winim
我仅使用Nim 1.6.2版本进行了测试,因此请使用该版本进行测试,否则无法保证使用其他版本时不会出现错误。
如果您希望在运行时传递参数,或者根本不想传递参数,请通过以下方式编译:
nim c NimRunPE.nim
如果您想要硬编码自定义参数,请根据您的需要修改const exeArgs,并使用以下命令编译:
nim c -d:args NimRunPE.nim ——此功能由@glynx贡献,谢谢!😎
如果您想要完整的线程本地存储(TLS)回调支持,允许执行Rust PE等,请使用以下命令编译:
nim c -d:full_tls NimRunPE.nim
感谢BlackBone和lander's blog/solstice-loader为full_tls选项的实现提供的贡献。
这种技术本身已经很老了,但我还没有找到Nim的实现。所以现在这种情况已经改变了。:)
如果您计划使用此技术加载例如Mimikatz——请确保自行从源代码编译一个版本,因为发布版二进制文件在被此加载器反射加载后不接受参数。为什么?我真的不知道,这很奇怪但事实如此。如果您自行编译,它仍然可以工作:
我的私人Packer也采用了这种技术——但其中所有Win32函数都被替换为了系统调用。这使得该技术更加隐蔽。