[无聊]扫雷外挂(for win2000)

原创 2006年06月09日 12:58:00

终于有时间干些无聊的事情了.于是偶打开Delphi,在Form1上摆了一个按钮,命名为Button1(汗,多标准的名字),然后输入以下代码:

unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

const
  BOMB_MAP_MAX_SIZE = 32 * 24;
  ADDR_MAPHEIGHT    = $01005A68;
  ADDR_MAPWIDTH     = $010056F8;
  ADDR_BOMBMAP      = $01005720;

type

  TWinMineData = class
  private
    FData: PByteArray;
    FWidth: Integer;
    FHeight: Integer;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Init(AWnd: HWND);
    function GetAt(X, Y: Integer): Byte;
    property Width: Integer read FWidth;
    property Height: Integer read FHeight;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    function GetBlockPoint(AWnd: HWND; X, Y: Integer): TPoint;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Wnd: HWND;
  Data: TWinMineData;
  I, J: Integer;
  Pt: TPoint;
begin
  Wnd := FindWindow('扫雷', nil);
  if Wnd = 0 then ShowMessage('请先启动扫雷')
  else
  begin
    Data := TWinMineData.Create;
    try
      Data.Init(Wnd);
      for J := 0 to Data.Height - 1 do
      begin
        for I := 0 to Data.Width - 1 do
        begin
          Pt := GetBlockPoint(Wnd, I, J);
          if (Data.GetAt(I, J) and $80) <> 0 then
          begin
            PostMessage(Wnd, WM_RBUTTONDOWN, 0, MAKELPARAM(Pt.X, Pt.Y));
            PostMessage(Wnd, WM_RBUTTONUP, 0, MAKELPARAM(Pt.X, Pt.Y));
          end
          else
          begin
            PostMessage(Wnd, WM_LBUTTONDOWN, 0, MAKELPARAM(Pt.X, Pt.Y));
            PostMessage(Wnd, WM_LBUTTONUP, 0, MAKELPARAM(Pt.X, Pt.Y));
          end;
        end;
      end;
    finally
      FreeAndNil(Data);
    end;
  end;
end;

{ TWinMineData }

constructor TWinMineData.Create;
begin
  FData := AllocMem(BOMB_MAP_MAX_SIZE);
end;

destructor TWinMineData.Destroy;
begin
  FreeMem(FData);
  inherited;
end;

function TWinMineData.GetAt(X, Y: Integer): Byte;
begin
  Result := FData[Y * 32 + (X + 1)];
end;

procedure TWinMineData.Init(AWnd: HWND);
var
  ProcId: Cardinal;
  HProc: HMODULE;
  Readed: Cardinal;
begin
  ProcId := 0;
  GetWindowThreadProcessId(AWnd, ProcId);
  if ProcId = 0 then raise Exception.Create('process id get failed');
  HProc := OpenProcess(PROCESS_VM_READ, False, ProcId);
  try
    ReadProcessMemory(HProc, Pointer(ADDR_MAPWIDTH), @FWidth, 4, Readed);
    ReadProcessMemory(HProc, Pointer(ADDR_MAPHEIGHT), @FHeight, 4, Readed);
    ReadProcessMemory(HProc, Pointer(ADDR_BOMBMAP), FData, BOMB_MAP_MAX_SIZE, Readed);
  finally
    CloseHandle(HProc);
  end;
end;

function TForm1.GetBlockPoint(AWnd: HWND; X, Y: Integer): TPoint;
begin
  Result.X := X * 16 + 19;
  Result.Y := Y * 16 + 64;
end;

end.

于是偶也当了一回达淫-___-b 惭愧惭愧~~

这是运行后的截图

"扫雷外挂" 原理篇

1.我理解的外挂 其实我没有做过外挂,前阵子在玩"炉石传说",这游戏免费,每赢3局可以得到10金币,想做个外挂来挂着玩,无奈水平有限,只能从"扫雷外挂"做起了, =。= 外挂其实是不限语言的,当然...
  • fox64194167
  • fox64194167
  • 2014年04月08日 09:26
  • 6609

"扫雷外挂" 之C++ 程序篇

1.分析扫雷图像 下面的代码可以得到一个点的颜色,核心代码是GetPixel。 typedef struct _Color3B { BYTE r; BYTE g; BYTE b; } Co...
  • fox64194167
  • fox64194167
  • 2014年04月08日 09:25
  • 4578

扫雷外挂程序开发

1. 前言最近突然看到这篇博文: http://blog.csdn.net/zhyh1435589631/article/details/61927733,讲的是制作一个自动扫雷机器人,算法原理也讲清...
  • zhyh1435589631
  • zhyh1435589631
  • 2017年03月13日 22:59
  • 1108

C/C++之win98扫雷外挂基础篇

win98扫雷高级场基础版
  • qq78442761
  • qq78442761
  • 2016年11月23日 21:59
  • 2767

win7扫雷逆向调试

目标:找到可判断是否是雷的地址、雷区宽度高度地址
  • xfgryujk
  • xfgryujk
  • 2016年10月27日 19:10
  • 869

【我的程序】Minekiller——扫雷外挂

有天宿舍人无聊地玩起扫雷,被虐了无数次以后,突然问我,“哎,你能不能做个扫雷的外挂啊?”。   于是就有了这个东西。    原理是直接读扫雷进程的内存,有雷和没雷特征值不一样,然后sendmessag...
  • dogsaur
  • dogsaur
  • 2013年08月01日 00:24
  • 680

扫雷外挂制作

雷数的基址: 010056A4 开局消息:1FE 高级消息:20B WriteProcessMemory(hp,(LPVOID)0x10056A4 , &lei,4,NULL);//写入函数 自...
  • qq314777895
  • qq314777895
  • 2015年05月20日 09:17
  • 380

扫雷(java版)

首先说一下扫雷规则。 1.数字是几就表示此数字位置邻接的八个方向有几个地雷 2.鼠标右键单击一次标记此位置为地雷(插上一个小旗),再单击一次标记为? 3.鼠标左键单击某位置   如果这个位置上的数字为...
  • su20145104009
  • su20145104009
  • 2016年08月08日 16:12
  • 9736

python 写的扫雷游戏

#!/usr/bin/python #coding:utf-8 #python 写的扫雷游戏 import sys import random class MineSweeping(): ...
  • liuxingyu_21
  • liuxingyu_21
  • 2014年01月09日 16:34
  • 2983

【matlab编程】Matlab版扫雷

我发现有些人平常闲着的时候会玩window自带的游戏,其中最常见的就是扫雷和纸牌。本来想用matlab编写全自动扫雷程序用来作弊,可是后来发现扫雷问题是NP完全问题(正如:旅行商NP难问题一样不能被解...
  • tengweitw
  • tengweitw
  • 2014年03月01日 18:36
  • 4216
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[无聊]扫雷外挂(for win2000)
举报原因:
原因补充:

(最多只允许输入30个字)