Делает ли подписание DLL недействительным файл PDB? - PullRequest
1 голос
/ 23 марта 2019

Анализируя аварийный дамп, WinDbg говорит, что мои символы (файл PDB) не соответствуют модулю. Символы - это те символы, которые были сгенерированы при компиляции DLL. Единственное, что я могу себе представить, может вызвать несоответствие, это то, что DLL была подписана.

Я использую !chksym для проверки символов:

!chksym libcef.dll D:\sym\libcef.dll.pdb

libcef.dll
    Timestamp: 5BB3D477
  SizeOfImage: 626D000
          pdb: F:\src\out\libcef.dll.pdb
      pdb sig: B0065D83-113F-63BE-53BC-AEF07EC816B4
          age: 1

libcef.dll.pdb
      pdb sig: 9BA88A40-D168-44F2-44C1-DD2D73A38B38
          age: 1

sig MISMATCH: libcef.dll.pdb and libcef.dll

1 Ответ

3 голосов
/ 23 марта 2019

Подписание кода на исполняемый файл или DLL не влияет на заголовок отладки исполняемого файла. Таким образом, он все равно будет соответствовать PDB.

...\SigningPdb\bin\Release>symchk signed.exe /s .

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

...\SigningPdb\bin\Release>symchk unsigned.exe /s .

SYMCHK: FAILED files = 0
SYMCHK: PASSED + IGNORED files = 1

И

...\SigningPdb\bin\Release>ChkMatch.exe -c signed.exe SigningPdb.pdb
ChkMatch - version 1.0
Copyright (C) 2004 Oleg Starodumov
http://www.debuginfo.com/


Executable: signed.exe
Debug info file: SigningPdb.pdb

Executable:
TimeDateStamp: bc78c18e
Debug info: 2 ( CodeView )
TimeStamp: a7b373e5  Characteristics: 0  MajorVer: 0  MinorVer: 0
Size: 97  RVA: 000026a0  FileOffset: 000008a0
CodeView format: RSDS
Signature: {b8ed520c-cdfc-486b-8e1a-7c0752a2a41f}  Age: 1
PdbFile: ...\Release\SigningPdb.pdb
Debug info: 16 ( Unknown )
TimeStamp: 00000000  Characteristics: 0  MajorVer: 0  MinorVer: 0
Size: 0  RVA: 00000000  FileOffset: 00000000

Debug information file:
Format: PDB 7.00
Signature: {b8ed520c-cdfc-486b-8e1a-7c0752a2a41f}  Age: 1

Result: Matched

Метка времени находится в заголовке COFF. Этот заголовок имеет размер всего 24 байта и не изменится во время подписания кода.

Большинство изменений произойдет в новом разделе для сертификатов. Этот раздел, однако, также будет игнорироваться при подписании кода. В противном случае вторая подпись уничтожит первую подпись. (Кстати: этот раздел использовался для переноса вредоносного кода внутри подписанного исполняемого файла)

Stud_PE

Конечно, «обычные» контрольные суммы, которые не учитывают структуру файла EXE / DLL, сообщат о другой контрольной сумме.

Checksums of executables

Что могло случиться с вашей DLL или EXE?

  • вы случайно восстановили его, поэтому отметка времени вашей DLL больше не соответствует PDB
  • вы используете аспектно-ориентированное программирование (AOP) в .NET, и после перестройки происходит переплетение кода. Эти инструменты не смогут восстановить PDB после переплетения, поэтому несоответствие PDB уже существует до того, как DLL будет подписана кодом.
...