吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 533|回复: 9
收起左侧

[求助] 如何判断WinAPI的调用方?

[复制链接]
董督秀 发表于 2024-7-20 14:40
30吾爱币
如何判断WinAPI的调用方?

例如:正在运行的进程abc.exe中,def.dll是该进程的模块之一,还可能有其他若干个dll模块。

abc.exe会调用MessageBoxA;def.dll也会调用MessageBoxA;其他模块也有可能调用MessageBoxA。

如何实现判断当前MessageBoxA的调用是来自abc.exe,还是来自def.dll,或是其他dll?

思路:
我想通过Hook MessageBoxA,根据堆栈返回值进行判断调用方,并打印出当前调用方的模块。

问题:
这种思路是否可行,如果可行,具体步骤是什么?还有没有其他思路?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

DEATHTOUCH 发表于 2024-7-20 15:28
完全可行,参考很多程序出错打印调用栈的操作,就可以知道了。

Hook确实是最容易想到也是最容易实现的,其他方法我也想不出来,期待更强的高手出现。
52new 发表于 2024-7-20 18:48
xiejuelianai 发表于 2024-7-20 20:14
HOOK,获取RSP的地址,然后读取那地址就能得到来源CALL地址了
EruditePig 发表于 2024-7-22 08:10
如果你可以用调试环境的话,用Windbg给MessageBox打上断点,这样停下来的时候直接输入k看堆栈是不是最简单
yes2 发表于 2024-7-22 08:49
思路可行,我曾经这么做过
 楼主| 董督秀 发表于 2024-7-22 10:25
yes2 发表于 2024-7-22 08:49
思路可行,我曾经这么做过

大佬给个示例代码参考呗。
yes2 发表于 2024-7-22 11:46
给不了,前东家的产品里加的东西,我自己没有留存。即使留存了也不能外泄,虽然是很简单的东西但是职业道德还是要的。
原理你自己不是知道了吗?根据堆栈返回值就可以了
hdxzd12 发表于 2024-7-22 13:30
可以使用CaptureStackBackTrace函数获取当前线程的调用堆栈信息。这个函数会返回一组指向调用堆栈上函数地址的指针。
使用SymFromAddr等符号解析函数,将函数地址转换为函数名称和模块名称。
朱朱你堕落了 发表于 2024-7-24 08:49
已发私信,注意查收。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 02:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表