C#读写内存,编写《植物大战僵尸》外挂_第1页
C#读写内存,编写《植物大战僵尸》外挂_第2页
C#读写内存,编写《植物大战僵尸》外挂_第3页
C#读写内存,编写《植物大战僵尸》外挂_第4页
C#读写内存,编写《植物大战僵尸》外挂_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、最近闲来无事发现周围的朋友都在玩植物大战僵尸的游戏!于是动了制作这游戏工具的念头!虽然在网上同类工具很多 但是用C#写的我几乎看不到!所以我想用C#写一个! 首先用CE或者OD或者其他反汇编工具找出游戏的内存基址! 游戏内存基址:base = 0x006A9EC0 游戏阳光地址:base+0x768+0x5560 游戏金钱地址:base+0x82C+0x28 游戏关卡地址:base+0x82C+0x24 /关卡如:A-B 实际值为:(A-1)10B至于如何获取这些地址不在我们这论坛研究的范围中!对了我是用工具vs2008编写的!新建窗体:C# codeusing System;using Sy

2、stem.Drawing;using System.Text;usingnamespace PlantsVsZombiesTool / / / public partial class Form1 : Form public Form1() InitializeComponent(); private void Form1_Load(object sender, EventArgs e) /启动无线阳光 private void btnGet_Click(object sender, EventArgs e) if (Helper.GetPidByProcessName(processName

3、) = 0) MessageBox.Show(哥们启用之前游戏总该运行吧!); return; if (btnGet.Text = 启用-阳光无限) timer1.Enabled = true; btnGet.Text = 关闭-阳光无限; else timer1.Enabled = false; btnGet.Text = 启用-阳光无限; private void timer1_Tick(object sender, EventArgs e) if (Helper.GetPidByProcessName(processName) = 0) timer1.Enabled = false; b

4、tnGet.Text = 启用-阳光无限; int address = ReadMemoryValue(baseAddress); /读取基址(该地址不会改变) address = address + 0x768; /获取2级地址 address = ReadMemoryValue(address); address = address + 0x5560; /获取存放阳光数值的地址 WriteMemory(address, 0x1869F); /写入数据到地址(0x1869F表示99999) timer1.Interval = 1000; /启动无线金钱 private void btnMon

5、ey_Click(object sender, EventArgs e) if (Helper.GetPidByProcessName(processName) = 0) MessageBox.Show(哥们启用之前游戏总该运行吧!); return; if (btnMoney.Text = 启用-金钱无限) timer2.Enabled = true; btnMoney.Text = 关闭-金钱无限; else timer2.Enabled = false; btnMoney.Text = 启用-金钱无限; private void timer2_Tick(object sender, Ev

6、entArgs e) if (Helper.GetPidByProcessName(processName) = 0) timer2.Enabled = false; btnMoney.Text = 启用-金钱无限; int address = ReadMemoryValue(baseAddress); /读取基址(该地址不会改变) address = address + 0x82C; /获取2级地址 address = ReadMemoryValue(address); address = address + 0x28; /得到金钱地址 WriteMemory(address, 0x1869

7、F); /写入数据到地址(0x1869F表示99999) timer2.Interval = 1000; private void btnGo_Click(object sender, EventArgs e) if (Helper.GetPidByProcessName(processName) = 0) MessageBox.Show(哥们启用之前游戏总该运行吧!); return; int address = ReadMemoryValue(baseAddress); /读取基址(该地址不会改变) address = address + 0x82C; /获取2级地址 address =

8、ReadMemoryValue(address); address = address + 0x24; int lev = 1; try lev = int catch MessageBox.Show(输入的关卡格式不真确!默认设置为1); WriteMemory(address, lev); /读取制定内存中的值 public int ReadMemoryValue(int baseAdd) return Helper.ReadMemoryValue(baseAdd, processName); /将值写入指定内存中 public void WriteMemory(int baseAdd,

9、int value) Helper.WriteMemoryValue(baseAdd, processName, value); private int baseAddress = 0x006A9EC0; /游戏内存基址 private string processName = PlantsVsZombies; /游戏进程名字 下面这个类是整个工具的核心C# codeusing System;using System.Text;using System.Diagnostics;usingnamespace PlantsVsZombiesTool public abstract class He

10、lper DllImportAttribute(kernel32.dll, EntryPoint = ReadProcessMemory) public static extern bool ReadProcessMemory ( IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, IntPtr lpNumberOfBytesRead ); DllImportAttribute(kernel32.dll, EntryPoint = OpenProcess) public static extern IntPtr

11、OpenProcess ( int dwDesiredAccess, bool bInheritHandle, int dwProcessId ); DllImport(kernel32.dll) private static extern void CloseHandle ( IntPtr hObject ); /写内存 DllImportAttribute(kernel32.dll, EntryPoint = WriteProcessMemory) public static extern bool WriteProcessMemory ( IntPtr hProcess, IntPtr

12、lpBaseAddress, int lpBuffer, int nSize, IntPtr lpNumberOfBytesWritten ); /获取窗体的进程标识ID public static int GetPid(string windowTitle) int rs = 0; Process arrayProcess = Process.GetProcesses(); foreach (Process p in arrayProcess) if1) rs = p.Id; break; return rs; /根据进程名获取PID public static int GetPidByPr

13、ocessName(string processName) Process arrayProcess = Process.GetProcessesByName(processName); foreach (Process p in arrayProcess) return p.Id; return 0; /根据窗体标题查找窗口句柄(支持模糊匹配) public static IntPtr FindWindow(string title) Process ps = Process.GetProcesses(); foreach (Process p in ps) if1) return p.Ma

14、inWindowHandle; return IntPtr.Zero; /读取内存中的值 public static int ReadMemoryValue(int baseAddress,string processName) try byte buffer = new byte4; IntPtr byteAddress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, 0); /获取缓冲区地址 IntPtr hProcess = OpenProcess(0x1F0FFF, false, GetPidByProcessName(processName); ReadProcessMemory(hProcess, (IntPtr)baseAddress, byteAddress, 4, IntPtr.Zero); /将制定内存中的值读入缓冲区 CloseHandle(hProcess); return Marshal.ReadInt32(byteAddress); catch return 0; /将值写入指定内存地址中 public static void WriteMemoryValue(int baseAddress,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论