Soru:
İkili dosyaları genel bir şekilde açma
Remko
2013-03-20 20:25:47 UTC
view on stackexchange narkive permalink

Giderek daha fazla ikili dosyaların upx, aspack vb. exe koruyucularla paketlendiğini görüyorum. Bunları nasıl açacağıma dair birkaç öğretici izlemeye çalıştım, ancak örnekler genellikle oldukça kolayken hedeflerim öyle değil.

Hedeflerin nasıl açılacağına dair iyi kaynaklar ve herhangi bir ipucu / ipucu arıyorum.

[Lena tutorials] (http://tuts4you.com/download.php?list.17), birçok paketleyicide göreceğiniz birçok teknik üzerinde çalışacaktır. Daha çok kırmaya odaklanan bazı öğreticiler var, ancak bunlar da genellikle iyi bilgilere sahip.
Şunları biliyor musunuz: [Ether: Donanım Sanallaştırma Uzantıları aracılığıyla Kötü Amaçlı Yazılım Analizi] (http://ether.gtisc.gatech.edu/)
üç yanıtlar:
#1
+63
Igor Skochinsky
2013-03-20 23:57:25 UTC
view on stackexchange narkive permalink

Genel bir ambalaj paketleyicisini veya şifreleyiciyi paketinden çıkarmak genellikle aşağıdaki adımları içerir:

1. Muhtemelen hata ayıklama önleme denetimlerini atlayarak veya atlayarak kodu izleyin.

Bu, basit paketleyiciler için zor değildir, ancak daha gelişmiş olanlarda yanıltıcı olabilir. Zamanlama kontrolleri ( rdtsc ), istisna tabanlı kontrol aktarımı, hesaplamalar için hata ayıklama kayıtlarını kullanma vb. Kullanabilirler. Burada bir sanal makine veya emülatör kullanmak çoğu zaman bunların çoğuna karşı yardımcı olur.

2. Orijinal giriş noktasını (OEP) bulun

Bunu yapmanın birçok yolu vardır. Bazen OEP'ye atlama, bir yığın döngü kodunu takip ettiğinde ve ona makul görünen hiçbir şey olmadığında açıktır. Veya farklı derleyiciler tarafından üretilen giriş noktalarına aşina iseniz OEP'deki kodu tanıyabilirsiniz. Birkaç numara daha:

  1. Paketleyici paketi açmadan önce orijinal kayıtları kaydederse, yığındaki konumuna bir donanım kesme noktası ayarlayın. OEP'ye geçmeden önce geri yüklenir.

  2. İzleme sırasında paketlenmemiş kodun yazılmakta olduğu belleği tanımlayabilirseniz, bu bellek aralığında bir sayfa yürütme kesme noktası ayarlayın - bu, atlama. IDA böyle bir kesme noktası belirlemenize olanak tanır ve bence OllyDbg de.

  3. Başlangıç ​​kodu tarafından kullanılan yaygın API'lerde kesme noktaları ayarlayın, ör. GetCommandLine veya GetVersionEx . Bu size tam OEP'yi vermez, ancak genellikle çağrı yığınına geri dönebilir ve az çok kolayca bulabilirsiniz.

3. Paketlenmemiş kodu boşaltın

IDA kullanıyorsanız, aslında dosyayı ayrı bir dosyaya dökmenize gerek yoktur - kopyalanacak bir bellek anlık görüntüsü almak yeterlidir baytları bellekten veritabanına aktarır, böylece onları daha sonra analiz edebilirsiniz. Burada akılda tutulması gereken bir nokta, paketleyici dinamik olarak ayrılmış bellek kullanıyorsa, anlık görüntüye dahil edilmesi için bunu "yükleyici" olarak işaretlemeniz gerektiğidir. Daha fazla buradan.

4. İçe aktarımları geri yükleyin

Olly'de veya başka bir hata ayıklayıcıda nasıl yapıldığını pek bilmiyorum, ancak AFAIK, dökümünüzde ImpREC gibi bir araç ve hafızadaki sürecin bir kopyasını kullanmanız gerekiyor.

Bu biraz daha basit (IMO) IDA'da. İçe aktarma tablosunu bulmanız ve işaretçileri şu anda işaret ettikleri işlevlere göre yeniden adlandırmanız gerekir (bu, hata ayıklayıcı etkinken yapılmalıdır). renimp.idc komut dosyasını veya UUNP "manuel yeniden yapılandırma özelliğini" kullanabilirsiniz ( buraya bakın).

İçe aktarma tablosunu bulmak için iki numara var I bazen şunu kullanın:

  • harici API'leri bulmak için OEP'deki başlangıç ​​kodundaki bazı çağrıları izleyin ve bu sizi içe aktarma tablosuna yönlendirmelidir. Genellikle tablonun başlangıcı ve sonu bellidir.

  • Paketi açarken GetProcAddress üzerinde bir kesme noktası belirleyin ve sonuçların nereye yazıldığını görün. Ancak bu, dışa aktarma dizinini kullanarak el ile içe aktarma iptali kullanan paketleyicilerde çalışmaz. Kernel32'nin dışa aktarma tablosuna okunan bir BP koymak burada yardımcı olabilir.

5. Temizle

Bu isteğe bağlıdır, ancak yalnızca dikkatinizi dağıtacak paketleyici kod kalıntılarını kaldırmak yararlı olabilir. IDA'da, kullanılan derleyiciyi tanırsanız, bir derleyici FLIRT imzası da uygulamalısınız.

6. Paketlenmemiş bir yürütülebilir dosya oluşturma

Bu adımı, nadiren paketlenmemiş dosyayı çalıştırmam gerektiğinden yapmıyorum, ancak genel olarak, dosyadaki bölüm kodunun ofsetleri bunlarla eşleşecek şekilde PE başlığını çöplükte.


Şimdi, yukarıdaki adımların kapsamadığı birçok varyasyon ve püf noktası var. Örneğin, bazı paketleyiciler başlangıçta içe aktarmaları tam olarak çözmezler, ancak ilk çağrıda içe aktarmayı çözen saplamalara atlamalar yapar ve ardından bir sonraki sefer doğrudan hedefe gidecek şekilde yamalar. Bir de OEP'i bulmayı ve kurtarmayı zorlaştıran "çalınan kod" yaklaşımı vardır. Bazen paketleyici kendisinin bir kopyasını çalıştırır ve hata ayıklamasını yapar, böylece ona kendi hata ayıklayıcınızı ekleyemezsiniz (bu, emülatör veya Intel PIN gibi hata ayıklama API'leri kullanmayan bir hata ayıklayıcı kullanılarak çözülebilir). Yine de, özetlenen adımlar orada olanların çoğunu kapsayabilir.

Elias'ın Hafif Kompresörü ambalajından çıkarma sürecini gösteren videoyla bitireceğim: https: //www.hex -rays.com/video/bochs_video_2.html

iyi cevap (+1) ve şüphesiz IDA genel olarak RCE'de büyük bir rol oynuyor, ancak cevabınızı sadece IDA ile sınırlamamanız gerektiğini düşünüyorum (evet, ImpRec ve OllyDbg'den bahsettiğini gördüm).
@0xC0000022L: Maalesef OllyDbg'de paketten çıkarmaya aşina değilim, sadece teoride biliyorum. Ancak cevabımın çoğunun herhangi bir hata ayıklayıcı ile kullanılabileceğini düşünüyorum (aslında, bunun IDA ile "sınırlı" olduğunu söyleyemem). Yine de, özellikle OllyDbg'de ambalajın açılmasıyla ilgili kendi cevabınızı ekleyebilirsiniz!
güzel cevap, işte bir araç: http://ether.gtisc.gatech.edu/
@IgorSkochinsky IDA'yı burada ele aldığınız için gerçekten çok mutluyum çünkü açıkçası bunu Olly / x64'te Tuts4You'da ve başka yerlerde nasıl yapacağınıza dair bir sürü bilgi var, ancak IDA Pro'da bunun nasıl yapılacağı hakkında pek bir şey yok. IDA Pro'da bu sorunu tamamen çözmenin tamamen yeni bir yolunu öğrendiğim için bunun için çok müteşekkirim. Bu sorunu çözmek için bu gönderiden daha yeni IDA Pro öneriniz var mı (eklentiler / bloglar / vb.)? Teşekkür ederim Igor.
#2
+13
94c3
2013-03-22 05:28:10 UTC
view on stackexchange narkive permalink

