2017-03-02 55 views
1

全部,PE注射圖像遷移

我一直在試圖弄清楚這幾天現在,我需要一些幫助。

對於一個研究項目我寫了一些自定義的惡意軟件,惡意軟件本身並不是問題,我不會分享任何代碼,但我確實需要一些幫助。

我有一些問題,試圖完全理解如何以及何時需要執行手動重定位。目前我沒有重新定位並使用virtualallocex的隨機地址,並且一切正常。我的惡意軟件exe運行,我沒有問題,除非遠程進程PE加載的內存位置與我的惡意軟件PE首選基地址重疊。

我沒有使用NtUnmapViewOfSection,因爲它被AntiVirus檢測到,基本上只是一個垃圾函數,它隨機不起作用,所以我的計劃是使用VirtualAllocEx提供的隨機地址,並在需要時重新定位(我不明白,請看下面的問題)。

這是我目前的工作方法(除非目標進程與preferredbase重疊):

  1. 下載惡意軟件的exe和發生在緩衝
  2. 的CreateProcess啓動受害人過程
  3. 掛起線程之後(我我沒有使用CREATE_SUSPENDED標誌,因爲這在win10中不起作用)
  4. 從緩衝區(PIMAGE_DOS_HEADER,PIMAGE_NT_HEADERS)獲取必要的標題信息,也從遠程進程獲取ImageBase地址PEB
  5. 分配在目標進程(VirtualAllocEx的)內存,採用NULL爲lpAddress所以VirtualAllocEx的可以選擇的位置
  6. 寫PE頭和部分內存位置
  7. 保護內存
  8. 變化EAX新的入口點
  9. 變化PEB新baseAddress
  10. ResumeThread
  11. 利潤

所以,請幫助我瞭解以下內容:

  1. 爲什麼沒有做任何手動遷移這項工作,有沒有做這個即使我注射的背景有些神奇的PE裝載器?

  2. 當目標進程與首選基地址重疊時,它爲什麼不起作用? PE映像本身被複制到一個不重疊的內存位置,所以當目標進程不重疊時,如何在地獄中與我的工作解決方案有所不同。它應該只是從我的第一個問題做魔術搬遷的事情。

  3. 爲什麼我看到很多人在將圖像寫入內存之前先更改圖像中的preferredBaseAddress?據我所知,這個字段僅用於將PE映射到他們的首選baseaddress,如果他們不能這樣做PE加載器執行重定位。看到注入代碼通常執行自己的手動重定位,我不知道他們爲什麼會改變它。

希望有人能幫助我理解,因爲這會讓我瘋狂:)。

此致敬禮!

+0

所有的,我創建了我自己的重定位代碼,現在它可以工作,但在將圖像複製到內存之前,我必須更改圖像中的preferredBaseAddress。 仍然搞清楚爲什麼它沒有重定位代碼,爲什麼我需要改變首選基地以及PEB – yannickwe87

回答

0

1:這是因爲彙編代碼的工作原理。大多數jmp都是與當前地址相關的,因此無論代碼位於何處都可以工作。一旦你想查找變量/解決從IAT的dll導入地址,問題就出現了。這是因爲這些操作需要MOV指令,通常編譯器會將地址作爲這些函數的源操作數進行硬編碼。問題在於它會指向一些隨機位置,因此會導致訪問衝突/未定義的行爲。

我認爲你的情況是,主進程和有效負載都有相同的首選基地址。這意味着它不會因訪問衝突而失敗,因爲只有發生是該位置的一些隨機數據。

如果您始終將有效負載加載到其首選基地址,則不需要執行手動重定位。

2:不知道你的意思

3什麼:對於普通的簡單的應用程序,你會不會有改變的首選基址。當有效負載需要訪問它的重定位表時(例如,在部署rootkit或w/e時),問題就出現了。它的種類取決於病毒是如何構建的。如果首選基地址與實際基地址進行比較,則不會有任何問題。

到您的CREATE_SUSPENDED問題:幾周前我有這個完全相同的問題。看起來,只要您恢復使用CREATE_SUSPENDED創建的線程,它就會覆蓋它的寄存器或w/e。我無法弄清楚爲什麼會出現這個問題。你能做些什麼來克服這個問題,絕不會恢復主線程。相反,只需使用CreateRemoteThreadEx創建一個新線程即可。

編輯:在閱讀你的其他問題之一後,你確實爲我解決了這個問題。我正在改變EIP而不是EAX。我不知道名爲eax的PE加載器,而不是僅僅在指令指針處恢復代碼。

如果您需要任何幫助,請使用HMU。我已經完成了大量關於惡意軟件開發的研究,並且熱衷於分享這些知識。