社区
进程/线程/DLL
帖子详情
我用windows核心编程的方法hook api textouta,为什么不能hook游戏的textouta呢?
BABIZHU
2003-08-19 12:14:43
我用一些工具分析到游戏采用了textouta,自己用softice跟中,也发现他调用了textouta来输出文字,可是为什么我的hookapi不能hook这个textoua呢?我的hookapi已经可以hook别的win32程序了
...全文
59
9
打赏
收藏
我用windows核心编程的方法hook api textouta,为什么不能hook游戏的textouta呢?
我用一些工具分析到游戏采用了textouta,自己用softice跟中,也发现他调用了textouta来输出文字,可是为什么我的hookapi不能hook这个textoua呢?我的hookapi已经可以hook别的win32程序了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Lightest
2003-08-28
打赏
举报
回复
关键看你的dll插入的时机.有的程序通过GetProcAddress获取函数地址变量中,然后通过这个函数指针调用函数.这个时候修改引入表就没有用了.唯一的办法就是在程序调用GetProcAddress之前你的dll就已经注入到进程中且完成了挂接任务.通常的用系统钩子的方法注入dll是来不及的.
BABIZHU
2003-08-22
打赏
举报
回复
ziji ding
BABIZHU
2003-08-19
打赏
举报
回复
可是我用很多工具包括softice分析都能够中断到textouta处啊,而且参数内容也吻合
rainbowinfog
2003-08-19
打赏
举报
回复
那它不是用的TextOutA。
DDHuang
2003-08-19
打赏
举报
回复
这就具体问题具体分析三,这个只有慢慢的跟踪了
BABIZHU
2003-08-19
打赏
举报
回复
dll已经加载了,这个用DLLSHOW可以看出来,但是地址好像没有变化,非常的郁闷
DDHuang
2003-08-19
打赏
举报
回复
那么你用softice跟踪游戏所调用的textout地址和原始地址一不一样,看看你的dll是不是被加载到了游戏的进程
BABIZHU
2003-08-19
打赏
举报
回复
我想不是这个问题把,所有的工具都分析到中断的是textoutA,而不是textoutW
rainbowinfog
2003-08-19
打赏
举报
回复
试一试TextOutW啊。
vc++钩子程序
Hook
API
1.62.rar
1.52版更新内容: 1。
Hook
API
9x.dll删除了检查PTE的汇编语句,解决了RasDialA无法
Hook
的问题 2。Inst
Hook
.dll里先FreeLibrary
Hook
API
9x.dll再free mydll_9x.dll,解决
Hook
API
9x.dll中Un
hook
出错的问题。 1.5版主要是针对win9x下的错误修改的,修改内容为: 1。修正了win9x下总是出错的问题 2。win9x下的mydll文件名称改为了mydll_9x.dll 3。win9x下的mydll程序加了编译选项预定义WIN95,编写win9x下的mydll时请注意 1.6版本更新内容: 1。修改了win9x下
Text
OutA,
Text
OutW等函数的截获问题 [2003.04.12] 添加
Hook
/Un
hook
一个函数 添加
Hook
/Un
hook
一个Process [2003.04.16] 在winxp和win9x下测试
hook
socket成功,版本升级为1.6c [2003.04.19] 修改了C
Hook
API
::Un
hook
One
API
()里的针对多次
hook
的
api
的修改,只un
hook
一次 [2003.04.22] 修改了exe文件界面为英文,版本1.6d2 there is 2 bugs in version 1.62, one is on win9x, one is on win2000. If you want to fix it, you should buy support(email:netcom@163.net)
在win32下
Hook
系统
API
.txt
3.1 程序说明 当启动程序Try.EXE调用SetMouse
Hook
()后,
Windows
系统将Mouse
Hook
.DLL映射入每一个有鼠标消息传入的进程地址空间。映射时将用DLL_PROCESS_ATTACH作为参数fdwReason的值调用DllEntryPoint(),DllEntryPoint()调用ModifyCall()搜索该进程对
Text
OutA()的调用并将其替换为调用My
Text
Out()。这样当该进程调用GDI32.DLL的
Text
OutA()时实际调用的却是Mouse
Hook
.DLL的My
Text
Out()。 ModifyCall()利用进程的HINSTANCE(也即HMODULE,对于Win32而言它们是一回事,即装载基址)找到DOS文件头结构IMAGE_DOS_HEADER,再利用IMAGE_DOS_HEADER中的e_lfanew成员找到Win32的IMAGE_NT_HEADERS结构,该结构含有动态连接所需的信息。IMAGE_NT_HEADERS中的OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]含有DLL函数引入表的RVA(相对虚拟地址)和大小。搜索该表所指向的DLL引入函数地址,值与GetProcAddress()返回值相同的单元就是对应的DLL函数地址存放单元,将My
Text
Out()地址写入即可。详细情形请参阅有关PE文件格式的说明和Winnt.h中的定义。 当启动程序调用UnMouse
Hook
()时,过程与之类似,只是此时是为了卸下WH_MOUSE全局钩子并恢复原来对
Text
OutA()的调用。 此处设置WH_MOUSE全局钩子的目的只是利用全局钩子的特性将Mouse
Hook
.DLL“挤进”其它进程的地址空间,因此钩子过程MouseProc()很简单,只是传递一下消息而已。 两个#pragma data_seg()编译器指令是为了定义一个名为.Mouse
Hook
的数据段(更确切地说是数据节),该数据段在Mouse
Hook
.DEF中被说明为共享,之所以如此是因为各个进程空间中的MouseProc()需要该钩子的句柄hMouse
Hook
,而hMouse
Hook
只在启动程序Try.EXE调用SetMouse
Hook
()时得到一次,因此只能放在共享内存中,否则
编程
将变得复杂起来。至于每个进程中被替换下来的
Text
OutA()地址,是属于单个进程空间的,故放在局部数据中,
Windows
系统会为每次映射使用不同的内存。实际上,
Text
OutA()的引入地址在所有的进程中都是相同的,这是因为为了页面管理的简单和进程切换的效率,对每个进程
Windows
9x将系统DLL映射在同一地址上,但这不是
Windows
对外保证的,而只是权宜之计,以后可能改变,且
Windows
NT的情况也可能不同。 My
Text
Out()将截获的
Text
OutA()的参数lp
Text
(即输出字符串)改变以后才输出,从而可以看到截获是否成功。之所以改变两个字符而不是简单的一个,是因为只改变一个字符将导致汉字输出乱码。 My
Text
Out()源码中唯一的一条汇编语句__asm sub esp,14h是所有源码中最难写的语句。如果没有这条指令,My
Text
Out()将无法正确返回到进程调用
Text
OutA()处的下一条指令上,出现的“意外”情况是:进程调用
Text
OutA()的最后一个参数、即输出字符串长度参数将作为返回地址从堆栈中弹出,从而使EIP为一个很小的值,程序进入
Windows
系统用作指针检查的低端内存,导致非法内存访问。在调试过程中发现导致这种现象的原因是My
Text
Out()在临返回前使用了add esp,14h来清除并不需要清除的堆栈,从而破坏了堆栈。显然,原因在于函数调用说明使编译器产生了“错误”的堆栈管理代码,我不知道如何改正这一点,只好使用__asm sub esp,14h强行使堆栈指针指向“正确”的返回地址。有知晓个中奥妙的同志请与作者联系,多多指教。 以下程序在
Windows
98、Microsoft Visual Studio 97中调试通过,由于
编程
中并未使用
Windows
9x的特性,且程序依靠的PE文件格式在
Windows
9x和Wiundows NT中是通用的,因此上述
方法
在
Windows
NT可能也是可行的,只是我并未验证(我没有装
Windows
NT的机器)。另外,某些方面的情况由于编译器和操作系统不同可能会有所不同(如编译器生成的指令),我的叙述会因此而偏颇甚至错误,在此先做个提醒,也欢迎来意见改进
编程
。
游戏
逆向安全之
HOOK
变态功能实现
游戏
逆向安全之
HOOK
变态功能实现
金山词霸屏幕取词原理(源代码)
自己写的 金山词霸类翻译软件的屏幕取词的原理性的源代码 分为三个部分 dll中是
HOOK
Text
OutA的代码和安装钩子的代码 test是目标程序 此程序使用了
Text
Out函数 DLL_test是将DLL注入到目标程序的
API
HOOK
VC 6.0 源程序例子
API
HOOK
VC 源程序例子, 其实也只是参考了别人的研究,Copy 了别人的代码而已。当然大家也可以完全使用我的所有代码。很久没有写东西。所以只能这样将就的搞一点东西上来。另外,以前几篇文章里面提供的源程序或者是图像URL 都无效了。我已经改好了。本例子里面实现了对
Text
Out 这个
API
的
hook
另外如何实现其他
API
, 可以自己参考这个
方法
:void CTestAP
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章