2017-01-16 72 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的二进制文件。