Microsoft如何从DLL中隐藏C#内部类';什么是元数据?
当我想分析CVE-2017-8759周围的代码时,一切都开始了。我知道CVE的修复程序位于System.Runtime.Remoting.dll中名为WsdlParser.cs的类中,该类是.Net Framework的一部分。您的计算机上可能有此dll,其位置类似于: C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETFramework\v4.7\System.Runtime.Remoting.dll 我使用ilspycmd将代码重新组装回C#,并注意到输出目录中缺少WsdlParser.cs: 我后来使用了CFF Explorer,发现TypeDefs中的元数据中确实缺少此类型: 然而,我知道有一个事实,那就是这个类:Microsoft如何从DLL中隐藏C#内部类';什么是元数据?,c#,reflection,reverse-engineering,cil,ilspy,C#,Reflection,Reverse Engineering,Cil,Ilspy,当我想分析CVE-2017-8759周围的代码时,一切都开始了。我知道CVE的修复程序位于System.Runtime.Remoting.dll中名为WsdlParser.cs的类中,该类是.Net Framework的一部分。您的计算机上可能有此dll,其位置类似于: C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETFramework\v4.7\System.Runtime.Remoting.dll 我使用ilsp
- 它在Microsoft的文档中:
- 使用反射和LoadAssembly()时,我能够找到类:
Assembly assembly = Assembly.LoadFile(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7\System.Runtime.Remoting.dll"); foreach (var type in assembly.GetTypes()) { if (!type.FullName.EndsWith("WsdlParser")) { continue; } Console.WriteLine("Great Success"); }
这些程序集在编译时使用,但不在运行时使用。为此,您需要一个实现程序集,该程序集将通过其他方式提供,例如它已放置在GAC中。资源管理器正在使用数据类型的标题来查找对象。我不认为它是在检查可执行堆栈中的本地对象。如果没有构造对象,也找不到该对象(空时)。请查看加载类型的
Assembly
属性。它不是您认为已加载的程序集。它实际上是来自GAC的。(对我来说,C:\Windows\Microsoft.NET\assembly\GAC\MSIL\System.Runtime.Remoting\v4.0\u 4.0.0.0\uu b77a5c561934e089\System.Runtime.Remoting.dll
)如果你把那个真实的文件放到反汇编程序中,你会找到WsdlParser
类型。