内存加载PE文件(nim学习系列)
内存加载PE文件(nim学习系列)
项目地址:
https://github.com/S3cur3Th1sSh1t/Nim-RunPE
该项目源于https://github.com/aaaddress1/RunPE-In-Memory,S3cur3Th1sSh1t将其转成nim lang版本。
要求安装nim-1.6.4或者更高版本,然后安装依赖库:
nimble install ptr_math winim
测试
默认加载的是计算器 C:\windows\system32\calc.exe
加下来我们尝试加载 mimikatz,根据作者的介绍,mimikatz需要下载源码自行编译,因为使用gentilkiwi的发行版exe加载后,无法传递参数。
关于mimikatz的编译可以参考以下两篇文章:
https://blog.csdn.net/qq_38963246/article/details/113096417
https://opensource-sec.com/2021/01/23/曲折的mimikatz编译之路/
我是使用Visual Studio 2019编译的
收获
内存加载PE文件的实现原理:
- 读取PE文件,按照PE格式进行解析
- 申请内存,ImageBase作为内存基地址,SizeOfImage作为长度
- 将PE文件头复制到内存中
- 解析Section的地址并将Section复制到内存中
- 基于重定位表修改内存
- 解析导入表,加载所需的Dll
- 跳转到入口地址AddressOfEntryPoint,执行PE文件
在作者的私有项目Packer中,使用Syscalls替换掉了Win32 functions。通过这个项目加深了C/C++项目转nim的理解,这就是收获。
From: https://www.cnblogs.com/StudyCat/p/16001615.html