Ankara
0 (312) 276 75 93
info@billgatesweb.com

Java Dizelerini Kodlama – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Web Danışmanlık Hizmeti, Seo Hizmeti Al, Mobile Uygulama Yaptır, Back Link Satın Al, Blog Yazdırmak İstiyorum, Makale YAZDIRMA siteleri, Parayla makale YAZDIRMA, Seo makale fiyatları, Sayfa başı yazı yazma ücreti, İngilizce makale yazdırma, Akademik makale YAZDIRMA, Makale Fiyatları 2022, Makale yazma, Blog Yazdırma, Akademik Danışmanlık, Tercüme Danışmanlık & 0 (312) 276 75 93

Java Dizelerini Kodlama – Blog Yazma – Web Tasarımı Yapımı – Web Tasarımı YouTube Videosu Yapımı – Web Sitesi Tasarlama Fiyatları

Sürüm Farklılıkları 

Ad Değiştirme

Geliştiriciler paketler, sınıflar ve yöntemler için anlamlı adlar kullanır. Örnek sohbet uygulamamızın sunucu uygulamasına ChatServer ve başka bir kullanıcıya mesaj gönderen yönteme sendMessage adı verilir. İyi isimler, geliştirme ve bakım için çok önemlidir, ancak JVM için hiçbir anlam ifade etmez.

Java Runtime (JRE), sendMessage’ın goShopping veya abcdefg olarak adlandırılıp adlandırılmadığını umursamaz; yine de onu çağırır ve yürütür. Gizleyiciler, insan tarafından okunabilen anlamlı adları makine tarafından oluşturulan anlamsız adlarla yeniden adlandırarak, derlenmiş kodun anlaşılmasını çok daha zorlaştırır.

Eskiden ChatServer.sendMessage olan d.a olur; aynı ada sahip birçok sınıf ve yöntem bulunduğunda, derlenmiş kodun izlenmesi son derece zordur. İyi bir karartıcı, işleri daha da kötüleştirmek için polimorfizmden yararlanır.

Orijinal kodda farklı görevler yapan farklı adlara ve imzalara sahip üç yöntem, gizlenmiş kodda aynı ortak adla yeniden adlandırılabilir. İmzaları farklı olduğu için, Java dili belirtimini ihlal etmez, ancak derlenmiş koda karışıklık ekler. Listeleme, hata ayıklama bilgisini kaldıran ve ad yönetimi gerçekleştiren, şaşırtmadan sonra derlenmiş bir sendMessage örneğini gösterir.

Java Dizelerini Kodlama

Java dizeleri bayt kodunun içinde düz metin olarak saklanır. İyi yazılmış uygulamaların çoğu, kodun içinde hata ayıklama ve denetim izleme için yürütme günlükleri üreten izlere sahiptir. Sınıf ve metot adları değiştirilse bile metotlar tarafından bir günlük dosyasına veya konsola yazılan diziler metodun amacına ihanet edebilir. Bizim durumumuzda, ChatServer.sendMessage aşağıdakileri kullanarak bir izleme mesajı verir.

ChatServer.sendMessage, d.a olarak yeniden adlandırılsa bile, derlenmiş mesaj gövdesinde bunun gibi bir iz gördüğünüzde, yöntemin ne yaptığı açıktır. Ancak, dize bayt kodunda kodlanmışsa, sınıfın derlenmiş sürümü bu şekilde görünür.

Kodlanmış dizeye yakından bakarsanız, önce a() yöntemine iletilir, bu yöntem de kodunu çözer ve okunabilir dizeyi System.out.println() yöntemine döndürür. Dize kodlaması, ticari güçte bir karartıcı tarafından sağlanması gereken güçlü bir özelliktir.

Kontrol Akışını Değiştirme

Daha önce sunulan dönüşümler, gizlenmiş kodun tersine mühendisliğini zorlaştırır, ancak Java kodunun temel yapısını değiştirmezler. Ayrıca, genellikle yeniliğin en önemli parçası olan algoritmaları ve program kontrol akışını korumak için hiçbir şey yapmazlar.

Daha önce gösterilen ChatServer.sendMessage’ın derlenmiş sürümü hala oldukça anlaşılır. Kodun önce geçerli girişi kontrol ettiğini ve hata durumunda bir istisna attığını görebilirsiniz. Sonra uzak sunucu nesnesini arar ve onun üzerinde bir yöntem çağırır.

En iyi karartıcılar, sahte koşullu ve goto ifadeleri ekleyerek bayt kodunun yürütme akışını dönüştürme yeteneğine sahiptir. Bu, yürütmeyi biraz yavaşlatabilir, ancak IP’nin artan koruması için ödenmesi gereken küçük bir bedel olabilir. Liste, daha önce tartışılan tüm dönüşümler uygulandıktan sonra sendMessage’ın ne hale geldiğini gösterir.

Şimdi bu tam ama güçlü bir karmaşa! sendMessage, çok az koşullu mantık içeren oldukça küçük bir yöntemdir. Kontrol akışı karartması, for döngüleri, if ifadeleri ve yerel değişkenler içeren daha karmaşık bir yönteme uygulansaydı, gizleme daha da etkili olurdu.

 Bozuk Kod Ekleme

