您的位置:首页 > 其它

QQHelper:QQ大家来找茬 辅助工具 外挂

2012-09-26 10:07 176 查看
使用本辅助工具,要小心,别让人举报被封锁了游戏,呵呵~

前天,用VB6写了一个QQ游戏大家来找茬的辅助工具,可是,运行速度太慢了,等到出结果的时候,基本上游戏时间都用了三分之二以上了,所以没有什么实际的意义. 因此,我又用VC#重新写了一下,这样马马虎虎还可以用,原理是这样的: 先用红蜻蜓抓图精灵将QQ游戏大家来找茬的游戏窗口抓图保存成JPG图片,然后用程序读入这幅图片,并截取游戏中的两幅图片,在每隔0.5秒交替显示,这样的话,左右两幅图里面不同的地方就会闪烁,这是只要在游戏的图片上面点击下就可以了.

这么做的程序也只能称之为辅助工具,称不上外挂,所以不用担心会被腾讯发现或封锁. 以我的看法真正的游戏外挂的原理,应该这么做: 分析游戏的内存,找到这两幅图在内存中的地址,然后对内存中的图片数据做对比,最后使用HOOK来在有差异的地方模拟点击鼠标左键就可以了. 但是,这样的外挂也存在一个问题,一是要读取游戏的内存内容,很有可能被杀毒软件当作是木马等恶意程序,二是,这些图片很有可能是存储在腾讯的游戏服务器上的,而客户端在和服务端通讯的时候,仅仅是发送了鼠标相对于图片上的位置数据给服务器而已,然后服务器根据接收到的位置数据来判断,你是否找到了两幅图片不一样的地方.
这种情况的话,本地内存中就并没有图片的像素数据,就无从谈起来做对比了,此时,仍然需要通过截图来实现获取图片的数据.

【网通】点击这里下载程序 【电信、网通】点击这里下载源程序

【下载说明】

1、单击上面这个地址,打开下载页面。

2、点普通下载--等待30秒--点“下载”按钮--保存


演示视频地址:http://v.youku.com/v_show/id_XMjEyMDQ1NzQ0.html

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace QQHelper
{
public partial class frmMain : Form
{
private Bitmap wndBitmap = null;
private Bitmap leftBitmap = null;
private Bitmap rightBitmap = null;
private int width1 = 380;
private int height1 = 285;
private int x11 = 10;
private int y11 = 185;
private int x12 = 390;
private int y12 = 470;
private int a1 = 392+1;
private int width2 = 498;
private int height2 = 448;
private int x21 = 7;
private int y21 = 191;
private int x22 = 505;
private int y22 = 639;
private int a2 = 508+1;
private int ShowFlag = 0;
public frmMain()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (wndBitmap != null)
{
wndBitmap.Dispose();
wndBitmap = null;
}
SendKeys.Send("%{PRTSC}");
IDataObject iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Bitmap))
{
wndBitmap = (Bitmap)Clipboard.GetImage();
timer3.Enabled = true;
}
else
{
timer3.Enabled = false;
return;
}

}
private void timer2_Tick(object sender, EventArgs e)
{
if (ShowFlag == 0)
{
pictureBox1.Image = (Bitmap)leftBitmap;
ShowFlag = 1;
}
else
{
pictureBox1.Image = (Bitmap)rightBitmap;
ShowFlag = 0;
}
}
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (leftBitmap != null)
{
leftBitmap.Dispose();
leftBitmap = null;
}
if (rightBitmap != null)
{
rightBitmap.Dispose();
rightBitmap = null;
}
if (wndBitmap != null)
{
wndBitmap.Dispose();
wndBitmap = null;
}
}
private void frmMain_Load(object sender, EventArgs e)
{
}
private void timer3_Tick(object sender, EventArgs e)
{
if (wndBitmap == null) return;
if (wndBitmap.Width != 1024 && wndBitmap.Width != 800)
{
label1.Visible = true;
label1.Text = "请将游戏窗口打开,并不要在屏幕外!";
wndBitmap.Dispose();
wndBitmap = null;
return;
}
label1.Visible = false;
int w1 = 0, h1 = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0, a = 0;
if (wndBitmap.Width == 1024)
{
w1 = width2;
h1 = height2;
x1 = x21;
y1 = y21;
x2 = x22;
y2 = y22;
a = a2;
}
else
{
w1 = width1;
h1 = height1;
x1 = x11;
y1 = y11;
x2 = x12;
y2 = y12;
a = a1;
}
if (leftBitmap == null) leftBitmap = new Bitmap(w1, h1, PixelFormat.Format24bppRgb);
if (rightBitmap == null) rightBitmap = new Bitmap(w1, h1, PixelFormat.Format24bppRgb);
BitmapData wndBitmapData = wndBitmap.LockBits(new Rectangle(0, 0, wndBitmap.Width, wndBitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
BitmapData leftBitmapData = leftBitmap.LockBits(new Rectangle(0, 0, leftBitmap.Width, leftBitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
BitmapData rightBitmapData = rightBitmap.LockBits(new Rectangle(0, 0, rightBitmap.Width, rightBitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
unsafe
{
byte* ptrWnd = (byte*)wndBitmapData.Scan0.ToPointer();
byte* ptrlef = (byte*)leftBitmapData.Scan0.ToPointer();
byte* ptrRig = (byte*)rightBitmapData.Scan0.ToPointer();
int i = 0, j = 0;
for (i = y1; i < y2; i++)
{
for (j = x1; j < x2; j++)
{
*(ptrlef++) = *(ptrWnd + i * wndBitmapData.Stride + j * 3);
*(ptrlef++) = *(ptrWnd + i * wndBitmapData.Stride + j * 3 + 1);
*(ptrlef++) = *(ptrWnd + i * wndBitmapData.Stride + j * 3 + 2);
*(ptrRig++) = *(ptrWnd + i * wndBitmapData.Stride + (j + a) * 3);
*(ptrRig++) = *(ptrWnd + i * wndBitmapData.Stride + (j + a) * 3 + 1);
*(ptrRig++) = *(ptrWnd + i * wndBitmapData.Stride + (j + a) * 3 + 2);
}
ptrlef += leftBitmapData.Stride - leftBitmap.Width * 3;
ptrRig += rightBitmapData.Stride - rightBitmap.Width * 3;
}
wndBitmap.UnlockBits(wndBitmapData);
leftBitmap.UnlockBits(leftBitmapData);
rightBitmap.UnlockBits(rightBitmapData);
ptrWnd = null;
ptrlef = null;
ptrRig = null;
}
wndBitmap.Dispose();
wndBitmap = null;
}
}
}
【更多文章】

[原]SeeFiles:C#查看和修改文件或目录所有属性的工具
[原]《The C Programming Language》电子书下载
[原]PjCleanSystemTrash:C#清除系统盘垃圾
[原]ManageApps:C#读取Windows系统中的已经安装的程序并卸载软件
[原]Cls_Ini.cls:VB写的操作ini配置文件的类
[原]Hotkey.cs:为应用程序添加热键
[原]Hotkey.cs:为应用程序添加热键
[译]C#控制计算机的并口LPT
[译]在C# .NET2.0实现单实例应用程序
[原]《The C Programming Language》电子书下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: