gpt4 book ai didi

portable-executable - 当PE头中入口点地址为零时如何找到OEP?

转载 作者:行者123 更新时间:2023-12-02 04:01:28 27 4
gpt4 key购买 nike

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

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

最佳答案

如果EXE中的AddressOfEntryPoint设置为0 - 那么EXE并且没有这个入口点。在这种情况下,为了不崩溃,EXE 必须具有 TLS 回调 - 查找 IMAGE_TLS_DIRECTORY (IMAGE_DIRECTORY_ENTRY_TLS) 和 AddressOfCallBacks必须不为 0。所以这是此 EXE 的真正入口点 - 没有其他选项,否则 EXE 将崩溃。

Most debuggers are also unable to debug it directly.

如果调试器在入口点设置断点,就会发生这种情况。在这种情况下,“入口点”将位于 MZ 上 - 当调试器在此处设置断点(0xcc 操作码)时 - 损坏 MZ 签名。由于进程初始化出现异常(user32.UserClientDllInitialize -> ntdll.CsrClientConnectToServer -> RtlImageNtHeaderEx(错误,因为MZ被断点损坏))

但是如果调试器没有在入口点设置断点 - 调试就没有问题。

因此解决方案是查找 IMAGE_DIRECTORY_ENTRY_TLS.AddressOfCallBacks 或将断点设置为 LdrpCallTlsInitializers


这确实是CLR (.NET) 图像 - 在此图像中,类型入口点是正式的,在 xp 之后不再使用。系统忽略它并调用 _CorExeMainmcoree.dll 作为入口点。

但是,如果您尝试使用自动将断点设置为入口点的调试器(调试器如何思考)来调试它,则 MZ (IMAGE_DOS_HEADER) 会损坏。结果RtlImageNtHeader[Ex]EXE返回0(错误)并且应用程序崩溃(在此调试器下)

关于portable-executable - 当PE头中入口点地址为零时如何找到OEP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686703/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com