C#读写内存也不差!(发布C#编写的<植物大战僵尸>作弊器源码)
来源:互联网 发布:ps mac破解版 百度云 编辑:程序博客网 时间:2024/05/18 00:15
最近闲来无事发现周围的朋友都在玩《植物大战僵尸》的游戏!于是动了制作这游戏工具的念头!虽然在网上同类工具很多 但是用C#写的我几乎看不到!所以我想用C#写一个!
首先用CE或者OD或者其他反汇编工具找出游戏的内存基址!
游戏内存基址:base = 0x006A9EC0
游戏阳光地址:[base+0x768]+0x5560
游戏金钱地址:[base+0x82C]+0x28
游戏关卡地址:[base+0x82C]+0x24 //关卡如:A-B 实际值为:(A-1)×10+B
至于如何获取这些地址不在我们这论坛研究的范围中!
对了我是用工具vs2008编写的!260398224
新建窗体:
下面这个类是整个工具的核心
首先用CE或者OD或者其他反汇编工具找出游戏的内存基址!
游戏内存基址:base = 0x006A9EC0
游戏阳光地址:[base+0x768]+0x5560
游戏金钱地址:[base+0x82C]+0x28
游戏关卡地址:[base+0x82C]+0x24 //关卡如:A-B 实际值为:(A-1)×10+B
至于如何获取这些地址不在我们这论坛研究的范围中!
对了我是用工具vs2008编写的!260398224
新建窗体:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
using
System;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
namespace
PlantsVsZombiesTool
{
/// <summary>
///
/// </summary>
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) == 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
;
btnGet.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
btnMoney_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, EventArgs 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, 0x1869F);
//写入数据到地址(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 = ReadMemoryValue(address);
address = address + 0x24;
int
lev = 1;
try
{
lev =
int
.Parse(txtLev.Text.Trim());
}
catch
{
MessageBox.Show(
"输入的关卡格式不真确!默认设置为1"
);
}
WriteMemory(address, lev);
}
//读取制定内存中的值
public
int
ReadMemoryValue(
int
baseAdd)
{
return
Helper.ReadMemoryValue(baseAdd, processName);
}
//将值写入指定内存中
public
void
WriteMemory(
int
baseAdd,
int
value)
{
Helper.WriteMemoryValue(baseAdd, processName, value);
}
private
int
baseAddress = 0x006A9EC0;
//游戏内存基址
private
string
processName =
"PlantsVsZombies"
;
//游戏进程名字
}
}
下面这个类是整个工具的核心
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using
System;
using
System.Text;
using
System.Diagnostics;
using
System.Runtime.InteropServices;
namespace
PlantsVsZombiesTool
{
public
abstract
class
Helper
{
[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 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 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)
{
if
(p.MainWindowTitle.IndexOf(windowTitle) != -1)
{
rs = p.Id;
break
;
}
}
return
rs;
}
//根据进程名获取PID
public
static
int
GetPidByProcessName(
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)
{
if
(p.MainWindowTitle.IndexOf(title) != -1)
{
return
p.MainWindowHandle;
}
}
return
IntPtr.Zero;
}
//读取内存中的值
public
static
int
ReadMemoryValue(
int
baseAddress,
string
processName)
{
try
{
byte
[] buffer =
new
byte
[4];
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,
string
processName,
int
value)
{
IntPtr hProcess = OpenProcess(0x1F0FFF,
false
, GetPidByProcessName(processName));
//0x1F0FFF 最高权限
WriteProcessMemory(hProcess, (IntPtr)baseAddress,
new
int
[] { value }, 4, IntPtr.Zero);
CloseHandle(hProcess);
}
}
}
- C#读写内存也不差!(发布C#编写的<植物大战僵尸>作弊器源码)
- C#读写内存原来也不差!(发布C#编写的《植物大战僵尸》作弊器源码)希望朋友们多来捧捧场!
- C#读写内存也不差!(发布C#编写的作弊器源码)
- C#读写内存也不差!(发布C#编写的作弊器源码
- C#编写植物大战僵尸外挂
- C#读写内存也不差
- C#编写的作弊器源码
- 植物大战僵尸中文版修改器源码
- 植物大战僵尸HTML5源码
- 植物大战僵尸HTML5源码
- C#实现植物大战僵尸修改阳光数值
- javase版的植物大战僵尸联机版送出源码
- 植物大战僵尸修改器
- 植物大战僵尸金钱修改汇编源码
- 植物大战僵尸v1.2---外挂源码
- Android植物大战僵尸附源码
- cocos2d-x植物大战僵尸(1) (地图的加载)
- 从《植物大战僵尸》的成功谈起
- mysql简易安装server端+客户端
- Linux内核DMA机制
- 让注册表修改快速生效
- 学习TI DVSDK过程记录(一):视频数据从哪里来到哪里去
- 更新的java代码
- C#读写内存也不差!(发布C#编写的<植物大战僵尸>作弊器源码)
- SQLITE 小型数据库配置与使用
- live555中关于mpeg4的处理
- 结构型设计模式
- MinGW下使用STL出现诡异的运行错误
- js简单的文本编辑器
- jquery 输入框 根据输入内容检索 下拉提示
- 地球人已经无法阻止人类的智慧了
- MIPI接口clock导致开机概率性重启