C++&C#外挂(内存修改)
大学时候因为主修C#语言(当然现在做的是javaweb开发),那时在网上学了用C#做外挂的教程,外挂嘛,大家都懂的.这里只是低级的修改内存,不涉及到截获数据包.如果是欺骗服务器,修改服务器数据,那就难的多了.这里给出两个修改内存代码的例子,一个是C#的一个是C++的.C#做东西比较简单,但是运行需要.net环境.C++编译出来的exe执行文件就没有这多要求.查找基质和偏移量的方法大都是用CE,网上教程很多.这里只有简单的代码给大家参考
首先看看C#的,我封装了一个ECHelper.cs工具类,代码如下
//打开进程获取句柄
[DllImport("kernel32.dll", EntryPoint = "OpenProcess")]
public static extern IntPtr OpenProcess(int desiredAccess, bool heritHandle, int pocessID);//访问权限(16进制),是否继承句柄,进程ID
//关闭句柄
[DllImport("kernel32.dll", EntryPoint = "CloseHandle")]
public static extern void CloseHandle(IntPtr hObject);
//读取内存
[DllImport("kernel32.dll", EntryPoint = "ReadProcessMemory")]
public static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr baseadress, IntPtr buffer, int nsize, IntPtr bytesread);
//写入内存
[DllImport("kernel32.dll", EntryPoint = "WriteProcessMemory")]
public static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr baseadress, long[] buffer, int nSize, IntPtr byteswrite); //根据进程名获得PID
public static int GetPIDByProcessName(string name)
{
Process[] pros = Process.GetProcessesByName(name);
if (pros.Count() > )
{
return pros[].Id;
}
else
{
return ;
} }
public static int ReadMemoryValue(string name, IntPtr baseadress)
{
try
{
byte[] buffer = new byte[];
IntPtr bufferadress = Marshal.UnsafeAddrOfPinnedArrayElement(buffer, );
IntPtr hprocess = OpenProcess(0x1F0FFF, false, ECHelper.GetPIDByProcessName(name));
ReadProcessMemory(hprocess, baseadress, bufferadress, , IntPtr.Zero);
CloseHandle(hprocess);
return Marshal.ReadInt32(bufferadress);
}
catch
{
return ;
}
}
public static void WriteMemoryValue(string name, IntPtr baseadress, long value)
{
IntPtr hprocess = OpenProcess(0x1F0FFF, false, ECHelper.GetPIDByProcessName(name));
WriteProcessMemory(hprocess, baseadress, new long [] { value }, , IntPtr.Zero);
CloseHandle(hprocess);
}
调用方法如下
string name = "cstrike";
int baseadress = 0x025069BC;
private void btnShoot_Click(object sender, EventArgs e)
{
timShoot.Start();
} private void timShoot_Tick(object sender, EventArgs e)
{
timShoot.Interval = ;
int adress1 = ECHelper.ReadMemoryValue(name, (IntPtr)baseadress);
adress1 = adress1 + 0x7C;
int adress2 = ECHelper.ReadMemoryValue(name, (IntPtr)adress1);
adress2 = adress2 + 0x5EC;
int adress3 = ECHelper.ReadMemoryValue(name, (IntPtr)adress2);
adress3 = adress3 + 0xCC;
ECHelper.WriteMemoryValue(name, (IntPtr)adress3, 0x64); //cs子弹无线
}
这里是C#源码
下面看C++语言的
DWORD getLastError;
//1.根据窗口名获取窗口
HWND hWinmine = FindWindow(NULL,"Counter-Strike");
DWORD dwPID = ; //窗口进程标示
//2.根据窗口获取pid
GetWindowThreadProcessId(hWinmine, &dwPID);
if (dwPID == )
{
printf("获取PID失败\n");
return -;
}
//3.根据pid获取进程
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPID);
if (hProcess == NULL)
{
printf("进程打开失败\n");
getLastError = GetLastError();
return -;
} DWORD dwNum = , dwSize = ; //基址
DWORD CSBaseAddress = 0x025069BC;
//基址值
DWORD CSBaseAddressValue = ;
if ( == ReadProcessMemory(hProcess, (LPVOID)CSBaseAddress, &CSBaseAddressValue, sizeof(DWORD), &dwSize))
{
printf("静态址获取失败\n");
getLastError = GetLastError();
return -;
} //一级偏移
DWORD CSOffsetFirst = 0x7C;
//一级偏移值
DWORD CSOffsetFirstValue = ;
if ( == ReadProcessMemory(hProcess, (LPVOID)(CSBaseAddressValue + CSOffsetFirst), &CSOffsetFirstValue, sizeof(DWORD), &dwSize))
{
printf("一级偏移获取失败\n");
getLastError = GetLastError();
return -;
} //二级偏移
DWORD CSOffsetSecond = 0x5EC;
//二级偏移值
DWORD CSOffsetSecondValue = ;
if ( == ReadProcessMemory(hProcess, (LPVOID)(CSOffsetFirstValue + CSOffsetSecond), &CSOffsetSecondValue, sizeof(DWORD), &dwSize))
{
printf("二级偏移获取失败\n");
getLastError = GetLastError();
return -;
} //三级偏移
DWORD CSOffsetThird = 0xCC;
DWORD CSNum=; //这里是当前子弹值
if ( == ReadProcessMemory(hProcess, (LPVOID)(CSOffsetSecondValue + CSOffsetThird), &CSNum, sizeof(DWORD), &dwSize))
{
printf("三级偏移获取失败\n");
getLastError = GetLastError();
return -;
} int modifyCS;
printf("CSNum:%d\n", CSNum);
printf("输入你要修改后的值:");
scanf("%d", &modifyCS);
//更改值
WriteProcessMemory(hProcess, (LPVOID)(CSOffsetSecondValue + CSOffsetThird), &modifyCS, sizeof(DWORD), &dwSize); CloseHandle(hProcess); //关闭进程
system("pause"); //窗口停留
C++&C#外挂(内存修改)的更多相关文章
- (外挂破解)Cheat Engine(内存修改工具)V6.2中文版软件介绍
Heat Engine是一款内存修改编辑工具,Cheat Engine允许你修改你的游戏,所以你将总是赢.它包括16进制编辑,反汇编程序,内存查找工具.与同类修改工具相比,它具有强大的反汇编功能,且自 ...
- UWP游戏防内存修改器的方法
最近我一直在编写适用于Windows 10商店的游戏.这款游戏比较怕玩家用修改器改金钱,因为这种修改会导致某些内购失效并且损害公平性.于是我把自己见过的三种反修改器的方法给网友们介绍一下. 首先说明一 ...
- ce游戏内存修改器(Cheat Engine)
ce修改器(Cheat Engine)一款专门修改内存修改编辑的游戏工具它包括16进制编辑,反汇编程序,内存查找工具新版6.1 版的CE与6.0 最大的区别就是添加了修改器制作工具,比之前 5.6.1 ...
- oracle11g rac asm 实例内存修改
ASM实例内存修改 memory_max_target(它为静态参数,修改完成后需要重启实例) memory_target(它为动态参数,不需要重启实例) SQL> select name,is ...
- 只需要一点点C++基础,新手也可以制作单机游戏内存修改器
声明:本文只是为了初学C++的,能够做出一些实用的东西,跳出管理系统的束缚,提升学习的兴趣,在这里选取了单机游戏,请不要尝试在线游戏,违发而已未必可行.序:首先我们需要一个Qt+VS环境Qt从http ...
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- [20180604]在内存修改数据(bbed).txt
[20180604]在内存修改数据(bbed).txt --//以前曾经做过在内存修改数据,通过oradebug poke命令修改内存信息,相关链接:--//http://blog.itpub.net ...
- Tomcat 安全设置 及 内存修改
1.删除%tomcatRoot%/webapps目录下的examples.docs文件夹 2.修改%tomcatRoot%/conf/tomcat-users.xml <?xml version ...
- Tomcat 启动内存修改
内存修改文件 Windows 文件 /bin/catalina.bat Linux 文件 /bin/catalina.sh 方法一 # 设置参数 JAVA_OPTS='-Xms[初始化内存大小] -X ...
随机推荐
- Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(一)——Maven,Tomcat,Spring集成
1. 创建Maven Web工程 (1) 磁盘上创建Maven工程所需要的文件夹结构如下: (2) 在与src同级目录中创建pom.xml文件: <project xm ...
- 让360双核浏览器默认极速模式,避免采用IE模式无法正常访问html5网页的解决办法
让360双核浏览器默认极速模式,避免采用IE模式无法正常访问html5网页的解决办法 用Meta标签代码让360双核浏览器默认极速模式不是兼容模式<meta name="rendere ...
- JavaScript甜点(1)
甜点1:什么是脚本语言? 脚本语言是由传统编程语言简化而来的,它与传统的编程语言既有很多相似之处,又有很多的不同之处.脚本语言的最显著的特点是:首先它不需要编译成二进制,以文本的形式存在:其次就是脚本 ...
- Python3 判断文件和文件夹是否存在、创建文件夹
Python3 判断文件和文件夹是否存在.创建文件夹 python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件: 1) os.mknod(“test.txt”) 创建空文件 ...
- 设置redis访问密码
在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redi ...
- 小测(noip2005的两道题) 2017.3.3
过河 题目描述 Description 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把 ...
- git_如何查看两个版本之间那些文件被修改
需求 由于工程比较庞大,接近500M,每部署一次如果都全量部署,不仅仅磁盘空间耗费较大,最主要是要等很长时间, 之前就一直有这个问题,但是也就没有弄,上周领导发话了,这个问题必须要解决了 前记 增加带 ...
- 苹果电脑macbook 安装 Burp Suite pro_v1.7.37破解版
1.先去官网下载最新版本 Burp Suite Community Edition v1.7.36安装完成 https://portswigger.net/burp/communitydownload ...
- ExtJS使用入门
extjs是基于 yui 由 jack slocum开发, sencha是他们的公司, sencha是由三个项目合并起来的开源项目: ExtJS, jqTouch, Raphael(拉斐尔, 圣经中的 ...
- 可持久化fhq-treap学习笔记
目录 可持久化fhq-treap----- 支持查询历史版本的非旋treap 先看看为啥他可以可持久化 过程 别的 注意&&出错&&吐槽 模板->luoguP38 ...