其实呢。这个重中之重是找对基址= =。源码么纯粹YY。

这个小外挂实现了各种淫荡的功能。比如把所有的动物换成相同的。

还有更加淫荡的直接加分功能。= =纯粹是蛋疼。

unit Unit1;interface
{程序:Michael J Scofieldhttp://blog.csdn.net/MichaelJScofield2010.04.272010.05.08:今天找到了游戏第一个座位基址,加上.PS:今天看了韩国的《婚纱》。
}usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)mmoChess: TMemo;btnReadChessInfo: TButton;btnShowChess: TButton;btnEditValue: TButton;btnChangeOne: TButton;btnAotoChange: TButton;tmrAutoKill: TTimer;Timer1: TTimer;btnAddSc: TButton;edtSc: TEdit;procedure btnReadChessInfoClick(Sender: TObject);procedure btnShowChessClick(Sender: TObject);procedure btnEditValueClick(Sender: TObject);procedure btnChangeOneClick(Sender: TObject);procedure tmrAutoKillTimer(Sender: TObject);procedure btnAotoChangeClick(Sender: TObject);procedure Timer1Timer(Sender: TObject);procedure btnAddScClick(Sender: TObject);private{ So boring  }public{ (*^__^*)  }end;typeTChess       = Array[1..8,1..160] of Byte; //定义棋盘数组TChangePoint = Array[1..2] of TPoint; //可改变坐标constMOUSE_RIGHTCLICK = 2; //鼠标右键GameCaption      = 'Asphyre - massive particle effects'; //窗口标题AppClassName     = 'TMainForm'; //窗口类ChessPointer     = $488BE0;  //棋盘基址  [[488BE0]+68]+32CtypeTGameChess = classpGameBase: Pointer;pChessman: Pointer;pTips: Pointer;pMark: Pointer;ChessData:TChess; //棋盘数据privatepublicend;varForm1: TForm1;ChessData:TChess; //棋盘数据{获取真实基址}function GetBase:Pointer;{读取棋盘数组}function ReadChessData:TChess;{改变值}procedure ChangeValue(Value:Integer);{检查是否可以交换}function ICanFind3Chessman(ChessData:TChess):Boolean;{交换棋子}procedure ChangeChessman(Pa,Pb:TPoint);{获取可改变坐标}function GetPoint:TChangePoint;{消除一个}procedure KillOne;{开始游戏}procedure StartGame;implementation{$R *.dfm}{转换名字}
function WhatIsit(Plug:Integer):string;
beginResult := 'X';case plug of0:Result := '蛙';1:Result := '鸡';2:Result := '猫';3:Result := '熊';4:Result := '狗';5:Result := '牛';6:Result := '猴';end;
end;{获取真实基址}
function GetBase:Pointer;
varhGame,hProcess:THandle;dwPID,dwRead:DWORD;ChessBase: Integer;
beginResult := nil;hGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginGetWindowThreadProcessId(hGame,dwPID);if dwPID <> 0 thenbeginhProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,dwPID);//[[488BE0]+68]+32CReadProcessMemory(hProcess,Pointer(ChessPointer),@ChessBase,4,dwRead); //我们读取指针 4字节够了ReadProcessMemory(hProcess,Pointer(ChessBase+$68),@ChessBase,4,dwRead);CloseHandle(hProcess);Result := Pointer(ChessBase+$32C);end;end;
end;{读取棋盘数组}
function ReadChessData:TChess;
varhGame,hProcess:THandle;dwPID,dwRead:DWORD;ChessXY:TChess;
beginhGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginGetWindowThreadProcessId(hGame,dwPID);if dwPID <> 0 thenbeginhProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,dwPID);ReadProcessMemory(hProcess,GetBase,@ChessXY,SizeOf(TChess),dwRead);CloseHandle(hProcess);Result := ChessXY;end;end;CloseHandle(hGame);
end;{修改提示}
procedure TForm1.btnReadChessInfoClick(Sender: TObject);
varhGame,hProcess: THandle;dwPID,dwRead: DWORD;TipsCount: Integer;Tips,ScanCode: Byte;
beginStartGame;hGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginGetWindowThreadProcessId(hGame,dwPID);if dwPID <> 0 thenbeginhProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,dwPID);//[[488BE0]+68]+A30ReadProcessMemory(hProcess,Pointer(ChessPointer),@TipsCount,4,dwRead); //我们读取指针 4字节够了ReadProcessMemory(hProcess,Pointer(TipsCount+$68),@TipsCount,4,dwRead);ReadProcessMemory(hProcess,Pointer(TipsCount+$A30),@Tips,SizeOf(Byte),dwRead);Tips := Tips + 1;WriteProcessMemory(hProcess,Pointer(TipsCount+$A30),@Tips,SizeOf(Tips),dwRead);ScanCode := MapVirtualKey(VK_F1,0);keybd_event(VK_F1,ScanCode,KEYEVENTF_EXTENDEDKEY,0);keybd_event(VK_F1,ScanCode,KEYEVENTF_KEYUP,0);CloseHandle(hProcess);end;end;CloseHandle(hGame);
end;{读取棋盘信息}
procedure TForm1.btnShowChessClick(Sender: TObject);
varChessXY:TChess;x,y:Integer;ChessLine:string;
beginChessXY := ReadChessData;mmoChess.Lines.Add('#######################');for y:=1 to 8 dobeginChessLine := '#';for x:=1 to 8 dobeginChessLine := ChessLine + WhatIsit(ChessXY[x][(y-1)*20+1])+'#';end;mmoChess.Lines.Add(ChessLine);end;mmoChess.Lines.Add('#######################');
end;{改变值}
procedure ChangeValue(Value:Integer);
varhGame,hProcess:THandle;dwPID,dwRead:DWORD;ChessXY:TChess;x,y:Integer;
beginhGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginGetWindowThreadProcessId(hGame,dwPID);if dwPID <> 0 thenbeginhProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,dwPID);ReadProcessMemory(hProcess,GetBase,@ChessXY,SizeOf(ChessXY),dwRead);for y:=1 to 8 dobeginfor x:=1 to 8 dobeginChessXY[x][(y-1)*20+1] := Value;end;end;WriteProcessMemory(hProcess,GetBase,@ChessXY,SizeOf(ChessXY),dwRead);CloseHandle(hProcess);end;end;
end;{改成熊猫}
procedure TForm1.btnEditValueClick(Sender: TObject);
beginChangeValue(3);
end;{交换棋子}
procedure ChangeChessman(Pa,Pb:TPoint);
varhGame:THandle;ClickFocus:DWORD;p1,p2:TPoint;
beginhGame:=Findwindow(AppClassName,GameCaption);p1.X := 37 + 48 * Pa.X - 24;p1.Y := 125 + 48 * Pa.Y - 24;p2.X := 37 + 48 * Pb.X - 24;p2.Y := 125 + 48 * Pb.Y - 24;ClickFocus := p1.X + p1.Y shl 16;SendMessage(hGame,WM_LBUTTONDOWN,0,ClickFocus);sendMessage(hGame,WM_LBUTTONUP, 0,ClickFocus);ClickFocus := p2.X + p2.Y shl 16;SendMessage(hGame,WM_LBUTTONDOWN,0,ClickFocus);sendMessage(hGame,WM_LBUTTONUP,0,ClickFocus);
end;{检查是否可以交换}
function ICanFind3Chessman(ChessData:TChess):Boolean;
vari,X,Y:Integer;
beginResult := False;for Y:=1 to 8 dobegini := 1;for X:=1 to 7 dobeginif (ChessData[X][(Y-1)*20+1])=(ChessData[X+1][(Y-1)*20+1]) then  //横坐标 相邻检查begini := i + 1;if i >= 3 thenbeginResult := True;Exit;end;endelsebegini := 1;end;end;end;for X:=1 to 8 do //纵坐标begini := 1;for Y:=1 to 7 dobeginif (ChessData[X][(Y-1)*20+1])=(ChessData[X][Y*20+1]) thenbegini := 1;if i >= 3 thenbeginResult := True;Exit;end;endelsebegini := 1;end;end;end;
end;{获取可改变坐标}
function GetPoint:TChangePoint;
varX,Y:Integer;
beginfor X:=1 to 8 dobeginfor Y:=1 to 7 do //因为第八位没有相邻棋子了beginChessData := ReadChessData;ChessData[X][(Y-1)*20+1] := ChessData[X][(Y-1)*20+1] + ChessData[X][Y*20+1];ChessData[X][Y*20+1] := ChessData[X][(Y-1)*20+1] - ChessData[X][Y*20+1];ChessData[X][(Y-1)*20+1] := ChessData[X][(Y-1)*20+1] - ChessData[X][Y*20+1];if ICanFind3Chessman(ChessData) thenbeginResult[1].X := X;Result[1].Y := Y;Result[2].X := X;Result[2].Y := Y + 1;Exit;end;end;end;for Y:=1 to 8 dobeginfor X:=1 to 7 dobeginChessData := ReadChessData;ChessData[X][(Y-1)*20+1] := ChessData[X][(Y-1)*20+1] + ChessData[X+1][(Y-1)*20+1];ChessData[X+1][(Y-1)*20+1] := ChessData[X][(Y-1)*20+1] - ChessData[X+1][(Y-1)*20+1];ChessData[X][(Y-1)*20+1] := ChessData[X][(Y-1)*20+1] - ChessData[X+1][(Y-1)*20+1];if ICanFind3Chessman(ChessData) thenbeginResult[1].X := X;Result[1].Y := Y;Result[2].X := X + 1;Result[2].Y := Y;Exit;end;end;end;
end;{消除一个}
procedure KillOne;
varChangePoint:TChangePoint;
beginChangePoint := GetPoint;ChangeChessman(ChangePoint[1],ChangePoint[2]);
end;procedure TForm1.btnChangeOneClick(Sender: TObject);
beginStartGame;KillOne;
end;{每2秒钟消除一个}
procedure TForm1.tmrAutoKillTimer(Sender: TObject);
beginKillOne;
end;{开始游戏}
procedure StartGame;
varhGame:THandle;
beginhGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginSetForegroundWindow(hGame);//设置窗体置顶SendMessage(hGame,WM_LBUTTONDOWN,1,31195597);//$01DC01BBSendMessage(hGame,WM_LBUTTONUP,1,31195597);end;
end;{启动自动清除}
procedure TForm1.btnAotoChangeClick(Sender: TObject);
beginif btnAotoChange.Caption = '自动消除' thenbeginbtnAotoChange.Caption := '停止';StartGame;tmrAutoKill.Enabled := True;endelse if btnAotoChange.Caption = '停止' thenbeginbtnAotoChange.Caption := '自动消除';tmrAutoKill.Enabled := False;end;
end;{截获右键}
procedure TForm1.Timer1Timer(Sender: TObject);
beginRandomize;if GetAsyncKeyState(MOUSE_RIGHTCLICK)<>0 then beginChangeValue(Random(6));end;
end;{加分}
procedure TForm1.btnAddScClick(Sender: TObject);
varhGame,hProcess: THandle;dwPID,dwRead: DWORD;TipsCount,Source: Integer;
beginStartGame;hGame:=Findwindow(AppClassName,GameCaption);if hGame <> 0 thenbeginGetWindowThreadProcessId(hGame,dwPID);if dwPID <> 0 thenbeginhProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,dwPID);//[[488BE0]+68]+AC4 分数基址ReadProcessMemory(hProcess,Pointer(ChessPointer),@TipsCount,4,dwRead);ReadProcessMemory(hProcess,Pointer(TipsCount+$68),@TipsCount,4,dwRead);Source := StrToInt(edtSc.Text);WriteProcessMemory(hProcess,Pointer(TipsCount+$AC4),@Source,SizeOf(Source),dwRead);CloseHandle(hProcess);end;end;CloseHandle(hGame);
end;end.

