Soru:
JIT derlenmiş kodunu kullanan bir programı nasıl analiz edebilirim?
ŹV -
2013-03-23 23:38:10 UTC
view on stackexchange narkive permalink

Bugün karşılaştığım birçok kod, çalışma zamanında üretilen önemli miktarda kod içeriyor, bu da analizi son derece zahmetli ve zaman alıcı hale getiriyor.

Tarafından sunulan çeşitli işlevler için sembolik adlar oluşturmanın herhangi bir yolu var mı Kesilmeye devam eden JIT derleyicisi veya GDB veya WinDBG'deki JIT derleyicisi aracılığıyla yürütülebilir dosyaya eklenen çeşitli yapılar (tür bilgileri gibi) için mi?

Bence hangi derleyici / VM ile uğraştığınızı söylerseniz, cevaplaması daha kolay olacaktır.
Iki yanıtlar:
#1
+8
Peter Andersson
2013-03-24 01:47:00 UTC
view on stackexchange narkive permalink

.net için SOS.dll ve WinDbg var. %SYSTEMROOT%\Microsoft.NET\Framework\ 'deki alt klasörlerde kurulu .NET çerçevelerinin her sürümü için sürümler bulabilirsiniz. .load ve SOS dll'nin tam yolunu yazarak WinDbg'ye yükleyebilirsiniz.

Sınıfın yöntem tablosunu almak için ! name2ee , yöntem tablosunu dökmek için ! dumpmt , ! dumpmd kullanın Bakmak istediğiniz yöntemin yöntem tanımlayıcısını boşaltın, CodeAddr JIT'li kodun adresidir ve son olarak ! U kod adresini parçalara ayırmak için.

İşte bir bağlantı süreci açıklayan bir blog.

JIT tarafından derlenen koda saldırmaktan ne kazanacağınızdan emin değilim, çünkü neredeyse her zaman kaynak sanal makine daha basit ve ağırlıklı olarak açıklamalı. Ara dile saldırmak neredeyse her zaman daha kolaydır. Aklıma gelen tek neden, şaşırtmayı ortadan kaldırmak için JIT optimizasyonlarını kullanmak isteyip istemediğinizdir. O zaman bile optimizasyon geçişlerini ara dile uygulamak muhtemelen daha kolaydır. Sanırım, JIT kodunu bir tür istismarda yeniden kullanılabilecek şekilde masaj yapmak istediğinizde de bir durum var.

Soruyu yanlış mı anlıyorum?

#2
+1
Pavel Sapehin
2019-10-12 08:15:07 UTC
view on stackexchange narkive permalink

Evet, cevap tam olarak neyi başarmaya çalıştığınıza bağlıdır.

.NET uygulamasının kendisini analiz etmek açısından, ör. JetBrains tarafından yazılan DotPeek. Hatta bunu tamamen işlevsel bir Visual Studio Projesine aktarabilir, derleyebilir ve hata ayıklayabilirsiniz. Ancak, bazı uygulamalar karmaşık hale gelebilir.

Başka bir senaryo, .NET uygulamasının başka bir dilde yazılmış başka bir uygulamanın parçası olmasıdır (ör. C ++). Bu durumda, büyük olasılıkla .NET kodu, DotPeek gibi uygulamalar kullanılarak demonte edilebilen DLL'de derlenir.

Muhtemelen, özel bir JIT derleyicisi gibi çok daha karmaşık senaryolar var olabilir. bir kötü amaçlı yazılım. Bu gibi durumlarda, en mantıklı yol, özel bir eklenti yazmak olabilir (örneğin, IDA Pro için IDAPython kullanarak). Bu eklenti, veri yapılarının veya davranışlarının farkında olmalıdır ve tersine mühendislik sürecinin her adımında size yardımcı olabilir. Ancak özel bir eklenti yazmak, temel dil hakkında çok fazla bilgi sahibi olmayı gerektirebilir ve kendi başına bir zorluk olabilir.



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