Igor'un cevabı çok güzel. Bununla birlikte, özetlenen teknikler, bir noktada yürütülebilir dosyanın bellekte paketinden çıkarıldığı varsayımına dayanır. Bu her zaman doğru değildir. Sanallaştırma gizleyicileri, çalışma zamanında bir simülatör tarafından yürütüldüğünde orijinal ikiliyi özel bir komut kümesinde derler. Bu şekilde karmaşık hale getirilmiş bir ikili programla karşılaşırsanız, özel komut setinden anladığınız bir komut setine bir sökücü yazmaktan başka seçeneğiniz yoktur.

Evet, paketleyicilerden bahsettiğimi söylemiştim.
Teknik olarak sanal makine koruyucuları bile dosyayı bellekte paketlenmemiş halde bırakır, yani hala "paketleyici" olarak çalışırlar. Tek fark, "gözle görünür durumda" olsa bile, bir VM tarafından korunan kodu anlamanın çok daha zor olmasıdır.
@newgre: hepsi aynı anda her şeyi açmaz. Yani sadece küçük parçalara sahip olabilirsiniz.
Hangi sanal makine paketleyicileri bunu yapar?
newgre, bellekteki tek şey rastgele bir komut kümesi için bayt kodu olduğunda Igor'un işleminin 3. adımının nasıl mümkün olduğunu açıklayabilir misiniz? Bu şekilde korunan bir yürütülebilir dosyayı dökmenin tek yolu, bayt kodu için bir çözücü yazmaktır.
Böyle bir ikili dosyayla karşılaştığınızda birkaç seçenek var, işte bir tane - https://github.com/jnraber/VirtualDeobfuscator
#3
+5
rj_
2014-05-10 15:00:42 UTC
view on stackexchange narkive permalink

Blackstorm portalında büyük bir Paket Açma eğiticileri koleksiyonu vardır Blackstorm portalı eğiticileri

Tuts4You, başka bir büyük paket açma eğitimleri koleksiyonuna sahiptir Tuts4You

İlk başta uzun zamanımı aldı ama zamanla ambalajı açmak çok daha kolay hale geldi, yine de çok sabır ve pratik gerekiyor.



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