我想分析OllyDbg中的文件,但是,#34;入口点的地址"在此文件中是0x0000
。因此它将运行MZ签名作为ASM代码的开始部分。
大多数调试器也无法直接调试它 如何找到修改标题的原始入口点?
答案 0 :(得分:4)
如果AddressOfEntryPoint
中的EXE
设置为0 - 那么EXE
并且没有此入口点。在这种情况下,对于不崩溃EXE
必须具有TLS回调 - 查找IMAGE_TLS_DIRECTORY
(IMAGE_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
作为入口点。
但是如果您尝试使用自动将断点设置为入口点的调试器(调试器如何思考)来调试此问题 - MZ
(IMAGE_DOS_HEADER
)已损坏。结果RtlImageNtHeader[Ex]
为EXE
返回0(错误)并且应用程序崩溃(在此调试器下)
答案 1 :(得分:0)
0x00000000
是Address
文件中PE
入口点的有效值,恶意软件使用此技巧使其调试变得困难。
Visual Studio可以调试具有EP == 0
。