Soru:
Bir dosyanın yönetilen kod olup olmadığını belirleme
Jannu
2013-04-05 22:54:15 UTC
view on stackexchange narkive permalink

Sahip olduğum bir EXE veya DLL kodunun yönetilip yönetilmediğini nasıl hızlı bir şekilde anlarım?

Son zamanlarda bir dosyayı parçalarına ayırmaya çalışırken biraz zaman geçirdim ve daha sonra koddaki bazı izlerden öğrendim tüm bu işi atlayıp sadece ILspy kullanabilirdi. Bu deneyimi gelecekte tekrarlamaktan nasıl kaçınabilirim?

Sekiz yanıtlar:
peter ferrie
2013-04-06 01:38:14 UTC
view on stackexchange narkive permalink

PE başlığında offset 0xE8 (32-bit) veya 0xF8 (64-bit) 'de dword'ü kontrol edin. Sıfır değilse, CLR başlığının göstericisidir. Bu, yönetilen bir dosyadır (buraya rastgele veri koyamazsınız çünkü doğrudan .NET ayrıştırma desteği XP ve sonrasında yerleşiktir, bu nedenle veriler geçerli değilse dosya yüklenmez). Mscoree.dll'nin varlığı tek başına yeterli değildir, çünkü uygulama yönetilen dosyalarla bir şeyler yapıyor ancak kendi başına yönetilemiyor olabilir.

Bu cevap en yüksek faturalandırmayı hak ediyor. Cevabı, beyninizin yanı sıra ekstra alet YOK ve PE başlığı bilgisi ile almanızı sağlar.
Ofset, PE32 veya PE32 + olmasına bağlı olarak farklı olabilir.
@Veitch, Sonunda cevabımı bunu içerecek şekilde düzenledim.
Bilginize Bu, @broadway's cevabına ve Karsten Hahn'ın cevabına eşdeğerdir: offset 0xe8 veya 0xf8, IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR'un VirtualAddress'idir.
@pts'de önemli bir fark vardır: #define kullanılması, 32 bitlik bir programın yalnızca 32 bitlik bir programı tanıyacağı, 64 bit ise yalnızca 64 bit'i tanıyacağı anlamına gelir. Bu yüzden sabit kodlanmış değerleri kullanmayı önerdim.
N3mes1s
2013-04-06 01:29:55 UTC
view on stackexchange narkive permalink

Yönetilen bir DLL / Uygulama, MSCOREE.dll üzerinde birincil bağımlılığa sahip olacaktır ... Bu nedenle, DLL'yi Bağımlılık Yürütücüsü'nde açarsanız, yönetilmeyen bir kitaplıktan yönetilen bir kitaplığı söylemekte sorun yaşamazsınız. >

  http://www.dependencywalker.com/

buradan

alıntıdır

ve diğer yararlı bağlantı: msdn; msdn2

