如果PE头中的入口点地址为零,如何找到OEP?

时间:2017-01-16 23:30:09

标签: portable-executable ollydbg

我想分析OllyDbg中的文件,但是,#34;入口点的地址"在此文件中是0x0000。因此它将运行MZ签名作为ASM代码的开始部分。

大多数调试器也无法直接调试它 如何找到修改标题的原始入口点?

2 个答案:

答案 0 :(得分:4)

如果AddressOfEntryPoint中的EXE设置为0 - 那么EXE并且没有此入口点。在这种情况下,对于不崩溃EXE必须具有TLS回调 - 查找IMAGE_TLS_DIRECTORYIMAGE_DIRECTORY_ENTRY_TLS)和AddressOfCallBacks必须不是0.所以这是真正的切入点( s)这个EXE - 别无选择,否则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]EXE返回0(错误)并且应用程序崩溃(在此调试器下)

答案 1 :(得分:0)

0x00000000Address文件中PE入口点的有效值,恶意软件使用此技巧使其调试变得困难。

Visual Studio可以调试具有EP == 0

的二进制文件