C# .NET了解其他进程的内存/从其他进程读取变量
我目前正在研究一个课题,老实说,我缺乏知识,甚至无法确定这是否可能 我想知道,当我没有源代码/PDB时,是否有可能理解.NET应用程序的进程内存。我的意思是,如果我能找到一个起点,比如一个已知的字符串值,就可以重建一个对象图 我们希望保护从加密配置文件反序列化的程序配置。它在内存中未加密。配置图中的单个值并不是真正的秘密,但图本身是有价值的 问题是,是否可以仅从进程内存重建图形 如果攻击者知道如何使用dnSpy之类的工具来重建程序集(我们也在磁盘上保护这些程序集),并且我们不想混淆配置程序集(这需要进行大量更改),那么攻击者能否基于我们进程的原始内存来重建或理解实例 我试着研究这个,但我找不到正确的方向/好的关键字 我知道像CheatEngine这样的工具是存在的,或者我可以简单地转储整个内存并尝试理解它 但我想了解是否有一个.NET工具可以自动完成这一过程:C# .NET了解其他进程的内存/从其他进程读取变量,c#,.net,security,windbg,sos,C#,.net,Security,Windbg,Sos,我目前正在研究一个课题,老实说,我缺乏知识,甚至无法确定这是否可能 我想知道,当我没有源代码/PDB时,是否有可能理解.NET应用程序的进程内存。我的意思是,如果我能找到一个起点,比如一个已知的字符串值,就可以重建一个对象图 我们希望保护从加密配置文件反序列化的程序配置。它在内存中未加密。配置图中的单个值并不是真正的秘密,但图本身是有价值的 问题是,是否可以仅从进程内存重建图形 如果攻击者知道如何使用dnSpy之类的工具来重建程序集(我们也在磁盘上保护这些程序集),并且我们不想混淆配置程序集(这
!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中的机密,不让有权访问计算机的人知道。如果垃圾收集器可以跟踪引用,那么严重的攻击者也可以。你在一个问题中问了很多问题。请注意