Как инструменты, такие как PEiD, узнают компилятор и его версию.


2

Как инструменты, такие как PEiD и CFF explorer, обнаруживают компилятор и его версию.

Я анализирую исполняемый файл. Который показывает: Borland Delphi 3.0 enter image description here

Но названия разделов .text .rsrc. Который обычно не генерируется компилятором Borland Delphi. enter image description here

Я думаю, что информация о версии файла изменена.

Но как эти инструменты узнают версию компилятора?

3

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

В самом деле, детектор выполняет очень наивные проверки для обнаружения компилятора/компоновщика/защитника/etc, который основан на заданной маске байтов. Маска объединяется из последовательности байтов и подстановочных знаков, которая обычно представляет собой магическое число, кусок кода или строку, которая дает информацию о файле.

Чтобы понять это лучше, давайте посмотрим на различные обнаружения в Borland 3.0 различными детекторами.

PEiD:

[Borland Delphi v3.0] 
signature = 50 6A ?? E8 ?? ?? FF FF BA ?? ?? ?? ?? 52 89 05 ?? ?? ?? ?? 89 42 04 E8 ?? ?? ?? ?? 5A 58 E8 ?? ?? ?? ?? C3 55 8B EC 33 C0 
ep_only = true 

Для того, чтобы обнаружить Borland Delphi v3.0, PEiD ищет для этой последовательности байтов в точке входа двоичного файла. «??» являются подстановочными знаками, используемыми для игнорирования байтов в этих местах, поскольку они могут быть не одинаковыми в разных двоичных файлах.

Вы можете найти базу данных PEiD here.

CFF Explorer,:

<ENTRY> 
  <NAME>Borland Delphi v3.0</NAME> 
  <COMMENTS /> 
  <ENTRYPOINT>506A??E8????FFFFBA????????528905????????894204E8????????5A58E8????????C3558BEC33C0</ENTRYPOINT> 
  <ENTIREPE /> 
</ENTRY> 

Хотя формат подписи может выглядеть по-другому, то PEiD «S, это фактически та же маска, как и в предыдущем примере.

Обычно вы можете найти базу данных сигнатур из ФФС исследователя в следующий путь C: \ Users \ Public \ Documents \ Проводник Люкс \ Подписи \ IMAGE_FILE_MACHINE_I386.xml или в /Подписи/IMAGE_FILE_MACHINE_I386 .xml, хотя он может отличаться в вашей установке. Вы также можете найти его в сети here. Прочтите this PDF для получения дополнительной технической информации о подписях и способах использования в CFF Explorer.

Detect It Easy:

Detect It Easy является более сложным, богатым и точным детектором (на мой взгляд), который использует "сценарии", чтобы определить тип программы. Алгоритм обнаружения DIE более сложный, чем другие, и не использует только байтовую маску для обнаружения компилятора/компоновщика/упаковщика/и т. Д.
Вы можете увидеть, как DIE обнаруживает Borland Delphi в following signature.

Сигнатура Borland Delphi слишком долго, так что я буду показывать здесь другой пример подписи, подпись NTKrnl Protector:

// DIE's signature file 

init("protector","NTkrnl Protector"); 

function detect(bShowType,bShowVersion,bShowOptions) 
{ 
  if(PE.compareEP("68........e8")&&(PE.nLastSection>=1)) 
  { 
   if(PE.getNumberOfImports()==1) 
   { 
   if(PE.getNumberOfImportThunks(0)==2) 
   { 
    if((PE.getImportFunctionName(0,0)=="LoadLibraryA")&&(PE.getImportFunctionName(0,1)=="GetProcAddress")) 
    { 
    if(PE.isSignatureInSectionPresent(1,"'http://www.ntcore.com '")) 
    { 
     sVersion="0.1"; 
     bDetected=1; 
    } 
    else if(PE.isSignatureInSectionPresent(1,"'http://www.ntkrnl.com'")) 
    { 
     sVersion="0.15"; 
     bDetected=1; 
    } 
    /* if(bDetected) 
    { 
     var nFind=PE.findString(PE.section[1].FileOffset,PE.section[1].FileSize,"Version "); 
     if(nFind!=-1) 
     { 
     sVersion=PE.getString(nFind,20); 
     var aVersion=sVersion.match(/Version ?(.*?) /); 
     sVersion=aVersion[1]; 
     } 
    } */ 
    } 

   } 
   } 
  } 
  /*if(PE.compareEP("68........e8........c3")&&(PE.compareEP("68########60e8$$$5d4555c3"))) 
  { 
   bDetected=1; 
  } */ 

  return result(bShowType,bShowVersion,bShowOptions); 
} 

Вы можете прочитать больше о Обнаружить это легко в своем Github repository.


Помните, что в большинстве случаев эти байты в двоичном, которые представляют собой тип файла могут быть заменены без ущерба для функциональности программы. Есть даже много программ, таких как GcPH, PseudoSigner и DotFix FakeSigner, которые пытаются обмануть упаковщики-упаковщики, как упомянуто выше. Некоторые из детекторов могут фактически обнаружить некоторые из этих анти-детекторов в игре с кошкой и мышей.

Вот пример того, как PEiD обнаруживает PseudoSigner для Delphi 3.0:

[PseudoSigner 0.1 [Borland Delphi 3.0] 
signature = 55 8B EC 83 C4 90 90 90 90 68 ?? ?? ?? ?? 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 
ep_only = true 
  0

хорошего ответ там усть версия дополнения MSVC компилятора может быть обнаружен с помощью RICH подписи вложенной в заголовке, можно посмотреть на Дэниел pistellis об этом 11 авг. 172017-08-11 08:56:50