Broadway ve Peter Ferrie'nin yanıtlarına bakın. Mscoree.dll bağımlılığını denetlemek biraz güvenilirdir, ancak% 100 değildir.
Onaylamak için, mscoree.dll dosyasını içe aktaran ve hatta sahte .NET görünümlü EntryPoint'e sahip, ancak .COM içermeyen [PoC'ler] (https://code.google.com/p/corkami/source/detail?r=1595) yaptım dizin.
Bu çok yapıcı bir yorum değil. Bu soru için COM dizininin içe aktarmalardan veya EntryPoint'ten daha güvenilir bir gösterge olduğunu kanıtlamaya çalışıyorum.
broadway
2013-04-06 04:44:21 UTC
view on stackexchange narkive permalink

PE başlığının veri dizini kısmındaki DataDirectory [IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR] .VirtualAddress 'i sıfırdan farklı bir değer için kontrol etmek muhtemelen en hızlı yoldur.

#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Çalışma zamanı tanımlayıcısı

Referanslar:

Benim kullandığım yöntem bu. Veri Dizini dizisinin 14. üyesi, gönderide listelenmediği için IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR'dur. Bunun gibi mutlak referansları caydırmalıyız.
bir onaltılık düzenleyicinin veri dizinleri kavramı yoktur, dolayısıyla mutlak uzaklıktır.
onaltılık düzenleyiciye bağlıdır, gerçekten. 010, PE şablonlarına sahiptir.
waliedassar
2013-06-28 13:22:23 UTC
view on stackexchange narkive permalink

Manuel olarak, PE başlığında aşağıdaki işaretleri görmeyi tercih ediyorum:

1- mscoree! _CorExeMain öğesinin içe aktarma tablosu .

2- CLR Başlığının Sanal Adresi ve Boyutu / * Com Tanımlayıcı * veri dizini ayarlandı. Boyut 0x48”.

3- Base Relocation veri dizininin boyutu 0x0C olarak ayarlandı, yani Yalnızca bir hata düzeltme.

Ayrıca, küçük bir işaret şudur:

4- SectionAlignment 0x2000 olarak ayarlanmış.

Peter Andersson
2013-04-05 23:01:01 UTC
view on stackexchange narkive permalink

Önce ILSpy'da açmayı deneyin. Montajın yönetilip yönetilmediğini size söylemelidir.

Bu, ILSpy'ın onu açabileceği anlamına gelir, bu her zaman böyle değildir.
Derleme yönetilmezse ILSpy'ın belirli bir mesajı vardır. Başka bir nedenden dolayı yüklenemezse, eminim farklı bir mesaj vardır :) ILSpy'nin yönetilmediğini söylediği yönetilen bir derleme gösterebilir misiniz?
PE'yi yükleyemezse (yönetilen kodla veya değil), bazı Mono.Cecil.PE.ImageReader hatası verir. [TinyNet] (https://code.google.com/p/corkami/source/browse/trunk/src/PE/tinynet.asm?r=1596#44), küçük bir NumOfRVA'ya sahip olmanın yaygın kötü amaçlı yazılım hilesini kullanıyor COM dizinini gizler - bu da ILSpy’i başarısız olur - yönetilen kod kullanıyor olsa bile.
0xC0000022L
2013-04-05 22:59:54 UTC
view on stackexchange narkive permalink

Şu ana kadar bulduğum en hızlı sezgisel yöntem, mscoree.dll dosyasını içe aktarıp aktarmadığını kontrol etmekti.

mscoree.dll sürüm kaynağında Microsoft buna Microsoft .NET Runtime Execution Engine adını verir.

Hayır, bu işe yaramaz, çünkü diğer birçok yürütülebilir dosya da yönetilen derlemeler olmayan mscoree.dll'den içe aktarılır.
Karsten Hahn
2014-05-27 16:33:58 UTC
view on stackexchange narkive permalink

Peter feribotlarının yanıtına ek olarak, aynı şeyi kontrol etmek için bazı python kodları:

  import sysdef unpack (bayt): dönüş toplamı ([ord (b) << (8 * i) i, b için numaralandırmada (bayt)]) eğer len (sys.argv) == 1: print >> sys.stderr, "Girdi dosyası verilmedi!" else: myfile = sys.argv [1] open (myfile, "r") f: f.seek (0x3c) peoffset = unpack (f.read (2)) optoffset = peoffset + 24 f.seek (optoffset) magic = f.read (2) offset = -1 eğer magic = = '\ x0b \ x01': offset = 208 + optoffset else: offset = 224 + optoffset f.seek (offset) clr_address = unpack (f.read (4)) eğer clr_address == 0: "yönetilen yürütülebilir dosya yok" ise yazdır : "yönetilen yürütülebilir" yazdır  
Neutrino
2013-10-25 01:39:16 UTC
view on stackexchange narkive permalink

CorFlags.exe, Windows SDK ile birlikte gelen bir yardımcı programdır. Söz konusu dosyanın adını aktarmayı yürütün ve bu, yönetilen bir dosya ise, size Dotnet çerçevesinin hangi sürümünü kullandığını ve dosyanın tümünün yönetilen kod mu yoksa karma mod mu olduğunu, imzalı olup olmadığını ve birkaçını söyleyecektir. diğer yararlı bilgiler.



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