【问题标题】:Can you get the caller DLL or executable module from the callee你能从被调用者那里得到调用者DLL或可执行模块吗
【发布时间】:2017-01-25 04:49:04
【问题描述】:

我只想允许特定的 DLL 执行我在我挂钩的函数上编写的代码。如果不执行堆栈跟踪,如何获取调用者的模块名称?

【问题讨论】:

    标签: c++ winapi reverse-engineering


    【解决方案1】:

    获取堆栈跟踪以查找函数的返回地址,例如 CaptureStackBackTrace

    然后通过GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 调用GetModuleHandleEx 以获取包含该代码的模块句柄。

    最后,调用GetModuleFileName 查找与该模块关联的文件名。

    【讨论】:

    • CaptureStackBackTrace 看起来很有希望。这是获取来电者的可靠方式吗?
    • 井筒追踪是一门不完美的艺术。据我所知,至少在 x86 上,ABI 不会强制执行允许完美堆栈跟踪的规则。在实践中,很少会执行古怪到混淆体面的堆栈跟踪器的代码。既然这是你的代码,你应该是安全的。
    • 我不确定您为什么要这样做,但请记住,它不会提供强大的安全机制。恶意进程很容易伪造来自您的 DLL 的调用。
    • 也可以试试_ReturnAddress()
    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 2015-11-18
    • 2022-09-25
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多