C#:在另一个进程的内存中搜索一个 byte[] 数组 [英] C#: Search a byte[] array in another process's memory

查看:16
本文介绍了C#:在另一个进程的内存中搜索一个 byte[] 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在另一个进程的内存中搜索一个byte[]数组,然后得到byte[]数组所在位置的地址?

How is it possible to search for a byte[] array in the memory of another process and then get the address at the place where the byte[] array is located?

我想将一个字节数组写入另一个进程的内存(WriteProcessMemory()).该调用的一个参数是 uint 地址.我想通过在进程中搜索一个字节数组来获取地址.

I want to write a byte array into the memory of another process(WriteProcessMemory()).One of the parameters of that call is uint Address.Well I want to get the address by searching a byte array into the process.

例如我搜索 {0xEB ,0x20,0x68,0x21,0x27,0x65, ??, 0x21,0x64,0xA1}

For example I search for {0xEB ,0x20,0x68,0x21,0x27,0x65, ??, 0x21,0x64,0xA1}

我们假设这个数组只放在我想要写入内存的进程的内存中的一个地方.

We assume that this array is placed only at one place in the memory of the process I'd like to write memory to.

为了得到那个地址,我必须搜索那个字节数组.

To get that address,I have to search for that byte array.

可以用C#完成吗?

这适用于本机应用程序,而不是 .NET.无需否决我的问题,有 C++ 的组件可以做到这一点,我只想在 C# 中做到这一点.

感谢理解!

推荐答案

可以用C#完成吗?

Is it possible to be done in C#?

是的.但是非常难.对于没有与非托管进程视图及其您将需要使用的内存映射不匹配的阻抗的本机应用程序来说,这是很困难的.

Yes. But very hard. It is hard from a native application where there is no impedance mismatched with the unmanaged view of processes and their memory maps you will need to use.

注意事项:

  • 您需要获得权限才能打开进程以获取句柄.
  • 虽然 32 位进程的虚拟内存空间大小为 2 到 4 GB(取决于主机操作系统和/3GB 开关),但该地址范围的大部分不会被分配,读取它会导致页面错误.您确实需要了解分配了哪些页面以及用于避免大量无效页面访问的页面.

建议:

  • 你真的需要这样做吗?说真的,这会很难.
  • 考虑开发本机应用程序,这将避免跨本机/托管栅栏工作(这可能包括带有托管驱动程序应用程序的本机库).
  • 您真的需要这样做吗?
  • 考虑在目标进程内部进行工作.这将需要一些聪明才智(已记录)来注入线程,但应该会更快.
  • 首先阅读 Windows 上的进程内存是如何工作的(从 Windows Internals 开始和(在最新版本中记不起它的名字)Jeffrey Richter 关于 Win32 应用程序开发的书.
  • 您真的需要这样做吗?一定有更简单的东西……你能自动化调试器吗?

这篇关于C#:在另一个进程的内存中搜索一个 byte[] 数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