完整源码:

//Program.cs

using System;

using System.Threading;

/*
*
* 作者:牛A与牛C之间
* Q Q:1046559384   C#/Java技术交流群:96020642
* 微博:http://weibo.com/flydoos
* 博客:http://www.cnblogs.com/flydoos
* 日期:2012-01-19
*
* 金钱:0x00A35DB4 + 0x24C
* 负载:0x00A35DB4 + 0x52D4
*
*/

namespace RedAlert2
{
    class Program
    {
        private constint BaseAddress = 0x00A35DB4;
        private conststring ProcessName = "GAME";

static void Main()
        {
            while (true)
            {
                if (Helper.GetPidByProcessName(ProcessName) ==0)
                {
                    Console.WriteLine("对不起,您还没有启动红色警戒Ⅱ游戏!");
                    Console.Read();
                    return;
                }
                var moneyAddress = Helper.ReadMemoryValue(BaseAddress, ProcessName) +0x24C;
                Helper.WriteMemoryValue(moneyAddress, ProcessName, 999999999);
                Console.WriteLine(DateTime.Now + ":" + Helper.ReadMemoryValue(moneyAddress, ProcessName));
                Thread.Sleep(1000);
            }
        }
    }
}

复制代码

//Helper.cs

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace RedAlert2
{
    public abstractclass Helper
    {
        #region API

[DllImport("kernel32.dll")]
        public staticextern bool ReadProcessMemory
            (
            IntPtr hProcess,
            IntPtr lpBaseAddress,
            IntPtr lpBuffer,
            int nSize,
            IntPtr lpNumberOfBytesRead
            );

[DllImportAttribute("kernel32.dll")]
        public staticextern bool WriteProcessMemory
            (
            IntPtr hProcess,
            IntPtr lpBaseAddress,
            int[] lpBuffer,
            int nSize,
            IntPtr lpNumberOfBytesWritten
            );

[DllImportAttribute("kernel32.dll")]
        public staticextern IntPtr OpenProcess
            (
            int dwDesiredAccess,
            bool bInheritHandle,
            int dwProcessId
            );

[DllImport("kernel32.dll")]
        private staticextern void CloseHandle
            (
            IntPtr hObject
            );

#endregion

#region 方法

///<summary>
        ///根据窗口标题获取PID
        ///</summary>
        ///<param name="windowTitle">窗口标题</param>
        ///<returns></returns>
        public static int GetPidByTitle(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;
        }

///<summary>
        ///根据进程名获取PID
        ///</summary>
        ///<param name="processName">进程名字</param>
        ///<returns></returns>
        public static int GetPidByProcessName(string processName)
        {
            Process[] arrayProcess = Process.GetProcessesByName(processName);
            foreach (Process p in arrayProcess)
            {
                return p.Id;
            }
            return 0;
        }

///<summary>
        ///根据窗口标题查找窗口句柄
        ///</summary>
        ///<param name="title">窗口标题</param>
        ///<returns></returns>
        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;
        }

///<summary>
        ///读取内存中的值
        ///</summary>
        ///<param name="baseAddress">地址</param>
        ///<param name="processName">进程名</param>
        ///<returns></returns>
        public static int ReadMemoryValue(int baseAddress,string processName)
        {
            try
            {
                var 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;
            }
        }

///<summary>
        ///将值写入指定内存地址中
        ///</summary>
        ///<param name="baseAddress">地址</param>
        ///<param name="processName">进程名</param>
        ///<param name="value"></param>
        public static void WriteMemoryValue(int baseAddress,string processName, int value)
        {
            IntPtr hProcess = OpenProcess(0x1F0FFF,false, GetPidByProcessName(processName)); //0x1F0FFF 最高权限
            WriteProcessMemory(hProcess, (IntPtr) baseAddress, new[] {value}, 4, IntPtr.Zero);
            CloseHandle(hProcess);
        }

#endregion
    }

}

复制代码

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

