exe / dll'nin C ++ /. Net / Java ile veya başka bir dilde yazılmış olup olmadığı nasıl anlaşılır? Bağımlılık yürüyüşçüsünü kullanmayı denedim ancak gerekli bilgileri alamadım.
exe / dll'nin C ++ /. Net / Java ile veya başka bir dilde yazılmış olup olmadığı nasıl anlaşılır? Bağımlılık yürüyüşçüsünü kullanmayı denedim ancak gerekli bilgileri alamadım.
( SO cevabımı benzer bir soruya yeniden gönderiyorum)
Çoğu durumda kodu derlemek için kullanılan derleyiciyi ve oradan da orijinal dili belirlemek mümkündür .
Çoğu dil uygulaması, dilin çeşitli üst düzey işlemlerini gerçekleştirmek için bir tür çalışma zamanı kitaplığı içerir. Örneğin, C dosya G / Ç işlemlerini ( fopen
, fread
vb.) Uygulayan CRT'ye sahiptir, Delphi'nin dizesi
için derleyici yardımcıları vardır. tür (birleştirme, atama ve diğerleri), ADA, dil güvenliğini sağlamak için çeşitli alt düzey işlevlere sahiptir. Programın kodunu ve aday derleyicilerin çalışma zamanı kitaplıklarını karşılaştırarak bir eşleşme bulabilirsiniz.
IDA bu yaklaşımı FLIRT teknolojisinde uygular. İmzaları kullanarak IDA, DOS ve Windows için başlıca derleyicilerin çoğunu belirleyebilir. Linux'ta biraz daha zordur çünkü onun için tek bir derleyici ikili sağlayıcısı yoktur, bu nedenle her dağıtım için imzaların yapılması gerekir.
Bununla birlikte, çalışma zamanı kitaplık koduna başvurmadan bile mümkün olabilir. kullanılan derleyiciyi tanımlamak için. Birçok derleyici, çeşitli işlemleri temsil etmek için çok farklı deyimler kullanır. Örneğin, Duqu virüsü için kullanılan derleyicinin daha sonra onaylanan Visual C ++ olduğunu tahmin edebildim.
mscorlib.dll
içe aktarımı olup olmadığını kontrol edin .net çerçevesi. Marco Pontello'nun TrID yazılımı genellikle bir dosyayı derlemek için neyin kullanıldığını belirleyebilir.
Java bayt kodu dosyaları, dosyanın başındaki sihirli sayılarıyla: 0xCAFEBABE
tanımlanabilir. Ayrıca standart adlandırma kuralı, bu dosyaların adlarının .class
ile bitmesidir.
Ancak, @hexafraction bir yorumda uyarır: "Java sınıf dosyalarının Bir .exe PE'ye paketlendiklerinde görünür olan sihirli sayı veya dosya uzantısı, paketten çıkarılmadıkları durumlar dışında (yalnızca ilk sırada paketlendikleri ve makine koduna yeniden derlenmedikleri varsayılarak) "
Stud_PE (ücretsiz), çok sayıda PE dosyası (.EXE ve .DLL) imzasını tarar.
PE başlıklarına bakarak .net derlemesini algılayabilirsiniz. Ayrıntılar için CLR spesifikasyonunu ve PE / COFFEE spesifikasyonunu okuyun.
Java, kendi sınıf dosya formatını kullanır. Pek aşina değilim, ancak bir sınıf dosyasını pozitif olarak tanımlamak mümkün olmalı.
Ana dil gelişimi çoğunlukla buluşsal yöntemlerle ilgilidir. Alışkanlıkları, prologları, epilogları vb. Çağırmak gibi şeyler. Demonte edilmiş özyinelemeli bir iniş artı bir deyim tanıyıcı muhtemelen kaynak derleyiciyi tanımlayabilir. Örneğin, GCC ve sınıf çok farklı bir kod üretir.
(bariz eklenti)
protectionid (pid.gamecopyworld.com) derleyici bilgilerini bildirir (yapılandırmada açın)
bunu yapmak için, bu çok yönlü
bayt kalıplarını kontrol etme
içe aktarmaları kontrol etme (mscoree.dll, msvcr * .dll ve benzeri)
giriş noktası kodunu kontrol etme
mz saplamasını kontrol etmek
bağlayıcı sürümünü kontrol etmek
ve birkaç başka şey
örnek çıktı
Tarama -> C: \ ProtectionID.source \ problematic.files \ çözüldü \ algılandı \ Agile.NET 6.2.0.16.AgileNETUnpackMe \ AgileUnpackMe.exe
Dosya Türü: 32 Bit Exe (Alt Sistem: Win GUI / 2), Boyut: 7680 (01E00h) Baytlar
[Dosya Buluşsal Yöntemleri] -> Bayrak: 00000100000001001101000000110000 (0x0404D030)
[Giriş Noktası Bölüm Entropisi]: 5.25 (bölüm # 0) ".text" | Boyut: 0x1288 (4744) bayt
[DllCharacteristics] -> Bayrak: (0x8540) -> ASLR | DEP | BURUN | TSA
[ImpHash] -> f34d5f2d4577ed6d9ceec516c1f5a744
[SectionCount] 3 (0x3) | ImageSize 0x8000 (32768) bayt
[VersionInfo] Ürün Adı: AgileUnpackMe
[VersionInfo] Ürün Sürümü: 1.0.4999.25574
[VersionInfo] Dosyası Açıklama: AgileUnpackMe
[VersionInfo] Dosya Sürümü: 1.0.4999.25574
[VersionInfo] Orijinal Dosya Adı: AgileUnpackMe.exe
[VersionInfo] Dahili Adı: AgileUnpackMe. exe
[VersionInfo] Yasal Telif Hakları: Telif Hakkı 2013
[Hata Ayıklama Bilgileri] (kayıt 1/1) (dosya konumu 0x1414)
Özellikler: 0x0 | TimeDateStamp: 0x522C69AD | MajorVer: 0 / MinorVer: 0 -> (0.0)
Tür: 2 (0x2) -> CodeView | Boyut: 0x57 (87)
AddressOfRawData: 0x3230 | PointerToRawData: 0x1430
CvSig: 0x53445352 | SigGuid A75CE0F5-0D67-4FC4-A2C612B95C81F742
Yaş: 0x6 | Pdb: c: \ AgileUnpackMe \ AgileUnpackMe \ obj \ x86 \ Debug \ AgileUnpackMe.pdb
[!] AgileDotNet algılandı
[CompilerDetect] -> .NET
[.] .Net Bilgisi -> v 2.5 | x86 yönetimli (/ platform: x86) | Bayraklar: 0x00000003 -> COMIMAGE_FLAGS_ILONLY | COMIMAGE_FLAGS_32BITREQUIRED |
[.] Giriş noktası (Token): 0x06000006
[.] MetaData RVA: 0x00002184 | Boyut: 0x00000C0C (3084)
[.] MetaData-> Sürüm 1.1 -> v2.0.50727
[.] İşaretler: 0x0 | Akışlar: 0x5 (5)