通过c#编辑内存地址

2023-12-04

我想编辑一个活动的应用程序(编辑内存地址),

在地址上00498D45我想编辑它的值

当前值 :

MOV BYTE PTR SS:[EBP-423],7

to

更新值:

 MOV BYTE PTR SS:[EBP-423],8

到目前为止我得到的是这个(在网上搜索了它,这是我走了多远):

提前致谢!

using System.Runtime.InteropServices;

    [Flags]

        public enum ProcessAccessFlags : uint

{
    All = 0x001F0FFF,
    Terminate = 0x00000001,
    CreateThread = 0x00000002,
    VMOperation = 0x00000008,
    VMRead = 0x00000010,
    VMWrite = 0x00000020,
    DupHandle = 0x00000040,
    SetInformation = 0x00000200,
    QueryInformation = 0x00000400,
    Synchronize = 0x00100000
}

[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);

[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);

[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);

[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hProcess);

Process process = Process.GetProcessesByName("My Apps Name").FirstOrDefault();

public static bool WriteMemory(Process process, int address, long value, out int bytesWritten)
{
    IntPtr hProc = OpenProcess(ProcessAccessFlags.All, false, process.Id);

    byte[] val = BitConverter.GetBytes(value);

    bool worked = WriteProcessMemory(hProc, new IntPtr(address), val, (UInt32) val.LongLength, out bytesWritten);

    CloseHandle(hProc);

    return worked;
}

从你的其他问题:

WriteMemory(Process process,00498D45 , MOV BYTE PTR SS:[EBP-423],8)

这方面的问题太多了,我不知道从哪里开始。首先,这与正确的 C# 语法相差甚远。

  1. 你正在调用一个函数,但你有Process那里就像一个签名。
  2. 00498D45不是任何基数下的有效常量。如果你指的是十六进制(你可能会这样做,因为你正在处理地址)那么像所有其他类似 C 的语言一样,应该表示为0x00498D45.
  3. 这是 ASCII 格式的 x86 汇编代码(但它不是字符串,只是一团糟)。您不能只是将 ASCII 汇编代码放入另一个进程的地址空间!

也许您应该多研究一下编译和汇编在构建程序时如何工作,以及 CPU 在执行程序时实际执行的操作。另外,我建议阅读您显然从某处获取的示例代码,并尝试理解它。了解正在发生的事情比要求每个人帮助修复你拼凑起来的东西要好得多。</rant>

无论如何,汇编代码后,它看起来像这样(重新反汇编):

C68559FEFFFF08    mov byte [ebp-0x1a7],0x8

这意味着你的指令实际上是字节串C6 85 59 FE FF FF 08。这就是您需要写入目标应用程序的内容。

这是您尝试做的事情的基础:

byte[] new_instr = new byte[] {0xC6, 0x85, 0x59, 0xFE, 0xFF, 0xFF, 0x08};
IntPtr target_addr = (IntPtr)0x00498D45;

int bytesWritten;
WriteProcessMemory(hProcess, target_addr, new_instr, (UInt32)new_instr.Length, out bytesWritten);

The WriteMemory您复制粘贴的记忆功能won't在这里帮助你。问题是,它只写了一个long这是 4 个字节。您需要写入 7 个字节。所以你要么必须修改该函数才能使用byte[]参数,或者自己做。


我很佩服你的野心,但你真的应该起点低一点。编写一些 C# 代码来熟悉使用类 C 语言进行编程。然后编写一些 C 语言来熟悉当你做事不完美时崩溃的情况。然后尝试涉足汇编——也许将小的内联片段写入 C 代码中。最后,您将准备好绕过其他正在运行的进程的指令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过c#编辑内存地址 的相关文章