2010年的外挂小作品 - QQ对对碰单机版外挂相关推荐

  1. QQ游戏外挂制作教程 (对对碰)

    这些日子,QQ游戏外挂是风光了一阵.俄罗斯方块,连连看,对对碰这些游戏的外挂层出不穷.其实这一类外挂的原理大体都是一样的.下面我就以QQ游戏对对碰外挂作为例子阐述一下QQ外挂的制作原理.       ...

  2. ~QQ新版对对碰游戏外挂的制作方法~

    这段时间休假在家,无聊的时候玩了会qq的对对碰游戏,以前用过网友阿东的qq对对碰外挂,但是阿东的外挂在对对碰游戏改版后好像不好使了,正好自己也想重新写一个,于是开始动手. 一.思路 1.获取游戏窗体句 ...

  3. 教你用VC6做QQ对对碰外挂程序

    前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...

  4. VC6做QQ对对碰外挂程序

    前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...

  5. 用VC6做QQ对对碰外挂程序

    前段时间跟以前的同事玩QQ游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了出来 ...

  6. 刚写的QQ对对碰外挂

    新写了一个QQ对对碰游戏的外挂.支持NT系列系统,在XP, Win7系统都测试过可运行. 打开游戏后,使用本外挂,点开始挂机后可以自动进行游戏,自己可以进行做别的操作.外挂会自动智能判断一局游戏是否己 ...

  7. 基于C#实现QQ对对碰外挂 主要讲思路(原创)有更新

    0.首先还是先展示一下运行效果 1.做外挂的起因 玩过几次QQ对对碰游戏,感觉挺好玩.玩着玩着实然心血来潮,打算做一个外挂出现.简单想了一下,感觉可以实现:).然后就决定把它做出来.带着兴趣带着好奇心 ...

  8. vc6做对对碰外挂原理

    前段时间跟以前的同事玩 QQ 游戏对对碰,结果输的好惨,后来在网上看到了有对对碰的外挂,但还需要注册,就考虑既然别人可以写出来,我为什么就不能写出来呢?于是花了一个下午的时间仔细研究了一下,把外挂写了 ...

  9. 对对碰-第11届蓝桥杯Scratch省赛真题第6题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第56讲. 第11届蓝桥杯青少年组省赛原定于2020年3月7日举行,因疫情延期到2020年6 ...

