Из других вопросов и статей, которые я прочитал, звучит так, как будто подделанная сборка была подделана, ее хеш будет другим и не будет запущен. Если это так, то могу ли я сделать вывод, что если открытый ключ неизвестной сборки соответствует открытому ключу известной сборки, а .net позволяет запускать неизвестную сборку, то неизвестная сборка была подписана тем же файлом ключа и не была подделана с
Кстати, я прочитал эту статью , но она спрашивает о подписанном MSI, и похоже, что это может быть другой случай, чем подписанная сборка .net.
Редактировать: вот мой пример кода
static void Main(string[] args)
{
string unknownAppPath = args[0];
byte[] unknownKeyBytes = Assembly.LoadFile(unknownAppPath).GetName().GetPublicKey();
string unknownKeyStr = BitConverter.ToString(unknownKeyBytes);
Assembly asm = Assembly.GetExecutingAssembly();
AssemblyName aname = asm.GetName();
byte[] pubKey = aname.GetPublicKey();
string hexKeyStr = BitConverter.ToString(pubKey);
if (hexKeyStr == unknownKeyStr)
{
Console.WriteLine("Signed by same private key");
}
else
{
Console.WriteLine("Uknown signer!");
}
Console.ReadKey();
}
Далее я прочитал эту статью , в которой используется гораздо более сложный метод. В статье я вижу, что он говорит о недостатках использования открытого ключа tokens , но не понимаю, почему не использовать весь открытый ключ. Судя по полученным ответам, звучит так: для этого нужен открытый ключ ... проблема в этой статье в том, что вам нужно попробовать запустить сборку? (он говорит: «... но вы не сможете обнаружить это, не проверив, прошла ли проверка сборка».)