您的位置:首页 > 其它

自己写的QQ美女找茬外挂

2013-08-09 22:07 183 查看
这里首先说一下原理:利用截屏的技术,讲当前QQ美女找茬的图片截屏下来,然后分析两幅图片相同位置的像素点,当两个点的差大于某个阀值时,将该点的颜色设置为红色。

下面根据源码具体讲解:

1.首先通过VC++的工具SPY++得到美女找茬窗口标题:“大家来找茬”,通过函数::FindWindow即可获得美女找茬窗口的句柄

hGame=::FindWindow(NULL,"大家来找茬");
2.接着我们就可以通过该句柄获得美女找茬窗口的大小和设备上下文:

RECT rect;
::GetWindowRect(hGame,&rect);
HDC hDC;
hDC=::GetDC(hGame);
3.通过设备上下文,我们呢可以将美女找茬窗口复制到一个内存位图中,方便我们对图片进行分析:

CDC dcQQ;
dcQQ.Attach(hDC);
CDC dcMem;
CBitmap bm;
dcMem.CreateCompatibleDC(&dcQQ);
bm.CreateCompatibleBitmap(&dcQQ,rect.right-rect.left,rect.bottom-rect.top);
dcMem.SelectObject(&bm);
dcMem.BitBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&dcQQ,0,0,SRCCOPY);
4.由于获得的图片包括了整个窗口,而我们只需要对图片部分进行分析,所以这里我通过SPY++查找到第一幅图片左上角、右上角和左下角相对于窗口的位置分别为(11 195)、(503 195)、(11 635),第二幅图假设相对于第一幅图的偏移为整个窗口宽度的一半(rect.right-rect.left)/2,实际在实验中发现实际的偏移为(rect.right-rect.left)/2-3.这样我们就可以得到图片的宽度:503-11=492,高度635-195=440.

5.两幅图片中相同位置的像素点y坐标相同,x坐标相差(rect.right-rect.left)/2-3,这样我们可以取得两幅图中对应位置的两点颜色并进行比较,若超过某个阀值,则将第一幅图该点颜色设置为红色

int width=503-11;
int height=635-195;
int www=(rect.right-rect.left)/2-3;

COLORREF *p1=new COLORREF[width*height];
COLORREF *p2=new COLORREF[width*height];

for (int i=0;i<height;++i)
{
for (int j=0;j<width;++j)
{
p1[i*width+j]=dcMem.GetPixel(11+j,i+195);
p2[i*width+j]=dcMem.GetPixel(11+j+www,i+195);

if ((p1[i*width+j]<=(p2[i*width+j]-50))||(p1[i*width+j]>=(p2[i*width+j]+50)))
{
dcMem.SetPixel(11+j,i+195,RGB(255,0,0));
}
}
}


6.获得软件视图的设备上下文pDC,便可将QQ美女找茬的图片显示到我们的软件中,并标记处两幅图片不同的位置。

pDC->BitBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&dcMem,0,0,SRCCOPY);


7.我们还可以继续将这个外挂完善,比如不在软件视图中标记不同点,而是在QQ美女找茬窗口中直接标记出来,注意,这里不能使用美女找茬窗口的设备上下文直接画图,因为这个窗口一直刷新,使用美女找茬窗口的设备上下文画图会闪烁,我猜测使用桌面设备上下文在美女找茬窗口上面画图效果应该会好一点,不过我还没有实验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: