实例介绍
【实例简介】
这里有两个是我用C#写的游戏外挂,一款是风靡一时的植物大战僵尸,另一款是高中时候喜欢玩的游戏血战上海滩,源码里所说的游戏基址,要通过工具来查询,这个工具需要我们的程序员懂得一点点汇编才能够真正的应用它,如果不懂,就看看汇编的资料,不要一看到汇编就说难,不要被困难而吓倒,其实到了最后,你会觉得很值得,不仅丰富了你的知识,而且又收获了玩游戏时开外
【实例截图】
【核心代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace XZshanhai
{
public partial class Form1 : Form
{
#region 属性
private int baseAddress = 0x005DCFE4; //游戏内存基址
private string processName = "shanghai"; //游戏进程名字
#endregion
public Form1()
{
InitializeComponent();
}
//读取制定内存中的值
public int ReadMemoryValue(int baseAdd) //读取内存值
{
return Helper.ReadMemoryValue(baseAdd, processName);
}
//将值写入指定内存中
public void WriteMemory(int baseAdd, int value) //写入内存值
{
Helper.WriteMemoryValue(baseAdd, processName, value);
}
#region 武器事件
private void btLift_Click(object sender, EventArgs e) //生命
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btLift.Text.ToString() == "无限生命")
{
timer8.Enabled = true;
btLift.Text = "关闭无限生命";
}
else
{
timer8.Enabled = false;
btLift.Text = "无限生命";
}
}
private void btPistol_Click(object sender, EventArgs e) //手枪
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btPistol.Text.ToString() == "手枪")
{
timer1.Enabled = true;
btPistol.Text = "关闭手枪";
}
else
{
timer1.Enabled = false;
btPistol.Text = "手枪";
}
}
private void btRifle_Click(object sender, EventArgs e) //步枪
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btRifle.Text.ToString() == "步枪")
{
timer2.Enabled = true;
btRifle.Text = "关闭步枪";
//激活步枪
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x108; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer2.Enabled = false;
btRifle.Text = "步枪";
}
}
private void btSubmachine_Click(object sender, EventArgs e) //冲锋枪
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btSubmachine.Text.ToString() == "冲锋枪")
{
timer3.Enabled = true;
btSubmachine.Text = "关闭冲锋枪";
//激活冲锋枪
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x128; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer3.Enabled = false;
btSubmachine.Text = "冲锋枪";
}
}
private void btGrenade_Click(object sender, EventArgs e) //手榴弹
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btGrenade.Text.ToString() == "手榴弹")
{
timer4.Enabled = true;
btGrenade.Text = "关闭手榴弹";
//激活手榴弹
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x118; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer4.Enabled = false;
btGrenade.Text = "手榴弹";
}
}
private void btLMG_Click(object sender, EventArgs e) //轻机枪
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btLMG.Text.ToString() == "轻机枪")
{
timer5.Enabled = true;
btLMG.Text = "关闭轻机枪";
//激活轻机枪
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x158; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer5.Enabled = false;
btLMG.Text = "轻机枪";
}
}
private void btBazooka_Click(object sender, EventArgs e) //巴祖卡
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btBazooka.Text.ToString() == "巴祖卡")
{
timer6.Enabled = true;
btBazooka.Text = "关闭巴祖卡";
//激活巴祖卡
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x148; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer6.Enabled = false;
btBazooka.Text = "巴祖卡";
}
}
private void btMaximgun_Click(object sender, EventArgs e) //马克沁
{
if (Helper.GetPidByProcessName(processName) == 0)
{
MessageBox.Show("请先运行游戏!");
return;
}
if (btMaximgun.Text.ToString() == "马克沁")
{
timer7.Enabled = true;
btMaximgun.Text = "关闭马克沁";
//激活马克沁
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x138; //获取2级地址
WriteMemory(address, 0x1); //写入数据到地址
}
else
{
timer7.Enabled = false;
btMaximgun.Text = "马克沁";
}
}
#endregion
#region 写入内存值
private void timer8_Tick(object sender, EventArgs e) //生命
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0x174; //获取2级地址
WriteMemory(address, 0x64); //写入数据到地址(0x1869F表示99999)
}
private void timer1_Tick(object sender, EventArgs e) // 手枪
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec; //获取2级地址
WriteMemory(address, 0xA); //写入数据到地址(0x1869F表示99999)
}
private void timer2_Tick(object sender, EventArgs e) //步枪
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x10; //获取2级地址
WriteMemory(address, 0x5); //写入数据到地址(0x1869F表示99999)
}
private void timer3_Tick(object sender, EventArgs e) //冲锋枪
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x30; //获取2级地址
WriteMemory(address, 0x1E); //写入数据到地址(0x1869F表示99999)
}
private void timer4_Tick(object sender, EventArgs e) //手榴弹
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x20; //获取2级地址
WriteMemory(address, 0x5); //写入数据到地址(0x1869F表示99999)
}
private void timer5_Tick(object sender, EventArgs e) //机枪
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x60; //获取2级地址
WriteMemory(address, 0x1E); //写入数据到地址(0x1869F表示99999)
}
private void timer6_Tick(object sender, EventArgs e) //巴祖卡
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x50; //获取2级地址
WriteMemory(address, 0x8); //写入数据到地址(0x1869F表示99999)
}
private void timer7_Tick(object sender, EventArgs e) //马克沁
{
int address = ReadMemoryValue(baseAddress); //读取基址(该地址不会改变)
address = address 0xec 0x40; //获取2级地址
WriteMemory(address, 0xC8); //写入数据到地址(0x1869F表示99999)
}
#endregion
private void btClose_Click(object sender, EventArgs e) //关闭
{
this.Close();
}
#region 移动窗体
private Point startPoint = new Point(); //鼠标起点位置
private Point endPoint = new Point(); //鼠标移动后的位置
private bool move = false; //窗体是否移动
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
move = true;
startPoint.X = e.X;
startPoint.Y = e.Y;
}
else move = false;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (move == true)
{
endPoint.X = e.X;
endPoint.Y = e.Y;
int moveX = endPoint.X - startPoint.X;
int moveY = endPoint.Y - startPoint.Y;
this.Location = new Point(this.Location.X moveX, this.Location.Y moveY);
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
move = false;
}
else
move = true;
}
#endregion
#region 键盘勾子
//勾子管理类
private KeyboardHookLib _keyboardHook = null;
private void Form1_Load(object sender, EventArgs e)
{
//安装勾子
_keyboardHook = new KeyboardHookLib();
_keyboardHook.InstallHook(this.OnKeyPress);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//取消勾子
if (_keyboardHook != null) _keyboardHook.UninstallHook();
}
/// <summary>
/// 客户端键盘捕捉事件.
/// </summary>
/// <param name="hookStruct">由Hook程序发送的按键信息</param>
/// <param name="handle">是否拦截</param>
public void OnKeyPress(KeyboardHookLib.HookStruct hookStruct, out bool handle)
{
handle = false; //预设不拦截任何键
//截获F1
if (hookStruct.vkCode == (int)Keys.F1)
{
handle = true;
btPistol_Click(null, null);
}
}
#endregion
}
}
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论