C# .NET了解其他进程的内存/从其他进程读取变量

C# .NET了解其他进程的内存/从其他进程读取变量,c#,.net,security,windbg,sos,C#,.net,Security,Windbg,Sos,我目前正在研究一个课题,老实说,我缺乏知识,甚至无法确定这是否可能 我想知道,当我没有源代码/PDB时,是否有可能理解.NET应用程序的进程内存。我的意思是,如果我能找到一个起点,比如一个已知的字符串值,就可以重建一个对象图 我们希望保护从加密配置文件反序列化的程序配置。它在内存中未加密。配置图中的单个值并不是真正的秘密,但图本身是有价值的 问题是,是否可以仅从进程内存重建图形 如果攻击者知道如何使用dnSpy之类的工具来重建程序集(我们也在磁盘上保护这些程序集),并且我们不想混淆配置程序集(这

我目前正在研究一个课题,老实说,我缺乏知识,甚至无法确定这是否可能

我想知道,当我没有源代码/PDB时,是否有可能理解.NET应用程序的进程内存。我的意思是,如果我能找到一个起点,比如一个已知的字符串值,就可以重建一个对象图

我们希望保护从加密配置文件反序列化的程序配置。它在内存中未加密。配置图中的单个值并不是真正的秘密,但图本身是有价值的

问题是,是否可以仅从进程内存重建图形

如果攻击者知道如何使用dnSpy之类的工具来重建程序集(我们也在磁盘上保护这些程序集),并且我们不想混淆配置程序集(这需要进行大量更改),那么攻击者能否基于我们进程的原始内存来重建或理解实例

我试着研究这个,但我找不到正确的方向/好的关键字

我知道像CheatEngine这样的工具是存在的,或者我可以简单地转储整个内存并尝试理解它

但我想了解是否有一个.NET工具可以自动完成这一过程:

  • 使用配置类读取反编译程序集
  • 附加到进程并转储内存
  • 理解位和字节,并与反编译类结合以重建实例层次结构
  • 我的主要目标是决定是否需要对内存配置图进行额外的保护。如果重建图形不容易,那么我认为不需要它。但是如果它像反编译.NET应用程序的源代码一样简单,我认为需要一些保护

    “当我没有源/PDB时,可以理解.NET应用程序的进程内存。”

    是的,这是可能的。NET中有一个称为垃圾收集的概念。垃圾收集器需要知道内存是什么样子的,否则它无法完成其工作。这需要在客户的机器上工作,这些机器没有PDB,也没有源代码

    有一个称为MSCORDACWKS的DLL,它是微软的MS(可能),COR是.NET的,DAC是“数据访问控制”,WKS是“工作站”。此名称中的DAC就是您所需要的

    通常情况下,您自己不会这样做,而是使用一个调试器(Micosoft WinDbg)和一个.NET扩展(SOS),它知道如何处理DAC来理解内存

    有关这些主题的示例和其他问题,请参阅和。其实很容易。试试
    !dumpheap-stat
    获取所有.NET对象的列表

    问题是,是否可以仅从进程内存重建图形

    使用
    !gcroot
    如果愿意,可以开始构建对象图

    对于对象图,您最好查看构建此类图的现有工具,如Jetbrains dotMemory等内存泄漏工具

    配置图中的单个值并不是真正的秘密,但图本身是有价值的

    这可能是在代码中调用
    GC.Collect()
    来强制garbe收集的情况,这样图形就消失了。但是,使用调试器可以在调用之前停止进程

    是否需要对内存配置图进行额外保护

    嗯,是的。并用C++语言实现。 “当我没有源/PDB时,可以理解.NET应用程序的进程内存。”

    是的,这是可能的。NET中有一个称为垃圾收集的概念。垃圾收集器需要知道内存是什么样子的,否则它无法完成其工作。这需要在客户的机器上工作,这些机器没有PDB,也没有源代码

    有一个称为MSCORDACWKS的DLL,它是微软的MS(可能),COR是.NET的,DAC是“数据访问控制”,WKS是“工作站”。此名称中的DAC就是您所需要的

    通常情况下,您自己不会这样做,而是使用一个调试器(Micosoft WinDbg)和一个.NET扩展(SOS),它知道如何处理DAC来理解内存

    有关这些主题的示例和其他问题,请参阅和。其实很容易。试试
    !dumpheap-stat
    获取所有.NET对象的列表

    问题是,是否可以仅从进程内存重建图形

    使用
    !gcroot
    如果愿意,可以开始构建对象图

    对于对象图,您最好查看构建此类图的现有工具,如Jetbrains dotMemory等内存泄漏工具

    配置图中的单个值并不是真正的秘密,但图本身是有价值的

    这可能是在代码中调用
    GC.Collect()
    来强制garbe收集的情况,这样图形就消失了。但是,使用调试器可以在调用之前停止进程

    是否需要对内存配置图进行额外保护


    嗯,是的。并且在像C++这样的本地语言中实现。

    最终,没有办法保护RAM中的秘密,而不是有人访问机器。如果垃圾收集器可以跟踪引用,那么严重的攻击者也可以。你在一个问题中问了很多问题。请集中询问一个主题,重点是关于.NET中的内存管理或运行应用程序时保护内存数据。最终,没有办法保护RAM中的机密,不让有权访问计算机的人知道。如果垃圾收集器可以跟踪引用,那么严重的攻击者也可以。你在一个问题中问了很多问题。请注意