【问题标题】:Using c# to call a function from another process使用c#从另一个进程调用函数
【发布时间】:2013-03-23 22:42:46
【问题描述】:

我正在为自己的学习目的创建一个内存修改程序。我的一个朋友指出了我想触发的另一个程序中的一个函数。

该函数在另一个程序中位于 0x004B459C。我知道如何读写内存,但是如何从我的程序中触发这个功能。我没有这个其他程序的源代码。

我的问题是,如果我知道这个十六进制代码,我是否需要注入函数,或者我只是在内存中写一些东西来触发它?

【问题讨论】:

  • What have you tried? 为什么要通过更改 C# 中的特定内存部分来与另一个进程通信?
  • 我正在学习内存修改过程,现在我很好奇人们是如何远程触发一个函数的。
  • 我认为您应该添加标签 WinApi 和 C ,因为您的问题与使用低级操作系统功能有关,而不是 C#
  • Windows 将保护其他进程的内存,因此除非以某种标准方式(例如 DLL 入口点、COM 对象等)公开,否则您将无法访问该函数...
  • 有关游戏黑客和有用库的信息:google.hu/search?q="Memory+Hacking+Library+List"

标签: c# c function winapi


【解决方案1】:

想想你真正想要什么。您希望其他进程执行此功能。进程不执行代码,它是执行代码的线程。如果您希望其他进程调用此函数作为其正常操作的一部分,您将必须弄清楚输入等,这将使其他进程的线程之一调用它。一般来说,任何其他方式都会冒着破坏其他进程的风险。可以将线程注入另一个进程并让它调用您感兴趣的函数(请参阅CreateRemoteThread)。如果打算在消息泵线程上调用此函数,您可以 inject a message hook 进入另一个进程,向它发送一条特殊消息并从您的钩子中调用它。还有其他几种方法 (APC),但这些方法仍然比较复杂,收效甚微。

【讨论】:

  • 这段代码 0x004B459C 表示我有函数位置对吗?所以我只需要用我自己的函数制作我自己的 DLL 并注入它,以便另一个程序可以执行它,对吗?
  • 基本上是的,虽然它被称为地址而不是位置。这类事情最好在本机代码(C/C++)中完成,而不是 C#。无论如何,如果没有本机引导 dll,您将无法注入 C# 程序集。
  • 经过数小时的研究,我终于制作了一个注入并调用此函数的 DLL。但是,我改为使用 C++。没关系,因为它是一个单独的解决方案和文件。 pastebin.com/GwKxRQwx
【解决方案2】:

您缺少一些基本的体系结构基础知识 :-) 您不能简单地从另一个进程调用知道其地址的函数!想想看,这意味着你的程序可以获取任何程序的内存并执行代码!这将是一个混乱和完全不安全的环境。首先是一些基础知识: 1)windows保证你只看到你自己进程的内存,操作系统(甚至是windows)最重要的原则之一就是隔离进程,当然包括它们的内存。 2)确实考虑了权限,通常任何运行的代码都必须在用户帐户下运行,另一个进程可能意味着另一个进程帐户。

答案很简单,如果你的程序是 .NET/C#,那么检查 .NET 框架为你提供的进程间通信,这是你必须搜索的东西,每个平台,Java,windows native,.NET 提供一种官方的进程间通信方式,称为进程间通信,在.NET框架中查看

【讨论】:

  • 不对,windows甚至提供了读写其他进程内存的方法,即使没有被提升。
猜你喜欢
  • 2013-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 2021-08-24
  • 1970-01-01
  • 2021-07-05
  • 2014-10-02
  • 1970-01-01
相关资源
最近更新 更多