查看OSR Online和NtInternals之類的各種頁面後,看起來好像NtCreateProcess
(和ZwCreateProcess
)指定給內存段的句柄是可選的!有沒有可執行支持的圖像的過程?
這是否意味着我們可以擁有沒有可執行映像支持的進程?如果是這樣,他們可能(或他們)有可能使用什麼?這是否意味着我們可以將一個可執行文件完全複製到內存中,然後甚至從磁盤上刪除該文件,並讓該過程繼續運行?這似乎是一個非常有用的功能。
查看OSR Online和NtInternals之類的各種頁面後,看起來好像NtCreateProcess
(和ZwCreateProcess
)指定給內存段的句柄是可選的!有沒有可執行支持的圖像的過程?
這是否意味着我們可以擁有沒有可執行映像支持的進程?如果是這樣,他們可能(或他們)有可能使用什麼?這是否意味着我們可以將一個可執行文件完全複製到內存中,然後甚至從磁盤上刪除該文件,並讓該過程繼續運行?這似乎是一個非常有用的功能。
如果部分(win32域中的文件映射)爲NULL,它將使用父進程的部分。使用NULL並分配新內存並指向EIP(或使用頁面文件映射)可能是可能的,但使用NtCreateProcess會有問題,它沒有記錄,並且不像CreateProcess那樣向win32子系統註冊。 (如果你只想使用ntdll導出,這可能是好的)
在Win9x,NT4和2000上,你可以使用here列出的骯髒技巧在運行時將自己從磁盤上刪除。
其他選項:
我只是想自己創建一個包含非映像支持的Section對象的流程。 :)
結果呢?
NtCreateProcess
返回:
STATUS_SECTION_NOT_IMAGE
// An attempt was made to query image information on a section which
// does not map an image.
因此很明顯,每過程需要圖像支持(假設你沒有修改內核不這樣做)。
我對Posix'fork'機制不太熟悉,但是你認爲,因爲使用了父進程的部分,所以可以用它在Windows上實現'fork'? (和+1,感謝文件刪除信息,這很有趣!) – Mehrdad 2011-03-18 02:41:35
@Mehrdad:根據2008年的http://www.eggheadcafe.com/software/aspnet/32040421/ntcreateprocess-and-fork.aspx,Cygwin大家都嘗試使用NTCreateProcess分叉和失敗,我不知道自那時以來事情是否有所改變,但你可以檢查他們的來源... – Anders 2011-03-18 02:44:34
:哦,這太酷了!我想我會嘗試(第十億次)看看我是否可以編寫自己的'CreateProcess'版本...祝我好運! :] – Mehrdad 2011-03-18 02:50:42