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

 说到屏幕取词,就是通过拦截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);

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




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值