2017-01-16 70 views
2

我想分析OllyDbg中的文件,但是,此文件中的「入口點地址」爲0x0000。所以它將運行MZ簽名作爲ASM代碼的開始部分。如何在PE頭中入口點地址爲零時找到OEP?

大多數調試器也無法直接調試它。
我怎樣才能找到修改標題的原始入口點?

+0

這是'DLL'嗎?因爲'EXE'不能沒有入口點 – RbMm

+0

我確定它是一個exe文件,這就是爲什麼我需要找到OEP來修改頭文件。 – Likak

+1

兩個,一個'.EXE'和'.DLL'文件,有入口點, – zx485

回答

4

if AddressOfEntryPoint in EXE設置爲0 - 如此EXE並且沒有此入口點。在這種情況下,爲了不崩潰EXE必須具有TLS回調 - 查找IMAGE_TLS_DIRECTORYIMAGE_DIRECTORY_ENTRY_TLS)和AddressOfCallBacks必須不爲0.因此,這是此的真正入口點 - 沒有其他選項,否則EXE將崩潰。

大多數調試器也無法直接調試它。

如果調試器在入口點上設置斷點,會發生這種情況。在這種情況下,「入口點」將在MZ上 - 以及調試器在此處設置斷點(0xcc操作碼)時 - 損壞MZ簽名。因爲進程初始化是異常(user32.UserClientDllInitialize -> ntdll.CsrClientConnectToServer -> RtlImageNtHeaderEx(因爲MZ由於斷點而損壞))

但是如果調試器沒有在入口點設置斷點 - 在調試時沒有問題。

這樣的解決方案 - 尋找IMAGE_DIRECTORY_ENTRY_TLS.AddressOfCallBacks或設置斷點LdrpCallTlsInitializers


真的,這是CLR.NET)圖像 - 在這種圖像類型的入口點是正式和XP後不能使用。系統忽略它並在mscoree.dll中調用_CorExeMain作爲入口點。

但是,如果您嘗試使用調試器進行調試,該調試器會自動設置斷點到入口點(調試器認爲如何) - MZIMAGE_DOS_HEADER)已損壞。結果RtlImageNtHeader[Ex]返回0(錯誤)EXE和應用程序崩潰(在此調試器下)

+0

我搜索了TLS目錄。 'TLS目錄RVA'和'TLS目錄大小'它們都設置爲零。在這種情況下,TLS結構又是在MZ中? – Likak

+0

@bahare - 在這種情況下,EXE中沒有TLS。這個exe是否全部執行? – RbMm

+0

非常令人驚訝的是!它運行正常。聽起來它運行MZ作爲指令代碼。因爲當我在IDA中打開它後,兩次push和pop,inc和dec,跳轉(位於0x00400004)到0x004139EF。所以我相信0x139EF是原始切入點的RVA。 – Likak

0

0x00000000是PE文件中入口點地址的有效值,惡意軟件使用此技巧使其調試困難。 Visual Studio可以調試EP == 0的二進制文件。