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

使用本辅助工具,要小心,别让人举报被封锁了游戏,呵呵~

前天,用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;
        }
    }
}
【更多文章】
  1. [原]SeeFiles:C#查看和修改文件或目录所有属性的工具
  2. [原]《The C Programming Language》电子书下载
  3. [原]PjCleanSystemTrash:C#清除系统盘垃圾
  4. [原]ManageApps:C#读取Windows系统中的已经安装的程序并卸载软件
  5. [原]Cls_Ini.cls:VB写的操作ini配置文件的类
  6. [原]Hotkey.cs:为应用程序添加热键
  7. [原]Hotkey.cs:为应用程序添加热键
  8. [译]C#控制计算机的并口LPT
  9. [译]在C# .NET2.0实现单实例应用程序
  10. [原]《The C Programming Language》电子书下载

你可能感兴趣的:(游戏,timer,qq,object,null,工具)