Bozuk kod eklemek, bazı karartıcılar tarafından gizlenmiş sınıfların kaynak koda dönüştürülmesini önlemek için kullanılan biraz şüpheli bir tekniktir. Teknik, Java bayt kodu belirtiminin Java Runtime tarafından gevşek bir şekilde yorumlanmasına dayanmaktadır. JRE, bayt kodu biçim doğrulamasının tüm kurallarını kesin olarak uygulamaz ve bu, karartıcıların sınıf dosyalarına yanlış bayt kodu eklemesine izin verir.

Tanıtılan kod, orijinal kodun yürütülmesini engellemez, ancak sınıf dosyasını kaynak koda dönüştürme girişimi başarısızlıkla veya en iyi ihtimalle JVM INSTR anahtar sözcükleriyle dolu kaynak kodunun karıştırılmasıyla sonuçlanır.

Liste, bir derleyicinin bozuk kodu nasıl işleyebileceğini gösterir. Bu yöntemi kullanmanın riski, bozuk kodun, belirtime daha yakından uyan bir JVM sürümünde çalışmayabilmesidir. Bugün JVM’lerin çoğunda bir sorun olmasa bile, daha sonra bir sorun haline gelebilir.


Java ile PROGRAMLAMAYA Giriş – PDF
Evde Java öğrenmek
Java kodlama programı
Java PROGRAMLAMA dili PDF
Java Dersleri PDF
Java öğrenmek ekşi
Java Ders Notları
Java programlama İndir


Kullanılmayan Kodun Ortadan Kaldırılması (Küçültme)

Ek bir fayda olarak, çoğu gizleyici kullanılmayan kodu kaldırır ve bu da uygulama boyutunun küçülmesine neden olur. Örneğin, A adlı bir sınıfın hiçbir sınıf tarafından çağrılmayan m() adlı bir yöntemi varsa, m() kodu A’nın bayt kodundan çıkarılır. Bu özellik, özellikle İnternet üzerinden indirilen veya güvenli olmayan ortamlarda kurulan kodlar için kullanışlıdır.

Bayt kodunu optimize etme

Gizleyiciler tarafından lanse edilen bir diğer ek fayda, potansiyel kod optimizasyonudur. Satıcılar, nihai olmayan yöntemleri mümkün olan yerlerde nihai olarak bildirmenin ve küçük kod geliştirmeleri gerçekleştirmenin yürütmeyi hızlandırmaya yardımcı olabileceğini iddia ediyor.

Gerçek performans kazanımlarını değerlendirmek zordur ve çoğu satıcı ölçümleri yayınlamaz. Burada kayda değer olan, her yeni sürümde JIT derleyicilerinin daha güçlü hale gelmesidir. Bu nedenle, yöntem sonlandırma ve ölü kod eleme gibi özellikler büyük olasılıkla yine de onun tarafından gerçekleştirilir.

En İyi Gizleyicileri Bilmek

Çok sayıda karartıcı mevcuttur ve bunların çoğu aynı temel özellikleri içerir. Hem ücretsiz hem de ticari en popüler ürünlerden sadece birkaçını içerir.

Fikri mülkiyet içeren ticari uygulamalar için, Zelix KlassMaster’ı öncelikle benzersiz kontrol akışı karartması nedeniyle öneriyorum. Bu teknik, gizlenmiş kodun kırılmasını gerçekten zorlaştırır, bu nedenle ürün, ödeyeceğiniz her kuruşa değer.

Yazma sırasında, bu özelliğe sahip olduğu bilinen tek karartıcıdır. Adresinden ücretsiz olarak edinilebilir ve ticari koruma gerektirmeyen uygulamalara sahip bütçe bilincine sahip kullanıcılar için en iyi seçimdir.

Olası Sorunlar ve Ortak Çözümler

Gizleme, uygulama işlevselliğini koruması gereken oldukça güvenli bir süreçtir. Bununla birlikte, bazı durumlarda, karartıcılar tarafından gerçekleştirilen dönüşümler, önceden çalışan kodu istemeden bozabilir. Aşağıdaki bölümlerde yaygın sorunlar ve önerilen çözümler ele alınmaktadır.

Dinamik Sınıf Yükleme

Paketlerin, sınıfların, yöntemlerin ve değişkenlerin yeniden adlandırılması, sistem genelinde ad tutarlı bir şekilde değiştirildiği sürece sorunsuz çalışır. Gizleyiciler, bayt kodu içindeki tüm statik referansların yeni adı yansıtacak şekilde güncellenmesini sağlar.

Ancak, kod orijinal bir sınıf adı geçirerek Class.forName() veya ClassLoader.loadClass() kullanarak dinamik sınıf yüklemesi gerçekleştirirse, bir ClassNotFound istisnası meydana gelebilir.

Modern karartıcılar, bu tür vakaları ele almakta oldukça iyidir ve dizeleri yeni adları yansıtacak şekilde değiştirmeye çalışırlar. Dize çalışma zamanında oluşturulursa veya bir özellikler dosyasından okunursa, karartıcı onu işleyemez. İyi karartıcılar, çalışma zamanı sorunlarına neden olabilecek koda işaret eden uyarılar içeren bir günlük dosyası oluşturur.

 

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

× Bize Whatsapp'tan Ulaşın