Yayılma kodunu gizlemenin avantajları nelerdir?


12

Aklımdaki spesifik örnek şu anda alfa oyunu Minecraft'ı içeriyor, ancak bu genel bir soru, bence biraz konuşma gerektiriyor.

Minecraft Java ile yazılmıştır ve yığın izleri genellikle şöyle görünür (gerçek örnek):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Açıkçası bunlar geliştiricinin yazarken kullandığı gerçek paket ve yöntem adları değildir. Alfa aşamasında olduğu için, geliştiricinin özellikle bir hata raporu için bir tane sağlayabiliyorsa, yığın izlerini anlamayı sevmesi gerekir. Bunun anlamı, çoğunlukla anlamsızdır.

Daha zor hata tanımlamasının dezavantajlarının üstesinden gelen kodunu bu şekilde gizleyerek kazanmanın ne gibi bir avantajı olabilir?


1
Basitçe söylemek gerekirse, gizleme kodunuzu tersine mühendislik ekonomisini değiştirir , başka bir şey değildir.
Mark Booth

Yanıtlar:


22

Java kodumuzu da gizliyoruz ....

Avantajı, tersine mühendislik yapmayı zorlaştırır (birisinin kod tabanınızı çalması ve benzer bir rakip ürün oluşturmak için bir üs olarak kullanmasından endişe ediyorsanız, vb.).

Orijinal yığın izlemesini geri alabilirsiniz: gizlenmiş yığın izlerini çalıştırmak için kullanabileceğiniz özel referans dosyaları oluşturan gizleme araçları vardır ve orijinal kaynak yığını iziyle birlikte gelir. Bunlar gizleme işleminin kendisi tarafından üretilir, bu nedenle kodu ilk başta gizlemek için kullandığınız referans dosyasında elleriniz yoksa orijinal yığın izini geri alamazsınız.

Bunun dezavantajları yok. :)


3
İlginç, "yığın izini gizleme" (hiçbir zaman bir gizleme kullanmamış) ile geldiklerini hiç bilmiyordum ... ne güzel bir fikir :-)
Dean Harding

1
Şimdiye kadar karşılaştığım tek dezavantaj bazen bir obfuscator (bu durumda bir .NET biri), jitterun bile okuyamayacağı noktaya (yasadışı talimatlar) gizlendi. Büyük başarısız.
vcsjones

@vcsjones: Bu o zaman gerçekten şaşkın değil ...
yapılandırıcı

3
  • fikri mülkiyetin korunması

Çoğu obfuscator ayrıca kodunuzu optimize eder , kullanılmayan meta verileri kaldırır veya kullanılmayan kodu, sıkıştırma, ölü kod ortadan kaldırması veya yinelenen yok etme.


Böyle optimizasyonlar için bir obfuscator kullanmak zorundaysa, kullanılan derleyici gerçekten tembel bir yazılım parçası olmalıdır.
phresnel

@phresnel: Evet obfuscator oldukça iyi bir iş yapabilir

@phresnel: eksik, muhtemelen, ama berbat ...

Haklısın. Tekrar göndereyim.
phresnel

1
Sana inanmıyorum değil; Yaparım! Ancak tüm bu optimizasyonlar genellikle modern derleyiciler tarafından da uygulanır. En azından gcc'nin hepsine sahip olduğunu biliyorum. Benim düşüncem şudur: Bir obfuscator size gerçekten önemli bir hız kazandırırsa, derleyici [satıcı] yeterince denemedi veya uygun optimizasyon bayrakları verilmedi.
phresnel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.