浅谈屏幕取词划词与API HOOK、远程注入的关系以及技术原理

来源:互联网 发布:linux解包boot.img 编辑:程序博客网 时间:2024/06/17 04:38

 说到屏幕取词,就是通过拦截windows的显示API,获取输出的文本,然后提取出自己想要的信息的一个技术手段。windows有这么几个常用的,TextOutA,TextOutW,ExtTextOutA,ExtTextOutW以及Diretc3D的一些绘制函数(nopad,IE的输入框使用的是ExtTextOut, chrome使用的D3D的绘制函数,一些UI库的静态文本框基本是使用textOut),只要HOOK住这个这些函数,就可以完成我们相应的功能了。目前我使用的是detours库:

该方法使用比较简单,比如;

static BOOL(WINAPI *OLD_DrawTextExW)(HDC  hdc, LPWSTR  lpchText, int  cchText, LPRECT  lprc, UINT   dwDTFormat, LPDRAWTEXTPARAMS lpDTParams) = DrawTextExW;
int WINAPI MyDrawTextExW(HDC  hdc, LPWSTR  lpchText, int  cchText, LPRECT  lprc, UINT   dwDTFormat, LPDRAWTEXTPARAMS lpDTParams);

然后在初始化那里调用下面代码,

DetourAttach(&(PVOID&)OLD_DrawTextExW, MyDrawTextExW);

当系统每次调用DrawTextExW的时候就会进入我们写的函数MyDrawTextExW。该方法只能对本进程有效,不能HOOK住其它进程里面的东西,如果想HOOK住其它进程里面的函数,那么我们需要进行远程注入,需要调用CreateRemoteThreadEx或者CreateRemoteThread进行远程注入,只要注入到其它进程里面就可以拦截我们想要的API了。最后我们通过管道或者一些通信手段将我们想要的信息发出来即可

远程注入的方法参考 http://blog.csdn.net/xiaocaiju/article/details/7668473


至于屏幕取词,原理更加简单,首先先注册一个粘贴板事件,调用 SetClipboardViewer (参加MSDN),然后再通过鼠标钩子拦截鼠标按下以及鼠标弹起时的位置,模拟CTRL + C的按键,发出去就可以了,

keyAction(VK_CONTROL, 1);keyAction('C', 1);keyAction('C', 0);keyAction(VK_CONTROL, 0);

当收到粘贴板事件后,通过处理粘贴板里面的数据进行相关操作即可




原创粉丝点击