示例#1
0
        static AssemblyPublicInterface BuildAssemblyPublicInterface(ModuleDefMD module)
        {
            var attributeData = module.Assembly.CustomAttributes;
            var informationalVersionAttribute = attributeData.FirstOrDefault(d => d.AttributeType.Name == nameof(AssemblyInformationalVersionAttribute));
            var informationVersion            = informationalVersionAttribute.ConstructorArguments[0].Value.ToString().Split('+')[0];
            var assemblyReferenceCount        = module.TablesStream.AssemblyRefTable.Rows;
            var targetFrameworkAttribute      = attributeData.FirstOrDefault(d => d.AttributeType.Name == nameof(TargetFrameworkAttribute));
            var targetFramework = targetFrameworkAttribute.ConstructorArguments[0].Value.ToString();
            var references      = new List <AssemblyReference>();

            // apparently the table is 1-indexed
            // https://github.com/0xd4d/dnlib/blob/master/src/DotNet/ModuleDefMD.cs#L588
            for (uint i = 1; i <= assemblyReferenceCount; i++)
            {
                var asmRef = module.ResolveAssemblyRef(i);
                references.Add(new AssemblyReference {
                    Name    = asmRef.Name,
                    Version = $"{asmRef.Version.Major}.{asmRef.Version.Minor}.{asmRef.Version.Build}"
                });
            }

            var publicInterface = new AssemblyPublicInterface {
                Types      = module.Types.Where(t => t.IsPublic).ToList(),
                Framework  = targetFramework,
                Version    = SemverExtensions.GetSemVer(informationVersion),
                References = references
            };

            return(publicInterface);
        }
示例#2
0
 public Csvm(IDeobfuscatorContext deobfuscatorContext, ModuleDefMD module, Csvm oldOne)
 {
     this.deobfuscatorContext = deobfuscatorContext;
     this.module = module;
     if (oldOne.resource != null)
     {
         resource = (EmbeddedResource)module.Resources[oldOne.module.Resources.IndexOf(oldOne.resource)];
     }
     if (oldOne.vmAssemblyRef != null)
     {
         vmAssemblyRef = module.ResolveAssemblyRef(oldOne.vmAssemblyRef.Rid);
     }
 }