Soru:
Unix platformlarında anti-hata ayıklama teknikleri?
perror
2013-03-20 14:13:52 UTC
view on stackexchange narkive permalink

Unix platformunda (yani POSIX ve biraz daha fazlası) hata ayıklayıcının kullanımını engellemek için olası tüm teknikleri taramaya çalışıyorum.

PTRACE gibi teknikler hakkında düşünüyorum. bir programın başlangıcında (veya yürütülmesinin çeşitli noktalarında), sahte kesme noktalarının (ör. int3 / 0xcc x86 işlem kodu) eklenmesi veya zamanda test kontroller. Ancak, programın analizini yavaşlatmak için programda tanımlanan küresel stratejiler de var.

Şimdilik, hata ayıklama önleme tekniği anlaşılır anlaşılmaz, İnternette bulduğum tüm teknikler üzerinde kolayca çalışıldı. . Bu yüzden daha güçlü olup olmadığını merak ediyorum.

"İnternette bulduğum tüm teknikler, anti-hata ayıklama tekniği anlaşılır anlaşılmaz kolayca üzerinde çalışıldı" <- çoğu için durum budur, ancak sırf bu yüzden onları azaltmak için bir neden değildir.
[Bu] [1] konuyu kontrol etmek isteyebilirsiniz. [1]: http://reverseengineering.stackexchange.com/questions/1930/detecting-tracing-in-linux
Iki yanıtlar:
#1
+20
Igor Skochinsky
2013-03-21 00:27:37 UTC
view on stackexchange narkive permalink

İşte gördüğüm veya duyduğum bazı şeyler:

  • Bölüm başlıklarını çıkarmak. GDB'nin ölümünü izinde durduran basit ve tamamen yasal bir işlem. Diğer bazı hata ayıklayıcılara karşı çalışmaz (örneğin IDA). sstrip aracı kullanılarak yapılabilir.

  • Syscall işlevi veya doğrudan sistem çağrı talimatları kullanılarak ptrace () gibi belirli işlevleri çağırmak yerine. Kesme noktasını sistem çağrısı işlevinde ayarlayarak veya dosyada yalnızca adım atarak yenilebilir, ancak bunu bilmiyorsanız açık olmayabilir.

  • main () 'den önce hata ayıklama önleme eylemlerinin gerçekleştirilmesi, ör. küresel nesnelerin yapıcılarında veya __öznitelik __ ((yapıcı)) kullanarak. GDB genellikle main () içinde başlangıç ​​kesme noktasını ayarladığından, varsayılan durumu dikkate alır. Çözüm basittir: Gerçek dosyanın giriş noktasına kesme noktası koyun (GDB'de bilgi dosyası ).

  • SIGTRAP gibi hata ayıklamayla ilgili sinyalleri kendi kendine gönderme . (GDB'de handle SIGTRAP nostop ile bunun göz ardı edilebileceğini unutmayın.)

  • ptrace ile çatallanma ve kendini izleme.

  • Sahte kesme noktası ekleme: int3 / 0xcc eklemek, hata ayıklayıcıyı yazılım kesme noktaları olarak değerlendirileceklerinden bu baytları durdurmaya zorlar. Çok sayıdaysa analizi önemli ölçüde yavaşlatabilir.

  • Kırılma noktası tespiti: Bu tekniği bu makalede gördüm, bir kesme noktası kodlandığında tetiklenecek. Bu makale aynı zamanda diğer bazı püf noktalarını da içermektedir.

Tamam, bu makul bir teknik listesi gibi görünüyor ama şimdiye kadar şaşırtıcı değil. Ve, kesme noktası hilelerini kaçırıyorsunuz (PTRACEd olduğunda hata ayıklayıcının kafasını karıştırmak için sahte kesme noktalarının eklenmesi ve yeni yazılım kesme noktalarının eklenip eklenmediğini görmek için sonraki kod bloğunun karmasını kontrol etme). Ancak, Unix için tüm bu teknikleri açıklayan bir makale biliyor musunuz (MS-Windows için bazı makaleler biliyorum ama Unix sistemleri için hiçbiri yok).
@Emmanuel:'yi düzenlemek ve daha fazlasını eklemek için çekinmeyin, bu yüzden onu bir wiki yaptım. Herhangi bir kağıdın farkında değilim, ama muhtemelen Phrack gibi bir şeyde daha fazla numara bulabilirsin.
IDA'm, bölüm başlıkları çıkarılmış bir ARM ikili dosyasını yüklemeye çalışırken öldü. Bu yüzden 1 numara hala yararlı bir numara olabilir (sonuçta başlıkları yeniden oluşturmak için bir komut dosyası yazmış olsam da).
@nneonneo: mevcut sürümde bu gerçekleşirse, lütfen bir hata raporu gönderin. Teşekkürler.
Gerçek eğlence fork ve ptrace () 'i IPC'nin bir biçimi olarak kendinizde kullanın.
#2
+9
Andrew
2013-03-20 19:31:52 UTC
view on stackexchange narkive permalink

Hata ayıklama teknolojisine dair anlayışım, bunun bir kedi ve fare (veya kedi ve ayrıca kedi) oyunu olduğudur. Bir teknik, karşı taraf tarafından anlaşılana kadar çalışır ve sonra artık çalışmaz. Nihayetinde avantajın hata ayıklayıcı tarafında olduğunu düşünüyorum. Dinamik ikili enstrümantasyonu veya sanal makine sistemlerini düşünün. Platformun öykünmesindeki çatlakları veya hataları arayarak DBI veya öykünme varlığını tespit edebilirsiniz, ancak bunlar yalnızca öykünme / çeviri yazılımındaki hatalardır. "Mükemmel" bir öykünme sisteminiz varsa, hata ayıklanmış bir uygulama izlendiğini bilemez mi?

Bence yapabileceğiniz en iyi şey, kolayca çözülebilen küçük şeyler. Shiva sisteminin hala Unix platformlarında hata ayıklamaya karşı "tamam" korumayı temsil ettiğini düşünüyorum, çünkü kendisinin küçük bölümlerinin şifresini istendiğinde çalıştırmak için çözüyor ve hatırladığım kadarıyla onları yeniden şifreliyor.

Shiva sistemini gelişmiş bir paketleyici olarak etiketlerdim, ancak gerçekten bir anti-hata ayıklama tekniği olarak etiketlemezdim (ana etkisi bir hata ayıklayıcının kullanımını son derece sıkıcı hale getirmek olsa bile, çünkü kesme noktalarını etkili bir şekilde ayarlayabileceğiniz bellekteki pencereniz ile karşılaştırıldığında son derece küçüktür. "normal" bir program).


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