打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于Hook DrawText
这几天研究hook其它进程api。首先把dll注入其它进程已经成功。然后hook其它进行的api。这个目标进程也是我写的测试进程。
我在测试的目标进程中,调用了::MessageBoxA,::MessageBoxW,::DeleteFileA,都成功hook了。然后我在目标进程中,调用了如下代码:
CWindowDC dc(NULL);
dc.DrawText(_T("abc"), 3, CRect(0, 0, 100, 50), DT_SINGLELINE);
往屏幕左上角打印出abc。我Hook的是::DrawTextA和::DrawTextW。没有成功。实际上,dc.DrawText里面,也是调用的::DrawTextA或::DrawTextW,不知道为什么不成功。但我把上面的代码改成:
CWindowDC dc(NULL);
::DrawTextW(dc.GetSafeHdc(), _T("abc"), 3, CRect(0, 0, 100, 50), DT_SINGLELINE);
那么又可以成功hook了。
我不知道这是为什么。怎么解决。谢谢
你用的是Hook IAT的方法吧?
hook的是exe中的::DrawText,而不是exe调用的dll中的DrawText,所以导致问题的出现。详细解释请参考《Windows核心编程》第5版p604页。
如果你使用的是MFC动态库,CDC::DrawText在MFC的DLL中,如果你只Hook了EXE模块而没有Hook其加载的DLL,就是这样的结果。如果用Detour的方法就不会有这种问题。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
SetWinEventHook和SetWindowsHookEx的异同
木马各种隐藏技术披露
Windows下HookAPI技术
勾子基本概念
【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
API Hook基本原理和实现[图文] - 编程文档 - C Builder 研究 - http://www.ccrun.com
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服