【发布时间】:2011-07-12 22:19:40
【问题描述】:
在我开始研究之前,我只是想知道这是否可能。我可以将 C# 代码注入并运行到正在运行的进程中,以及枚举所有加载的 .NET 模块。另外,我可以编辑 .NET DLL 的指令来添加我的方法调用。显然,在加载 DLL 时我无法编辑 DLL,但是当我尝试它时,系统消息告诉我无法编辑它,因为它是在 另一个 进程中加载的。这让我相信,如果我在 same 进程中(例如,因为我的注入代码),我可以编辑加载的 DLL。我怀疑这是不对的。
如果没有,您认为是否可以卸载目标 DLL、对其进行编辑并重新加载目标 DLL?系统是否会正确地重新映射其所有值(因为新的 DLL 会大一些指令)?我有一种感觉,如果可以卸载 DLL,对其进行编辑,然后将其重新加载到进程中,那么操作系统应该负责其余的工作。
感谢您的任何见解和反馈。
【问题讨论】:
-
@David,原因有很多:病毒、间谍软件、root 工具包。不要那么封闭!
-
它也不需要是恶意的;例如,为某事编写一个自定义插件,而不是出于滥用目的,是完全可以的。
-
监控 C# 代码... =) 此外,许多编译器使用我正在使用的相同 PE API。基本上,我必须记录单个 C# 函数调用。
-
yolksamurai - 为什么不直接使用 VS 工具?或者找人添加一些性能计数器;甚至是他们可以在#debug 构建中调用的日志记录伙伴接口?
-
问题是我们必须监视数百个 C# 程序集,而编辑此 C# 代码意味着我们必须重新签入每个已编辑文件的源存储库。其中一些 C# 程序集来自多年前。这个项目的基本前提是在不触及当前进程的情况下添加这个新的日志记录功能。
标签: c# dll portable-executable