其實很簡單。您只需將遠程EXE/DLL下載到緩衝區(即從內存中),從這一點上您可以選擇一些選項。
您最初需要檢查MZ簽名,並且它是一個有效的PE文件。你可以這樣做PIMAGE_NT_HEADERS
,檢查Optional.Signature(如果有效的PE文件)和e_magic在PIMAGE_DOS_HEADER
(MZ簽名)
現在的問題是,如果你想注入一個DLL,從內存中加載它,搜索其爲給定函數導出表,獲取代碼並在遠程進程中執行i,或從內存中執行EXE。
假設你只是想獲取圖像的ImageBase,就像你說的你閱讀一些在線的教程,通過GetModuleHandle
來討論它,你首先需要映射下載的緩衝區。
您可以通過
CreateFileW
(讀),CreateFileMapping
做到這一點(從傳遞的CreateFile處理),MapViewOfFile
(自通的CreateFileMapping返回的句柄)。
在此之後,您將從MapViewOfFile
獲取基本圖像地址。你現在可以用這個文件做很多事情,你可以從內存中注入它,或者從內存中執行它。
您需要查看PE修正(導出和導入地址表函數)以及通過直接映像目錄RVA - > base進行基礎重定位。
請注意,如果您在映射文件之後在遠程進程中執行映像,請使用ZwQueueApcThread
注入方法,而不是像RtlCreateUserThread/CreateRemoteThread
這樣的更復雜的注入方法。
如果您正在執行內存中的代碼。在通過重定位確定偏移之後,確保通過VirtualProtectEx
,可選ZwAllocateVirtualMemory
(通過PAGE_WRITECOPY
而不是PAGE_EXECUTE_READWRITE
)而不是ZwWriteVirtualMemory
- WriteProcessMemory
執行代碼,因爲它更加隱身!
此外,我相信你可以找出一些其他的方法,這只是從我的頭頂。
好的,所以*你*不會用於惡意目的。如果其他人閱讀答案呢? –
這就是爲什麼我說我指向正確的方向就夠了,不需要代碼。人們必須以某種方式學習,因爲你研究的東西可以用於惡意目的,所以很難進行安全研究。 我可以扔掉protonemail和答案可以郵寄,也許這是更好:) – yannickwe87