Найти сильную подпись подписи без вызова LoadAssembly

63
4

При чтении файла Windows PE напрямую я не могу найти сильное имя подписанной задержки сборки. Я могу попасть в заголовок CLR и прочитать все записи заголовка CLR, включая флаги и поле StrongNameSignature. К сожалению, в сборке с задержкой StrongNameSignature обнуляется. Является ли информация в каталоге MetaData указанным в заголовке CLR? Если у кого-нибудь есть пример того, как читать эту таблицу?


Я не заинтересован в вызове ILDASM или загрузке сборки.

спросил(а) 2021-01-25T16:22:26+03:00 4 месяца, 2 недели назад
1
Решение
77

Вы можете использовать Mono.Cecil, чтобы отразить сборку без ее загрузки.


Самый простой способ получить копию Mono.Cecil - установить MonoDevelop и погрузиться в каталог установки.

Построение этого не всегда является самым простым.


Также - Mono.Cecil - это отдельная сборка, IIRC и не зависит от Mono.

ответил(а) 2021-01-25T16:22:26+03:00 4 месяца, 2 недели назад
45

Когда сборка задерживается, как вы уже нашли, подпись не записывается в сборку, так как она еще не подписана.


Вы можете получить открытый ключ, который находится в манифесте Ассамблеи, а токен открытого ключа - первые 8 байтов хэш SHA1 открытого ключа (IIRC).


Итак, если вы не хотите загружать сборку, вам нужно найти манифест и проанализировать данные.

Я сделал быстрый "bing" и нашел следующее
http://www.codeproject.com/KB/dotnet/asmex.aspx


он может помочь в качестве отправной точки с детализацией разбора манифеста, но, признаюсь, я не смотрел в нее глубже.

ответил(а) 2021-01-25T16:22:26+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема