İpucu

.NET'te geliştirilmiş uygulamalarımızı derleyip bir EXE veya DLL haline getirir ve kullanıcılara dağıtırız. Kaynak kodlarımıza bu EXE ve DLL'ler üzerinden erişilebilinir mi? Tek cevap var; Evet. .NET ve Java ortamlarında geliştirilen uygulamalar compile edildikten sonra doğrudan makine diline çevirilmezler. .NET'te geliştirilmiş programlar MSIL, Java'da geliştirilmiş uygulamalar bytecode denilen bir yapı içinde paketlenir. Uygulama geliştirilip, compile edildikten sonra elde edilen kütüphaneler (exe, dll), aslında böylesi paketlerdir. Bu paketler çalıştırıldığı zaman, .NET uygulamaları için .NET Framework, Java uygulamaları için JVM sözkonusu paketleri makine diline çevirip çalıştırmaya başlar. Bu iki kademeli işlemin nedeni platform bağımsız yapıyı desteklemektir. MSIL veya Bytecode paketleri üzerinde "reverse engineering" yapılarak bu paketlerin kaynak kodlarına ulaşılabilir. Bir (exe) veya (dll) dahilindeki tüm sınıflara, sınıfların metodlarına ve metodların içindeki kaynak kodlara erişim mümkündür. Bu durum, özellikle şifreleme algoritmaları gibi şirketinize özel kodların kırılmasına olanak verir. Bu nedenle, uygulama iş mantığının kor bölümleri ile şifreleme algoritmaları gibi gizli kodların saklanması için "obfuscation (şaşırtma)" denilen özel bir işlem yapmak gerekmektedir. Bazı compiler'lar bu işlemi kendi kendine yapmaktadır. Kullanılan compiler'ın "obfuscation" yapmaması durumunda, tüm uygulama dosyalarının kaynak kodlarına ulaşılabilir. Bunu önlemek için, normal compile'dan sonra elde edilen uygulama dosyalarını (özellikle kor uygulama mantığı ve şifreleme algoritmalarını barındıran dosyaları) "obfuscation" işleminden geçirmek gerekir. Bu işlemi yapan belirli yazılımlar mevcuttur.