Soru:
Hangi dilde / teknoloji programında (.exe) yazıldığını nasıl öğrenebilirim?
Pranit Kothari
2014-01-05 13:02:17 UTC
view on stackexchange narkive permalink

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.

Çalıştırılabilir dosyayı oluşturmak için kullanılan derleyici genellikle kendisi hakkında bazı açık dizeler bırakır. Çalıştırılabilir dosyada kalan fazladan bölümlere bakmaya çalışın. Ve ikinci olarak, açık bir etiket kalmazsa, assembler'ı üretmek için kullanılan ABI'yi tanıyarak orijinal dili (ve muhtemelen derleyiciyi) çıkarabileceksiniz.
Bir programın birden fazla dilde yazılabileceğini ve ardından bir ikiliye dönüştürülebileceğini veya dışa aktarılabileceğini hatırlamakta fayda var.
Mandiant'ın Kırmızı Perdesi bu işleve sahipti, acaba orada yaptıklarını tersine çevirebilir misiniz?
Yedi yanıtlar:
Igor Skochinsky
2014-01-05 15:44:47 UTC
view on stackexchange narkive permalink

( 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.

PhoeniX
2014-01-05 15:36:30 UTC
view on stackexchange narkive permalink
  1. .NET, bağımlılık warker kullanarak görebileceğiniz içe aktarma yoluyla tanımlanabilir - çekirdek kitaplık olan mscorlib.dll içe aktarımı olup olmadığını kontrol edin .net çerçevesi.
  2. C ++,
    1. derlemeye bakılarak tanımlanabilir - bu çağrı kuralını kullanır.
    2. PEid, hangi derleyicinin ve çalışma zamanının kullanıldığı hakkında kısmi bilgi gösterebilir. Genelde bunun için imza listesi kullanır.
    3. Detect It Easy - bu araç hala korunur ve oldukça ilginç özelliklere sahiptir.
Bazı nedenlerden dolayı "PEid" i geri alamıyorum. Windows Defender, kötü amaçlı yazılım olarak kaldırır.
Avery3R
2014-01-05 13:23:29 UTC
view on stackexchange narkive permalink

Marco Pontello'nun TrID yazılımı genellikle bir dosyayı derlemek için neyin kullanıldığını belirleyebilir.

Not: yalnızca ticari olmayan kullanım için ücretsizdir
Nasıl kullanılacağına dair bir rehberiniz var mı? Ana programı indirdim ancak gerektirdiği tanımların veritabanını ayrı bir paket olarak bulamıyorum? Tanımların web sitesinde nerede olduğunu görüyorum, ancak bunları nasıl indireceğimi bulamadım.
Def indirme, ana program indirmesinin hemen altındadır
jcora
2014-01-11 03:40:58 UTC
view on stackexchange narkive permalink

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) "

Java sınıf dosyalarının sihirli numaraları veya dosya uzantıları bir .exe PE'ye paketlendiklerinde, paketlenmemiş olmaları dışında görünür olmayacaktı (ilk etapta paketlendikleri ve makine koduna yeniden derlenmedikleri varsayılarak)
Thomas Weller
2014-01-06 02:58:13 UTC
view on stackexchange narkive permalink

Stud_PE (ücretsiz), çok sayıda PE dosyası (.EXE ve .DLL) imzasını tarar.

Scott Wisniewski
2014-01-07 15:59:46 UTC
view on stackexchange narkive permalink

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.

evlncrn8
2014-09-05 01:00:15 UTC
view on stackexchange narkive permalink

(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)

  • Tarama Yapıldı: 0.156 Saniye [00000009Ch (156) onay] [539 tarama tamamlandı]


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...