Derleyici sürümünü tam anlamıyla bağlayıcı sürümü yerine derleyici sürümünü kastetmediğiniz sürece, derleyici sürümünü belirlemek için yapmanız gereken ilk şey, yürütülebilir dosyanın PE başlığının "MajorLinkerVersion" ve "MinorLinkerVersion" alanlarını incelemektir. , DLL veya SYS. Aşağıdaki listeye bakın.
Major Minor
0x5 0x0 (5.0) Borland C ++ / MS Linker 5.0
0x6 0x0 (6.0) Microsoft VIsual Studio 6
0x7 0xA (7.10) Microsoft VIsual Studio 2003
0x8 0x0 (8.0) Microsoft VIsual Studio 2005
0x9 0x0 (9.0) Microsoft VIsual Studio 2008
0xA 0x0 (10.0) Microsoft VIsual Studio 2010
0x2 0x15 (2.21) MinGw
0x2 0x19 (2.0.0.25) Borland Delphi (bağlayıcı 2.0.0.25)
Maalesef paketleyiciler ve koruyucular, kendi değerlerini yazmak ve / veya orijinal derleyiciyi tahmin etme sürecini sertleştirmek için bu değerlerin üzerine yazma eğilimindedir.
Ayrıca, çalıştırılabilir bir dosyanın kaynak dizini, belirli bağlayıcı bilgilerini aramak için iyi bir yerdir. Örneğin. "DVCLAL" adlı bir kaynağa sahip olan RT_RCDATA, Borland C ++ veya Delphi'nin bir işaretidir ve MSVC ile oluşturulmuş bir yürütülebilir dosya olması durumunda "RT_MANIFEST", bağlantılı olduğu çalışma zamanı DLL'sinin özel sürümü ve dolayısıyla derleyici sürümü hakkında bize bilgi verebilir.
Ayrıca, "TimeDateStamp" alanı 0x2A425E19 olarak ayarlanmış bir yürütülebilir dosya, Delphi ile oluşturulduğunun bir işaretidir.
Şimdi, derleyiciyi derleme kodundan belirlemek istiyorsanız, ardından işareti MSVC derleyici sürümünün yeni sürümlerinden biri, yığın çerezini oluşturan işlevi giriş noktasında görüyor.
Giriş noktasında bir JMP talimatı ve ardından "fb: C ++ Hook" bir Borland C ++ işareti vb.