最新文章

  1. c语言编程题餐饮服务打分,求详细分析C语言题餐饮服务质量调查打分题和答案..._质量员考试_帮考网...
  2. 手把手教你学Kotlin (1): JetBrains的Kotlin Educational Tool下载、安装和 Kotlin Koans的安装和使用
  3. PowerDesigner使用教程【转】
  4. 授权服务框架Spring Authorization Server的过滤器链
  5. 按阅读习惯来高效排列字符串的脚本
  6. win10下使用wget
  7. 不能将参数转化为lparam_反渗透纯水机是将自来水直接转化为超纯水的装置
  8. 拾趣——ios::sync_with_stdio(false)详解(提高代码运算速度)
  9. 计算机e盘拒绝访问,电脑中的D盘与E盘拒绝访问是为什么?
  10. 如何获取.then的返回值_仅仅知道如何终止XHR请求,或许对你来说是不够的!
  11. jsp向servlet传输数据
  12. iOS精品源码,GHConsole图片浏览器圆形进度条音视频传输连击礼物弹出动画 1
  13. php英文书籍在线,php英语四级在线练习系统
  14. 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
  15. 王道考研操作系统同步与互斥(王道大题详解)
  16. JDK1.8下载安装(Windows版)
  17. 【ArcGIS风暴】中国756个气象台站分布Shapefile数据下载
  18. 关于Intel显卡控制面板导致快捷键失灵的解决方法
  19. C语言中文网学习进度
  20. Camera两种快门方式区别

热门文章

  1. 微信群高效拉人进群有哪些方法?
  2. ps读写ddr3里面的数据 zynq_ZYNQ_PL与PS的DDR交互
  3. 蓝牙人机接口设备协议(HID)概念以及封包格式介绍
  4. 云计算的五大技术点+背景介绍
  5. 为什么NBA2kol2显示游戏服务器,nba2kol2怎么晃人?nba2kol2晃人方法介绍
  6. 知识图谱2-知识表示
  7. Web开发技术——豪华阵容 442阵型
  8. Android程式码怎么添加按钮,Android,UI 在程式中即時加上其他的UI?|?柯博文 Powen Ko...
  9. log4j简单配置总结
  10. hjson的使用,一个配置文件神器