Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Obfuscate ve şifreli kullanım

Konu, 'Java / JSP / JSF' kısmında con_simit tarafından paylaşıldı.

  1. con_simit

    con_simit Daimi Üye

    Kayıt:
    17 Ekim 2002
    Mesajlar:
    561
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    0. Selam
    0.1. Bu soru ocal.net'te son sorduğum soruydu. Sağolsun Darky Dark ilgilendi ama sonuçlandıramadık.

    1. Java ile yazılmış bir socket server'ımız var. Bunun belirli bir hostname'de çalışması ( tabii başka hostname'lerde çalışmaması) için, hostname'i bir algoritmayla bir product ID'ye (GKDMR-I6H4S-RH8P7-DT5LY benzeri bir çıktı) dönüştürüp, bunu kullanıcıya vereceğiz.
    1.1. Kullanıcı hostname ve Product ID'sini yazarak açacak. Server ikisini karşılaştıracak (yani aynı algoritma burada da kullanılacak). Product Id hostname'e uygun ise çalışacak, değilse kapanacak.

    2. Tabii ki bütün bu algoritmanın ve kodun geri kalanının obfuscate edilmesi gerekiyor. Ya da gizlemek için başka bir yöntem.

    3. Bu iş bilenlerin desteğiyle benim yapabileceğim basitlikte bir iş ise yardımlarınızı rica ediyorum.
    3.1. Yok daha karmaşık ise profesyonel yardım taleb ediyorum.
    3.1.1. Ücretin makul olması kaydıyla tabii ki.

    4. Kolay gelsin.
     
  2. darky_dark

    darky_dark Daimi Üye

    Kayıt:
    20 Şubat 2003
    Mesajlar:
    655
    Beğenilen Mesajlar:
    0
    Meslek:
    New Generation Networks SW Dev. Eng.
    merhaba,

    burada da buldum sanirim seni :)

    lisans olayinda 2 asamali bir sistem kulllanmani oneririm.
    license key olmali oncelikle; client kodun calisacagi makinenin unique ozelliklerine gore olusturulacak. client calisirken once bunu kontrol eder; ben acaba dogru yerde mi calisiyorum diye.. tabii ki bu license key icine daha baska sinirlamalar da koyabilirisn; mesela gunluk islem limiti vs gibi; tamamen ihtiyaclarina kalmis.
    2. asamada ise client sockete baglandigindaki kisim ki zaten bunu yapmissin.

    obfuscate olayina gelince ucretsiz ya da trial urunler var; ben http://www.zelix.com/klassmaster adresindeki urunu lisansli olarak kullaniyorum, obfuscate isleminin zorlugu daha cok yazdigin kodun icerigine gore degismekte; ancak abartilacak da bir zorlugu sanirim yok.

    kullandigimiz urunun fiyati 199$ dan basliyor.. ancak daha ucuz ya da bedava urunler de var ancak kullanmadigim icin net 1 yorum yapamiyorum.. ornek: http://www.jobfuscator.com

    sevgi, saygi..

    _DD_
     
  3. con_simit

    con_simit Daimi Üye

    Kayıt:
    17 Ekim 2002
    Mesajlar:
    561
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    0. Selam

    1. Hoşgeldin darky_dark. Seni burada gördüğüm için sevindim.

    2. Yukarıdaki mesajımın 1. ve 1.1. maddelerinde söylediğim şeyi yaptım.
    2.1. Ama senin bahsettiğin lisans key bu iş için pek uygun görünmüyor.
    2.1.1. Kodun çalışacağı makinanın unique özelliklerine göre bir key oluşturup sınırlandıramam. Çünkü kullanıcıyı hostname'ine göre lisanslıyoruz. Yükleyeceği makinanın özelliklerini bilemem ve isteyemem. Hem bildim diyelim, yarın server'ı değişirse (başka bir makinaya yüklerse) başka bir key mi vereceğiz.

    3. Obfuscate işinde bahsettiğin programları görmüştüm. Klassmaster başarılı bir program. Ama tüm bu programların yaptığı değişken isimlerini kısaltıp anlaşılamaz hale getirmek. Ve stringleri de bir algoritma kullanarak karıştırmak. Decompiler'lar ile karıştırılmış kod görülebiyor. Biraz üstüne düşen birisi kodu çözmeyi başarabilir.
    3.1. İki eski program buldum. Yeni sürümleri yok ve yalnızca 1.2 ile çalışıyorlar: Crema ve HoseMocha. Bunların başarısı decompiler çalışırken hata oluşturup, derlenmiş dokümanların hiç açılmamasını sağlamak. Crema'nın yazarı vefaat etmiş, haklarını da Borland'a devrettiği ve Jbuilder 8'in obfuscator olarak crema'yı içerdiği söyleniyor. Jbuilder 7'yi kullandım, oradaki obfuscator yukarıdakiler gibi çalışıyor, 8'i bulamadığımdan kontrol edemedim. Benim aradığım da böyle obfuscator'ların 1.4'te çalışan versiyonları ya da benzerleriydi.

    4. Hazır seni yakalamışken iki soru daha sorayım:
    4.1. Aynı uygulama verilen hostname için bir ServerSocket açıp, verilen portu dinliyor. Ama bunu ip'ye göre yaptığından, aynı server üzerinde aynı IP'den host edilen tüm domain'ler için bu port açılmış oluyor.
    4.1.1. Soru şu: ServerSocket oluşturulurken, IP değil de hostname'e göre nasıl açarız. Farklı Hostname'ler için taleb edilen bağlantıları, aynı IP'den host ediliyor olsa bile nasıl sınırlandırırız?

    4.2. İkinci soru da şöyle: ServerSocket'e bağlanan client'ın adresini kontrol edince ip'sini alabiliyorum. Benim istediğim nereden bağlandığı, yani standalone bir app ile local bir bağlantı mı yoksa web'de yayınlanan bir doküman üzerinden mi? Daha doğrusu HTTP_REFERER'ın java da bir karşılığı-benzeri var mı?

    5. İlgin için çok teşekkür ediyor ve tekrar hoşgeldin diyorum.

    6. Kolay gelsin.
     
  4. darky_dark

    darky_dark Daimi Üye

    Kayıt:
    20 Şubat 2003
    Mesajlar:
    655
    Beğenilen Mesajlar:
    0
    Meslek:
    New Generation Networks SW Dev. Eng.
    jdk 1.2 zamanlarinda decompile islemini engelleyen obfuscatorlar vardi, sonra neden ortadan kayboldular pek bilemiyorum; tahminlerim var; mesela yeni java surumleri icin artik uygun olmamalari ya da artik gelistirilmemeleri ki bunlar cok yerinde tahminler degil. Daha cok performans kaybi cok fazla oldugu icin bunlardan vazgecilmistir diye dusunuyorum.. Su anki populer obfuscatorlar bile yapilan islemin seviyesine gore onemli oranda performans kaybina neden oluyorlar.

    hemen hemen bildigim butun firmalar kodlarini obfuscate ederken kodun karistirilmasini saglayarak yetiniyorlar ki emin olabilirsin yazilan kod obfuscate edilmis halinden decompile edilince bile gerekli dokumantasyonu yoksa yazan bile cok cok zor anlayabilir. [Ben kendi kodumu anlayamiyorum :) ]

    hostname vs ile ilgili soruna gelince biraz daha aciklarsan [orneklerle falan] daha iyi anlayabilirim sanirim; pazartesi sabahinin ilk saatlerinde kafam yeterince calismiyor.


    client in nereden baglandigina gelince; ip adresi ile sinirli olabilirsin [tam emin degilim]; ancak baglanack butun clientlara kendilerini tanitma zorunlulugu getiren bir protokol implemente ederek bu sorunu halledebilirsin.. bu arada bu yontemi yukaridaki tam anlayamadigim diger soru icin de uygulayabilirsin gibime geliyor; ama dedigim gibi tam anlayamadigim icin yanlis yorum yapiyor olabilirim.

    sevgi, saygi..

    _DD_
     
  5. con_simit

    con_simit Daimi Üye

    Kayıt:
    17 Ekim 2002
    Mesajlar:
    561
    Beğenilen Mesajlar:
    0
    Şehir:
    İstanbul
    0. Selam

    1. Bir ServerSocket oluştururken ancak IP'ye göre sınırlandırabiliyorum:
    Kod:
    InetAddress ipaddress;
    ipaddress = InetAddress.getByName(hostName);
    srvsock = new ServerSocket(port, bcklg, ipaddress);
    
    1.1. Bu durumda da, aynı serverdaki aynı ip'den host edilen her domain'den bu server'a bağlanılabiliyor.
    1.2. Yapmak istediğim, ip'si aynı bile olsa başka domain'lerden bu socketserver'a bağlanılmasını önlemek. Yalnızca hostname değişkeninde tanımlı domain'den bağlanılmasını sağlamak.

    2. Bağlanan client'ın kendini tanıtırken vereceği bilginin kendisi tarafından değil, bizim tarafımızdan öğrenilmesi gerek. Yoksa ben adamın geldiği sayfayı sorduğumda istediği yanıtı verebilir.

    3. Kolay gelsin.