C 修改内存制作外挂相关推荐

  1. 游戏修改器、外挂原理

    修改内存. 通过一款第三方软件金山游侠2002便可以找到那些存储数据的地址,在我们玩游戏的过程中,通过单一变量法来分析某种属性的地址在哪里,比如说玩游戏的过程中生命全满然后保持其他不变将生命值减少然后 ...

  2. 171103 逆向-内存与外挂(培训提纲)

    1625-5 王子昂 总结<2017年11月3日> [连续第399天总结] A. 协会内存与外挂培训提纲 B. 后天给协会培训,于是先写一下提纲记录一发,顺便自己也复习一下相关的东西 内存 ...

  3. Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口

    Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>& ...

  4. [cocos2dx]防止八门神器修改内存数据

    网上的cocos2d-x教程多为知识点的讲解,但我们学习cocos2d-x的目的是为了什么?为了做出游戏来!这篇文章的前提是单机游戏,网络游戏有自己的加密方法,与单机游戏不尽相同! 游戏辛辛苦苦的做完 ...

  5. 12c oracle 修改内存_Oracle12c中性能优化功能增强新特性之重大突破——内存列存储新特性...

    Oracle12c中内存列存储 内存列存储(IM column store) 是Oracle12.1.0.2版本的主要特点.该特点允许列,表,分区和物化视图在内存中以列格式存储,而不是通常的行格式.数 ...

  6. 【Android 逆向】函数拦截 ( 修改内存页属性 | x86 架构插桩拦截 )

    文章目录 一.修改内存页属性 二.x86 架构下的插桩拦截 一.修改内存页属性 实际函数 的 函数指针为 unsigned char* pFunc , 拦截函数 的函数指针为 unsigned cha ...

  7. VMware 虚拟机 1、ubuntu 扩容(扩展硬盘容量)2、修改内存大小

    参考文章:VMware虚拟机 Linux系统 Ubuntu 16.04 硬盘/磁盘扩容(超详细图文详解!亲测有效!) VMware设置扩大后容量后 安装软件: sudo apt-get install ...

  8. 汇编语言 修改内存中的过时数据

    题目要求 编程,修改内存中的过时数据 运行过程 改之前 改数字之后 改字母之后 代码 ;编程,修改内存中的过时数据 ;存放ascii码用db,存放数据用dw assume cs:codesg,ds:d ...

  9. spd不能修改服务器内存条的原因,修改内存SPD 解决蓝屏问题

    修改内存SPD 解决蓝屏问题 互联网   发布时间:2009-04-21 01:18:13   作者:佚名   我要评论 问:一台电脑的内存是HY 256MB DDRII 533,最近又购买了一条HY ...

  10. python观察内存和修改内存

    例如:在不改变内存地址的情况下,修改变量的值. 观察内存和修改内存其实是操作系统提供的能力. 对于理解python里面数据结构很有帮助. 例如python里面的int类型.为什么int类型是变长的,为 ...

最新文章

  1. Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class
  2. ubuntu16.04 terminal无法正常运行
  3. aspose.words 合并相同值的单元格_合并相同的单元格,你用了1小时,同事只要30秒,还支持自动刷新...
  4. python适合零基础学习吗-零基础,经济学专业,适合自学Python吗?
  5. 操作系统——MiniDos
  6. 如何使用git上传本地文件到码云上【详细步骤】
  7. 2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】
  8. 学姐百度实习面经(轻松拿offer)
  9. python常用类型转换の方法
  10. lora信号测试小助手_LoRa技术——30个常见问题解答
  11. k3刷机 重置_斐讯K3全版本刷机教程2019-不用降级开telnet拆机TTL
  12. Ensp教程 —— Ensp模拟器中的设备如何连接到真实物理机
  13. 区块链报告会心得体会3000_实习心得体会3000字篇【优秀篇】
  14. win10服务器文件夹显示不全,win10电脑为什么只显示部分文件夹该如何处理
  15. Mac OSX的开机启动配置
  16. MybatisPlus之代码生成器(有此一篇即可)
  17. 计算机拆机步骤图解,我的电脑戴尔vostro1088拆机过程图解
  18. 制作PDF,并给PDF加上标签
  19. Elementui+Vue 后台主页面布局
  20. 实现VMware Horizo​​n+负载均衡(AVI)(一)

热门文章

  1. Nginx 重定向所有子域名到www
  2. 图书信息管理系统的设计与实现
  3. 国际贸易中的信用证使用
  4. Open Yale course:Listening to Music
  5. Mac MySQL忘记密码解决办法
  6. react-native系列(11)组件篇:Image图片加载和ImageEditor图片剪切
  7. python 实现改变excel文件列宽
  8. thinkpad重装系统不引导_联想装win10系统引导不进系统怎么办?(完美解决方法)
  9. DuReader数据集内容预览
  10. linux if 括号用法总结