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); }
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); } }