随机推荐

  • matheca中的包导入问题

    在mathematica中 我使用的是mma 5 0 猜很老 如果我输入以下一行 Needs Graphics Master Animate Plot Sin n x x 0 2 Pi Axes gt False n 1 6 1 然后我收到
  • Dockerfile 无法构建

    直到几天前Dockerfile工作正常 当我今天尝试再次构建它时 它在终端中给出以下错误 我尝试使用多个 docker 基础映像 但仍然给出相同的错误 谁能帮我这个 我不认为我错过了什么 如果我错过了 它应该早先给我错误 但为什么现在呢 E
  • TempData 在 ASP.NET MVC 2 中读取后保留

    在 ASP NET MVC 2 中 TempData值将一直保留到会话结束或被读取为止 在里面微软的话 TempData 的值一直持续到 它被读取或直到会话时间 出去 以这种方式持久化 TempData 启用重定向等场景 因为 TempDa
  • pandas groupby 到嵌套 json

    我经常使用 pandas groupby 来生成堆叠表 但后来我经常想将生成的嵌套关系输出到 json 有什么方法可以从它生成的堆叠表中提取嵌套的 json 文件吗 假设我有一个像这样的 df year office candidate a
  • 对空集/NA 的 NA 集求和而不是 0?

    The 求和函数如果应用于空集则返回 0 如果将其应用于一组 NA 值 是否有一种简单的方法可以使其返回 NA 这里有一个borrowed例子 test lt data frame name rep c A B C each 4 var1
  • 如何获取 ASP.NET MVC 中模型状态错误的集合?

    如何获取视图中的错误集合 我不想使用 Html Helper 验证摘要或验证消息 相反 我想检查错误以及是否有错误以特定格式显示它们 另外 在输入控件上 我想检查特定的属性错误并向输入添加一个类 附 我正在使用 Spark View Eng
  • Python速度测试-时差-毫秒

    在 Python 中比较 2 次以加速测试一段代码的正确方法是什么 我尝试阅读 API 文档 我不确定我是否理解 timedelta 的事情 到目前为止我有这个代码 from datetime import datetime tstart
  • .net XmlSerializer,忽略基类属性

    假设我们有一个从基类 System Windows Controls 派生的类 SerializedLabel XmlRoot SerializableLabel public class SerializableLabel Label p
  • 如何使用 getch() ncurses 获取 Ctrl、Shift 或 Alt?

    How to get Ctrl Shift or Alt with getch ncurses I cannot get it work to get Ctrl Shift or Alt with getch using ncurses D
  • Backbone.js 在 POST 请求上获取数据

    我是backbone js 的新手 我正在尝试使用我的服务发布数据 它会返回我的数据 我的服务是 http 192 168 1 3 8080 app search candidate它将输入作为 skills c java 它会将用户列表返
  • 黑客 DropDownList 值

    我有一个 DropDownList 我试图防止它被用作攻击媒介 我是否可以假设用户无法实际更改 DDL 的值并回发到服务器 目前 如果我尝试在提交后更改数据包 则会抛出以下 ASP NET 错误消息 For security purpose
  • 在c#中将点移动到另一个点

    我想将二维搜索空间中的某个点 a 移动到具有一定步长 config StepSize 0 03 的另一个点 b Point a agent Location Point b agentToMoveToward Location import
  • 如何从 HTML 中删除“不可见空间”[重复]

    这个问题在这里已经有答案了 可能的重复 内联块列表项之间的空格 我有一个JSFiddle 演示我的 html 代码 这是这里的代码 span style display inline Hello Wo span span style dis
  • 将 var 或 #' 应用于 Clojure 中的函数列表

    我正在尝试读取 Clojure 中函数集合的元数据 但 var 或 reader 特殊形式不起作用 除非它们直接处理符号 this works var my fn this doesn t defn val it x var x val i
  • Windows XP 嵌入式版本上出现 System.IO.IOException 的原因是什么?

    我正在 Windows XP 嵌入版本上运行 Net 3 5 应用程序 该应用程序通过串行 COM 端口写入和读取一些数据 该应用程序在我的笔记本电脑 Windows XP Professional 上运行良好 但在嵌入式 Windows
  • 您可以将带有参数的函数存储在列表中并稍后在 Python 中调用它们吗?

    例如 当我有 def function text print text mylist function yes function no mylist 0 它只是打印 yes 和 no 并且不执行任何操作mylist 0 我希望它能够使用列表
  • 比较 MySQL 中的二进制值

    假设你有两个二进制值 001011 001111 MySQL中如何获取不同位数 我试过 SELECT BIT COUNT BINARY 001011 BINARY 001111 这将返回 6 而我需要一个在此示例中返回 1 的解决方案 SE
  • 如何在react-native中激活GPS图标?

    我希望当我打开包含地图的应用程序或屏幕时在状态栏上显示 GPS 图标 因此我添加了一个功能 在第一次时要求用户允许位置权限 并且它工作得很好 我可以获得纬度 经度 但是GPS 位置 图标未激活 如何强制应用程序激活此图标 这是我的请求许可功
  • 克服跨域问题

    是否有任何方法可以克服在违反同源策略的情况下尝试从另一个 Web 服务器检索客户端数据时出现的跨域问题 http en wikipedia org wiki JSONP http api jquery com jQuery getJSON
  • 通过c#编辑内存地址

    我想编辑一个活动的应用程序 编辑内存地址 在地址上00498D45我想编辑它的值 当前值 MOV BYTE PTR SS EBP 423 7 to 更新值 MOV BYTE PTR SS EBP 423 8 到目前为止我得到的是这个 在网上