版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理质量敏感指标:质量改进的评估与反馈
- 眼底荧光造影术后观察与护理
- 英华某中学英语课外阅读活动实施方案
- 湖南省衡阳市2026年中考第二次模拟考试数学试题附答案
- 2026年交通运输企业范围3排放核算:上下游运输与分销
- 2026北师大版数学八年级下册第6章平行四边形2 平行四边形的判定第2课时 平行四边形的判定定理3教案
- 2025年前台服务考核训练卷
- 2025年前台服务技巧考核卷
- 2026年AI手机对原有App生态影响产业生态从封闭向开放重构
- 2026年能源及电力行业碳核算软件平台选型与应用案例
- 批判性思维与创新思维
- 绿植花卉租摆及园林养护服务 投标方案(技术方案)
- 小肠切除术护理查房课件
- 学生编著:《雷雨》剧本
- 儿童生长监测和健康检查课件
- 7我们的衣食之源- 白白的大米哪里来 (教案)部编版道德与法治四年级下册
- 肠内营养的并发症及其防治
- 雷火灸教学课件
- 联合用药与药物相互作用
- 集团投资发展部制度
- 《电视摄像教程》课件第6章
评论
0/150
提交评论