內存加載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
