Ejemplo n.º 1
0
        public static byte[] Token(byte[] public_key)
        {
            PublicKeyTokenGenerator gen;

            gen = new PublicKeyTokenGenerator(public_key);
            return(ExtractAndReverseBytes(gen.ComputeSHA1Hash()));
        }
Ejemplo n.º 2
0
        private bool ReplaceModuleReference(DllToSign module, DllReference reference)
        {
            bool             changed;
            ModuleDefinition md_ref;
            ModuleDefinition md_sign;

            md_ref  = reference.Module;
            md_sign = module.Module;

            changed = false;

            for (int i = 0; i < md_sign.AssemblyReferences.Count; i++)
            {
                // Find any references to our 'reference' DLLs and update them
                if (md_sign.AssemblyReferences[i].Name == Path.GetFileNameWithoutExtension(md_ref.Name))
                {
                    if (Debug)
                    {
                        Console.WriteLine("Debug: Replacing reference to {0}, [{1}, {2}] with [{3}, {4}] in module {5}",
                                          md_sign.AssemblyReferences[i].Name,
                                          md_sign.AssemblyReferences[i].Version,
                                          PrintHex(md_sign.AssemblyReferences[i].PublicKeyToken),
                                          md_ref.Assembly.Name.Version,
                                          PrintHex(md_ref.Assembly.Name.PublicKeyToken),
                                          Path.GetFileNameWithoutExtension(module.Filename)
                                          );
                    }
                    // We have a match - we need to replace they token and version
                    md_sign.AssemblyReferences[i].PublicKeyToken = md_ref.Assembly.Name.PublicKeyToken;
                    md_sign.AssemblyReferences[i].Version        = md_ref.Assembly.Name.Version;
                    module.ReferenceFixed = true;
                }

                // Find any references to our 'to sign' DLLs and replace the key token with the one we'll use to sign
                for (int j = 0; j < signdlls.Count; j++)
                {
                    if (md_sign.AssemblyReferences[i].Name == Path.GetFileNameWithoutExtension(signdlls[j].Module.Name))
                    {
                        if (Debug)
                        {
                            Console.WriteLine("Debug: Swapping key token for {0} from {1} to {2} in module {3}",
                                              Path.GetFileNameWithoutExtension(signdlls[j].Module.Name),
                                              PrintHex(md_sign.AssemblyReferences[i].PublicKeyToken),
                                              PrintHex(PublicKeyTokenGenerator.Token(keys[signdlls[j].Key].KeyPair)),
                                              md_sign.Name
                                              );
                        }
                        md_sign.AssemblyReferences[i].PublicKeyToken = PublicKeyTokenGenerator.Token(keys[signdlls[j].Key].KeyPair);
                    }
                }
            }

            return(changed);
        }