Apa keuntungan dari kode rilis yang membingungkan?

12

Contoh spesifik yang ada dalam pikiran saya melibatkan permainan Minecraft saat ini-alpha, tetapi ini adalah pertanyaan umum yang saya pikir memerlukan beberapa percakapan.

Minecraft ditulis dalam Java, dan tumpukan jejak biasanya terlihat seperti ini (contoh nyata):

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)

Jelas ini bukan paket asli dan nama metode yang digunakan pengembang ketika ia menulis. Karena ia berada dalam tahap alfa, tampaknya pengembang harus dapat memahami jejak tumpukannya, terutama jika seseorang dapat menyediakan satu untuk laporan bug. Karena ini berdiri, sebagian besar tidak ada artinya.

Keuntungan apa yang bisa diharapkan seseorang dengan mengaburkan kodenya seperti ini yang mengatasi kelemahan dari identifikasi bug yang lebih sulit?

StrixVaria
sumber
1
Sederhananya, kebingungan mengubah ekonomi rekayasa balik kode Anda, tidak lebih.
Mark Booth

Jawaban:

22

Kami mengaburkan kode Java kami juga ....

Keuntungannya adalah membuat lebih sulit untuk melakukan rekayasa ulang (jika Anda khawatir seseorang mencuri basis kode Anda dan menggunakannya sebagai basis untuk membuat produk pesaing yang serupa, misalnya, dll).

Anda bisa mendapatkan jejak tumpukan asli kembali: ada alat kebingungan di luar sana yang membuat file referensi khusus yang dapat Anda gunakan untuk menjalankan jejak tumpukan dikaburkan, dan itu keluar dengan jejak tumpukan sumber asli. Ini dihasilkan oleh proses kebingungan itu sendiri, jadi Anda tidak bisa mendapatkan jejak tumpukan asli kembali kecuali Anda memiliki tangan pada file referensi yang Anda gunakan untuk mengaburkan kode di tempat pertama.

Ini tidak memiliki kerugian sebenarnya. :)

Tabel Bobby
sumber
3
Menarik, saya tidak pernah tahu mereka datang dengan "tumpukan jejak un-kebingungan" (karena tidak pernah menggunakan obfuscator) ... ide yang bagus :-)
Dean Harding
1
Satu-satunya kelemahan yang pernah saya temui adalah kadang-kadang sebuah obfuscator (.NET dalam hal ini) mengaburkannya ke titik di mana jitter bahkan tidak bisa membacanya (instruksi ilegal). Gagal besar-besaran.
vcsjones
@ vcsjones: Itu tidak benar-benar membingungkan ...
konfigurator
3
  • melindungi Anda kekayaan intelektual

Kebanyakan obfuscator juga mengoptimalkan kode Anda , menghapus metadata yang tidak berguna atau tidak menggunakan kode, kompresi, penghilangan kode mati, atau penghapusan duplikat.


sumber
Jika seseorang harus menggunakan obfuscator untuk optimisasi semacam itu, kompiler yang digunakan haruslah perangkat lunak yang benar-benar malas.
phresnel
@pheapnel: Ya obfuscator dapat melakukan pekerjaan yang cukup bagus
@phrnelnel: tidak lengkap, mungkin, tapi jelek ...
Kamu benar. Biarkan saya memposting ulang.
phresnel
1
Bukannya aku tidak percaya padamu; Saya lakukan! Tetapi semua optimasi itu biasanya juga dilakukan oleh kompiler modern. Setidaknya aku tahu gcc memiliki semuanya. Jadi pendapat saya adalah: Jika obfuscator benar-benar memberi Anda peningkatan yang signifikan, daripada [vendor] kompiler tidak berusaha cukup keras, atau tidak diberikan flag optimasi yang sesuai.
phresnel