Turkhackteam.net/org - Turkish Hacking & Security Platform...  
Geri git   Turkhackteam.net/org - Turkish Hacking & Security Platform... >
Programlama
> C# j# vb.net (.NET dilleri)

C#/PHP: Lisans Sistemi Mantığı

C# j# vb.net (.NET dilleri)

Yeni Konu aç Cevapla
 
Seçenekler
Alt 20-03-2017   #1
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Jul 2015
Nereden
Ankara
Mesajlar
Konular


  
C#/PHP: Lisans Sistemi Mantığı



Programı yazıp bitirmekle iş bitmiyor doğal olarak. Her zaman için bazı insanların programlarımızı kullanmamasını isteyebiliriz. Bunu yapmanın en kolay yolu lisanslamadan geçer.

Diyelim acemiliği aşan, orta seviye ilk programımızı yazdık. Bunu dağıtmak istiyoruz ama çok uğraştık, para da kazanmak istiyoruz. Yani programımızı kuracak elemanların bunu sadece tek cihaza kurup, tek cihazdan kullanmalarını istiyoruz, yoksa bir kişi maille bin kişiye yayar aynı günde.

Senelerce korsan olarak programların böyle kopyalanmasını engellemek için onlarca yöntem geliştirilmiştir. Şu anda en çok kullanılan yöntem, challenge yöntemidir. En azından kurulum aşamasında sizinle veya sizin hazırladığınız bir sistemle iletişim gerektirse de, bu sistem internet gerektirmeyen orta halli bir proje için oldukça yeterlidir. Eğer program kullanımı internete bağlı ise, korumayı aşmak neredeyse imkansızlaşır, bundan dolayı oyunları crackleseler de online oyun sistemlerini crackleyemezler.

Bu mantıkta programınız önce bilgisayarınızdan taklit edilemeyen veya taklit edilmesi çok zor olan bazı anahtar bilgileri alır. Bu mesela windows kriptografi anahtarı olabilir;

Kod:
string anahtar=Microsoft.Win32.Registry.LocalMachine.OpenSubKey("software\\microsoft\\cryptography").GetValue("MachineGuid").ToString();
.. veya mesela BIOS seri numarası...

(Bunun için System.Management referans olarak ekli olmalı)
Kod:
string kod="";
foreach (System.Management.ManagementObject obj in new System.Management.ManagementObjectSearcher("select SerialNumber from Win32_BIOS").Get()) {
  kod=obj["SerialNumber"];
  break;
}
veya aynı yöntemle alınmış hard disk seri numarası, MAC adresi.... Sadece bir taneye bağlı olmak zorunda da değilsiniz. Birden fazlasını alıp harmanlamak iyidir.

Tabii bunu sunucuya göndereceksiniz, sunucu da cevap yazacak. Ama birinci sorunumuz, mesajı cracker'ların rahatça görmesi. Eğer görebilirlerse, araya girip değiştirebilirler de.. Mesela lokalde bir proxy sunucusu kurarlar, bu proxy normal bir proxy gibi çalışır, sadece sizin kontrol sunucunuza gelen mesajlarda, gönderdiğiniz parametreleri lisansı almış bir adamın programı ne gönderiyorsa onunla değiştirir.

Biz de ne yaparız, her seferinde değişen bir parametre ekleriz, üstüne bir de gönderdiğimizi şifreleriz ki cracker bu yöntemi kullanamaz.

Ayrıca son olarak sunucu cevap için gönderdiğimiz challenge'ı tamamen farklı bir şekilde şifreler ve geri gönderir. Programımız bu çözümü görmeden devam etmez.

Bu kırılamaz bir yöntem midir? Kesinlikle hayır. Eleman azimlidir, debugger'da kodunuzu byte byte çalıştırır, kontrol yaptığınız noktaları adım adım bulur ve atlatır. Ama orta halli bir obfuscation'dan geçmiş bir programda bunu yapana kadar canı çıkar. Amaç da bu zaten; bezdirmek.

Şimdi ilk adımımız, C# programımızda verileri toplamak ve de bunları şifreleyip göndermek;

Öncelikle hangi algoritmayı kullanacağız? Anlatım amacı ile en kolay yapılan Rjindael-256 kullanalım diyorum. Bu algoritma 256 bitlik bir anahtarla ve de 256 bitlik bloklar halinde çalışır.

256 bitlik anahtarı, 128 bitlik anahtar ve 128 bitlik başlangıç vektörü olarak ikiye ayırabiliriz. Zaten gerek C#, gerekse php'de olan sınıflar böyle bir ayrımı yapacağınızı varsayarak çalışır. Böylece sunucuya her seferinde değişen 128/8=16 byte'lık bir IV göndeririz, sunucu ve programımız önceden kararlaştırılmış gene 16 byte'lık bir anahtarda hemfikirdir.

Önce o zaman programımızda iki tane anahtar tanımlayalım;

Kod:
private static byte[] key1=new byte[]{203,52,39,57,30,89,51,0,35,6,105,6,10,23,56,12};
private static byte[] key2=new byte[]{235,79,125,71,2,58,75,70,87,123,58,120,57,120,70,12};
Tabii siz kendiniz rastgele 16 tane 0-255 arası sayı yazarsınız. Ben örnek olarak numpad'e rastgele basıp, sonra aralara virgül attım. Benim kullandığım keyler değil bunlar yani...

Sonra verimizi bilgisayardan çektik, değil mi? Çekerken elinizden geldiğince çılgınlık yapın. Mesela 2 serial mı çektiniz, serial'lardan birinin yarısını girin önce, sonra 2. serial'ı girin, sonra ilk serial'ın kalan yarısını girin. Zaman farkederek araya bir yerlere günün tarihini ddMMyy formatında sıkıştırın. Ama zaman farkına dikkat! Genelde php sunucuları UTC üzerinde çalışır, yani bizden 3 saat geridirler. Dikkat etmezseniz php'deki günün tarihi ile kullanıcının bilgisayarındaki tarih farklı olur, adam zaman farkı kadar saat sisteme giremez.

Şimdi şifreleyelim. Bu kısım aslında epey kısa;

Kod:
//data adında bir string içinde topladığım bütün veriyi tuttuğumu var sayıyorum.
//Önce kullanacağımız kripto algoritması... 
using (System.Security.Cryptography.RijndaelManaged rj_256 = new System.Security.Cryptography.RijndaelManaged
{
    //32 byte'lık bloklar halinde çalışacak
    BlockSize = 256,
    //16 byte anahtar ve 16 byte IV kullanacağız,
    //yani toplamda 32 byte.
    KeySize = 256,
    //Cipher modumuz CBC.. Yani her blok işleme başlamadan
    //önce kendisinden önceki blokla xor'lanır. Güvenliği
    //bit kadar artırıyor.
    Mode = System.Security.Cryptography.CipherMode.CBC,
    //Bu satır önemli. PHP'de bildiğim bütün class'lar, yazılan
    //veri eksik kalırsa kalan kısmı \x00 değeri ile doldurur.
    //biz de aynısını yapmazsak php'de açıldığında anahtarımızın
    //sonunda gereksiz veri olur.
    Padding = System.Security.Cryptography.PaddingMode.Zeros,
    //İlk anahtarımızı kullanacağız.
    Key = key1
})
{
    //using dışında, gelen veriyi tutacak bir yer lazım.
    byte[] sonuc;
    //Şimdi sonucu yazacağımız memorystream'i açalım.
    using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
    {
        //Öncelikle rastgele bir IV ürettirelim.
        rj_256.GenerateIV();
        //Şimdi bu IV değerini karşı tarafa şifrelenmeden aktarmalıyız.
        //Ben genelde yarısını başa, yarısını sona yazarım.
        //Yarısını yazalım stream'e. 16 byte olduğuna göre yarısı ilk
        //8 byte oluyor.
        stream.Write(rj_256.IV, 0, 8);
        //şimdi asıl kripto stream'ini tanımlıyoruz.
        //İlk parametremiz yazılacağı stream. Ardından oluşturduğumuz
        //kripto class'ına "bana encryptor oluştur" diye emrediyoruz.
        //Son olarak da şu anda bu stream'e yazacağımızı söylüyoruz.
        using (System.Security.Cryptography.CryptoStream crypto = new System.Security.Cryptography.CryptoStream(stream, rj_256.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write))
        {
            //veriyi kripto stream'ine yazıyoruz...
            crypto.Write(data, 0, data.Length);
            //Sonra da "işimiz bitti diyoruz ki her şeyi yazsın.
            crypto.FlushFinalBlock();
            //Son olarak da IV'nin geri kalan yarısını yazalım.
            stream.Write(rj_256.IV, 8, 8);
            //Kripto işlemi tamamlandı. Şimdi bunu php'ye gönderip cevap alacağız;
            //Burada işlem biraz karışık. Web üstünden binary veri gönderemeyiz kolay
            //kolay. Uğraşmak ve standart dışı prosedürlerle uğraşmak yerine veriyi
            //base64 encode ediyorum, geri aldığım veri de sunucudan aynı mantıkta
            //base64 string olarak gelecek, onu da decode ediyorum.
            sonuc = Convert.FromBase64String(new System.Net.WebClient().UploadString("<site adresi>", "data=" + Convert.ToBase64String(stream.ToArray())));
        }
    }
    //Veriyi aldık. Şimdi okumamız lazım. Bu sefer
    //decrypt edeceğiz.
    //Önce kullandığımız key'i değiştirelim.
    rj_256.Key = key2;
    //php de IV'yi benle aynı mantıkta göndermiş olsun.
    //Low level olarak sonuc'un başından ve sonundan 8'er
    //byte'ı rj_256'nın IV değerine kopyalayalım.
    //işlem hızı önemsiz burada, sadece blockcopy'e çok alışığım.
    //Siz canınız isterse for döngüsü ile kopyalayın, farketmez.
    System.Buffer.BlockCopy(sonuc, 0, rj_256.IV, 0, 8);
    System.Buffer.BlockCopy(sonuc, sonuc.Length - 8, rj_256.IV, 8, 8);
    //Ters mantıkta cryptostream'i de kuruyoruz.
    //Tabii bu sefer encryptor değil decryptor istiyoruz rj_256'dan ve de
    //yapacağımız işlem WRITE değil, READ.
    //Yine boş bir memorystream'e yazacak sonucu...
    using (System.IO.MemoryStream stream=new System.IO.MemoryStream()) using (System.Security.Cryptography.CryptoStream crypto=new System.Security.Cryptography.CryptoStream(stream,rj_256.CreateDecryptor(),System.Security.Cryptography.CryptoStreamMode.Read))
    {
        //Veriyi aktarırken AMAN DİKKAT. İlk 8 byte ve son 8 byte IV idi.
        crypto.Read(sonuc, 8, sonuc.Length - 16);
        //İşlemi bitirip flush ediyoruz.
        crypto.FlushFinalBlock();
        //Fazladan değişken harcamaya gerek yok. Sonucun içine deşifre
        //edilmiş veriyi yazıyoruz.
        sonuc = stream.ToArray();
    }
    //Burada artık, istediğimiz kontrolleri yapıyoruz. sonuc byte array
    //olarak sunucunun gönderdiği veriyi içeriyor.
    //istersek bunu
    string _sonuc = System.Text.Encoding.UTF8.GetString(sonuc);
    //deyip string'e de çeviririz.
}
Sırada sunucu tarafı var, yani PHP kısmı. Gariptir, bu konuda internette adam gibi tek örnek bile bulamıyoruz. Ben bile deneme yanılma yoluyla doğru ayarları buldum.

Öncelikle aynı key'ler php dosyasında da tanımlı olmalı. Peki php'de nasıl byte array tanımlarız? String olarak. Her karakter 0-255 arasında bir char'dır.

Görünmez karakterleri yazarken \xAA şeklinde, o karakterin hex kodunu yazmalıyız. Tabii rastgele oluşturduğunuz key'lerde bu can sıkıcı bir iş..

Kolaylık için projenizi F10 ile debug etmeye başlayın, sonra CTRL+D ve ardından I'ya basarak 'Immediate' penceresini açın. Orada mesela key1 için

Kod:
"\\x"+BitConverter.ToString(key1).Replace("-","\\x")
yazıp enter'a basın, aşağıda gelen değerin üstüne mouse'u getirin, büyüteç sembolünü seçip gelen ekrandan yapıştırıverin.

Bu da php kısmımız olacak;

Kod:
$key1="<ilk key'iniz>";
$key2="<ikinci key'iniz>";
//gelen veriyi base64 decode ediyoruz.
$veri=base64_decode($_POST["data"]);
//ilk 8 byte ve son 8 byte toplamı IV idi.
$iv=substr($veri,0,8).substr($veri,-8);
//Çabucak veriyi çeviriyoruz. Tabii deşifre esnasında
//ilk 8 ve son 8 karakteri kullanmamaya dikkat ediyoruz.
$veri=mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key1, substr($veri,8,strlen($veri)-16), MCRYPT_MODE_CBC, $iv);
//Burada gerekli kontrolleri yaptık diyelim. Ardından geri
//göndececeğimiz veriyi de mesela $sonuc içinde bulundurduğumuzu
//varsayıyorum.
//Önce yeni bir IV oluşturalım.
$iv=mcrypt_create_iv(16);
//Sonra şifreleme işlemini yapalım;
//Bu sefer key2'yi kullanıyoruz.
$sonuc=mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key2, $sonuc, MCRYPT_MODE_CBC, $iv);
//şimdi sonucu yazıyoruz. Bunun basit bir text olduğunu php'ye
//bildirelim.
header('Content-type: text/plain');
//Şimdi önce IV'nin ilk yarısını, sonra sonucu, sonra da IV'nin son
//yarısını birleştirip base64 encode edelim.
echo(base64_encode(substr($iv,0,8).$sonuc.substr($iv,8,8)));
Bitti.. Bu şifreleme kolay kolay kırılamayacak, kırmaya çalışan arkadaşın epey canını sıkacaktır.
    


__________________

Programcı adamın tembeli makbuldür. Tembel adam 100 satır kod yazmaya üşenir, 10 satır optimize kod yazmanın yolunu öğrenir.

"Bak ben kung fu biliyom ona gore"
byZehirX

Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #2
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Dec 2015
Nereden
Kocaeli
Yaş
8
Mesajlar
Konular


  


Keşke Allah'tan Başka Bişey İsteseydim :/ Elinize Sağlık Hocam
    


__________________

Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #3
  • Offline
  • Tamamen Forumdan Uzaklaştırıldı
  • Genel Bilgiler
Üyelik tarihi
Jan 2017
Nereden
UZAY
Mesajlar
Konular


  


Üstad Eline Emeğine Klavyene Sağlık Fakat İşin Biraz Zor Kısmı Vb.net Diline Çevirmek
    
Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #4
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Oct 2014
Nereden
İstanbul
Mesajlar
Konular


  


Ellerine sağlık az renk
    


__________________

" Düşman ülkesi viran olacak, Türkiye büyüyüp Turan olacak! "
Ziya Gökalp
Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #5
  • Offline
  • Tamamen Forumdan Uzaklaştırıldı
  • Genel Bilgiler
Üyelik tarihi
Jan 2017
Nereden
UZAY
Mesajlar
Konular


  


Tahmin Ettiğim Gibi Vb.net Diline Çevirtince Hatalar Kaynıyor Şu Satırınızda Hocam Kusuruma Bakmazsanız Lütfen Sadece Bu Satırınızı Syntax Hatası Olmadan Vb.net Diline Çevirebilirmisiniz Çok İşime Yarayacak Allah Razı Olsun Şimdiden
Kod:
Kod:
//data adında bir string içinde topladığım bütün veriyi tuttuğumu var sayıyorum.
//Önce kullanacağımız kripto algoritması... 
using (System.Security.Cryptography.RijndaelManaged rj_256 = new System.Security.Cryptography.RijndaelManaged
{
    //32 byte'lık bloklar halinde çalışacak
    BlockSize = 256,
    //16 byte anahtar ve 16 byte IV kullanacağız,
    //yani toplamda 32 byte.
    KeySize = 256,
    //Cipher modumuz CBC.. Yani her blok işleme başlamadan
    //önce kendisinden önceki blokla xor'lanır. Güvenliği
    //bit kadar artırıyor.
    Mode = System.Security.Cryptography.CipherMode.CBC,
    //Bu satır önemli. PHP'de bildiğim bütün class'lar, yazılan
    //veri eksik kalırsa kalan kısmı \x00 değeri ile doldurur.
    //biz de aynısını yapmazsak php'de açıldığında anahtarımızın
    //sonunda gereksiz veri olur.
    Padding = System.Security.Cryptography.PaddingMode.Zeros,
    //İlk anahtarımızı kullanacağız.
    Key = key1
})
{
    //using dışında, gelen veriyi tutacak bir yer lazım.
    byte[] sonuc;
    //Şimdi sonucu yazacağımız memorystream'i açalım.
    using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
    {
        //Öncelikle rastgele bir IV ürettirelim.
        rj_256.GenerateIV();
        //Şimdi bu IV değerini karşı tarafa şifrelenmeden aktarmalıyız.
        //Ben genelde yarısını başa, yarısını sona yazarım.
        //Yarısını yazalım stream'e. 16 byte olduğuna göre yarısı ilk
        //8 byte oluyor.
        stream.Write(rj_256.IV, 0, 8);
        //şimdi asıl kripto stream'ini tanımlıyoruz.
        //İlk parametremiz yazılacağı stream. Ardından oluşturduğumuz
        //kripto class'ına "bana encryptor oluştur" diye emrediyoruz.
        //Son olarak da şu anda bu stream'e yazacağımızı söylüyoruz.
        using (System.Security.Cryptography.CryptoStream crypto = new System.Security.Cryptography.CryptoStream(stream, rj_256.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write))
        {
            //veriyi kripto stream'ine yazıyoruz...
            crypto.Write(data, 0, data.Length);
            //Sonra da "işimiz bitti diyoruz ki her şeyi yazsın.
            crypto.FlushFinalBlock();
            //Son olarak da IV'nin geri kalan yarısını yazalım.
            stream.Write(rj_256.IV, 8, 8);
            //Kripto işlemi tamamlandı. Şimdi bunu php'ye gönderip cevap alacağız;
            //Burada işlem biraz karışık. Web üstünden binary veri gönderemeyiz kolay
            //kolay. Uğraşmak ve standart dışı prosedürlerle uğraşmak yerine veriyi
            //base64 encode ediyorum, geri aldığım veri de sunucudan aynı mantıkta
            //base64 string olarak gelecek, onu da decode ediyorum.
            sonuc = Convert.FromBase64String(new System.Net.WebClient().UploadString("<site adresi>", "data=" + Convert.ToBase64String(stream.ToArray())));
        }
    }
    //Veriyi aldık. Şimdi okumamız lazım. Bu sefer
    //decrypt edeceğiz.
    //Önce kullandığımız key'i değiştirelim.
    rj_256.Key = key2;
    //php de IV'yi benle aynı mantıkta göndermiş olsun.
    //Low level olarak sonuc'un başından ve sonundan 8'er
    //byte'ı rj_256'nın IV değerine kopyalayalım.
    //işlem hızı önemsiz burada, sadece blockcopy'e çok alışığım.
    //Siz canınız isterse for döngüsü ile kopyalayın, farketmez.
    System.Buffer.BlockCopy(sonuc, 0, rj_256.IV, 0, 8);
    System.Buffer.BlockCopy(sonuc, sonuc.Length - 8, rj_256.IV, 8, 8);
    //Ters mantıkta cryptostream'i de kuruyoruz.
    //Tabii bu sefer encryptor değil decryptor istiyoruz rj_256'dan ve de
    //yapacağımız işlem WRITE değil, READ.
    //Yine boş bir memorystream'e yazacak sonucu...
    using (System.IO.MemoryStream stream=new System.IO.MemoryStream()) using (System.Security.Cryptography.CryptoStream crypto=new System.Security.Cryptography.CryptoStream(stream,rj_256.CreateDecryptor(),System.Security.Cryptography.CryptoStreamMode.Read))
    {
        //Veriyi aktarırken AMAN DİKKAT. İlk 8 byte ve son 8 byte IV idi.
        crypto.Read(sonuc, 8, sonuc.Length - 16);
        //İşlemi bitirip flush ediyoruz.
        crypto.FlushFinalBlock();
        //Fazladan değişken harcamaya gerek yok. Sonucun içine deşifre
        //edilmiş veriyi yazıyoruz.
        sonuc = stream.ToArray();
    }
    //Burada artık, istediğimiz kontrolleri yapıyoruz. sonuc byte array
    //olarak sunucunun gönderdiği veriyi içeriyor.
    //istersek bunu
    string _sonuc = System.Text.Encoding.UTF8.GetString(sonuc);
    //deyip string'e de çeviririz.
}
    
Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #6
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Jul 2015
Nereden
Ankara
Mesajlar
Konular


  


Alıntı:
Goods´isimli üyeden Alıntı Mesajı göster
Tahmin Ettiğim Gibi Vb.net Diline Çevirtince Hatalar Kaynıyor Şu Satırınızda Hocam Kusuruma Bakmazsanız Lütfen Sadece Bu Satırınızı Syntax Hatası Olmadan Vb.net Diline Çevirebilirmisiniz Çok İşime Yarayacak Allah Razı Olsun Şimdiden
Kod:
Kod:
//data adında bir string içinde topladığım bütün veriyi tuttuğumu var sayıyorum.
//Önce kullanacağımız kripto algoritması... 
using (System.Security.Cryptography.RijndaelManaged rj_256 = new System.Security.Cryptography.RijndaelManaged
{
    //32 byte'lık bloklar halinde çalışacak
    BlockSize = 256,
    //16 byte anahtar ve 16 byte IV kullanacağız,
    //yani toplamda 32 byte.
    KeySize = 256,
    //Cipher modumuz CBC.. Yani her blok işleme başlamadan
    //önce kendisinden önceki blokla xor'lanır. Güvenliği
    //bit kadar artırıyor.
    Mode = System.Security.Cryptography.CipherMode.CBC,
    //Bu satır önemli. PHP'de bildiğim bütün class'lar, yazılan
    //veri eksik kalırsa kalan kısmı \x00 değeri ile doldurur.
    //biz de aynısını yapmazsak php'de açıldığında anahtarımızın
    //sonunda gereksiz veri olur.
    Padding = System.Security.Cryptography.PaddingMode.Zeros,
    //İlk anahtarımızı kullanacağız.
    Key = key1
})
{
    //using dışında, gelen veriyi tutacak bir yer lazım.
    byte[] sonuc;
    //Şimdi sonucu yazacağımız memorystream'i açalım.
    using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
    {
        //Öncelikle rastgele bir IV ürettirelim.
        rj_256.GenerateIV();
        //Şimdi bu IV değerini karşı tarafa şifrelenmeden aktarmalıyız.
        //Ben genelde yarısını başa, yarısını sona yazarım.
        //Yarısını yazalım stream'e. 16 byte olduğuna göre yarısı ilk
        //8 byte oluyor.
        stream.Write(rj_256.IV, 0, 8);
        //şimdi asıl kripto stream'ini tanımlıyoruz.
        //İlk parametremiz yazılacağı stream. Ardından oluşturduğumuz
        //kripto class'ına "bana encryptor oluştur" diye emrediyoruz.
        //Son olarak da şu anda bu stream'e yazacağımızı söylüyoruz.
        using (System.Security.Cryptography.CryptoStream crypto = new System.Security.Cryptography.CryptoStream(stream, rj_256.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write))
        {
            //veriyi kripto stream'ine yazıyoruz...
            crypto.Write(data, 0, data.Length);
            //Sonra da "işimiz bitti diyoruz ki her şeyi yazsın.
            crypto.FlushFinalBlock();
            //Son olarak da IV'nin geri kalan yarısını yazalım.
            stream.Write(rj_256.IV, 8, 8);
            //Kripto işlemi tamamlandı. Şimdi bunu php'ye gönderip cevap alacağız;
            //Burada işlem biraz karışık. Web üstünden binary veri gönderemeyiz kolay
            //kolay. Uğraşmak ve standart dışı prosedürlerle uğraşmak yerine veriyi
            //base64 encode ediyorum, geri aldığım veri de sunucudan aynı mantıkta
            //base64 string olarak gelecek, onu da decode ediyorum.
            sonuc = Convert.FromBase64String(new System.Net.WebClient().UploadString("<site adresi>", "data=" + Convert.ToBase64String(stream.ToArray())));
        }
    }
    //Veriyi aldık. Şimdi okumamız lazım. Bu sefer
    //decrypt edeceğiz.
    //Önce kullandığımız key'i değiştirelim.
    rj_256.Key = key2;
    //php de IV'yi benle aynı mantıkta göndermiş olsun.
    //Low level olarak sonuc'un başından ve sonundan 8'er
    //byte'ı rj_256'nın IV değerine kopyalayalım.
    //işlem hızı önemsiz burada, sadece blockcopy'e çok alışığım.
    //Siz canınız isterse for döngüsü ile kopyalayın, farketmez.
    System.Buffer.BlockCopy(sonuc, 0, rj_256.IV, 0, 8);
    System.Buffer.BlockCopy(sonuc, sonuc.Length - 8, rj_256.IV, 8, 8);
    //Ters mantıkta cryptostream'i de kuruyoruz.
    //Tabii bu sefer encryptor değil decryptor istiyoruz rj_256'dan ve de
    //yapacağımız işlem WRITE değil, READ.
    //Yine boş bir memorystream'e yazacak sonucu...
    using (System.IO.MemoryStream stream=new System.IO.MemoryStream()) using (System.Security.Cryptography.CryptoStream crypto=new System.Security.Cryptography.CryptoStream(stream,rj_256.CreateDecryptor(),System.Security.Cryptography.CryptoStreamMode.Read))
    {
        //Veriyi aktarırken AMAN DİKKAT. İlk 8 byte ve son 8 byte IV idi.
        crypto.Read(sonuc, 8, sonuc.Length - 16);
        //İşlemi bitirip flush ediyoruz.
        crypto.FlushFinalBlock();
        //Fazladan değişken harcamaya gerek yok. Sonucun içine deşifre
        //edilmiş veriyi yazıyoruz.
        sonuc = stream.ToArray();
    }
    //Burada artık, istediğimiz kontrolleri yapıyoruz. sonuc byte array
    //olarak sunucunun gönderdiği veriyi içeriyor.
    //istersek bunu
    string _sonuc = System.Text.Encoding.UTF8.GetString(sonuc);
    //deyip string'e de çeviririz.
}
Üstad gün boyu bir şey yemedim, açlıktan ölüyorum. Yemekten sonra...
    


__________________

Programcı adamın tembeli makbuldür. Tembel adam 100 satır kod yazmaya üşenir, 10 satır optimize kod yazmanın yolunu öğrenir.

"Bak ben kung fu biliyom ona gore"
byZehirX

Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #7
  • Offline
  • Tamamen Forumdan Uzaklaştırıldı
  • Genel Bilgiler
Üyelik tarihi
Jan 2017
Nereden
UZAY
Mesajlar
Konular


  


Alıntı:
zztri´isimli üyeden Alıntı Mesajı göster
Üstad gün boyu bir şey yemedim, açlıktan ölüyorum. Yemekten sonra...
Tamamdır Hocam Kusuruma Bakmayın Tekrardan Sizi Yoruyorum Hakkınızı Helal Edin Keşke Benimde Size Yardım Edebilecek Bilgi Birikimim Olsa Böyle Kötü Hissediyorum
    
Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #8
  • Offline
  • Yarbay
  • Genel Bilgiler
Üyelik tarihi
Jul 2015
Nereden
Ankara
Mesajlar
Konular


  


Alıntı:
Goods´isimli üyeden Alıntı Mesajı göster
Tamamdır Hocam Kusuruma Bakmayın Tekrardan Sizi Yoruyorum Hakkınızı Helal Edin Keşke Benimde Size Yardım Edebilecek Bilgi Birikimim Olsa Böyle Kötü Hissediyorum
Aslında çeviri çok kolay yahu.. Çok özel bir yapı kullanmadım. Asıl delegate, methodinvoker filan kullanınca vb.net'e çevirmek zor olur

Kod:
'data adında bir string içinde topladığım bütün veriyi tuttuğumu var sayıyorum.
'Önce kullanacağımız kripto algoritması... 
Using rj_256 As New System.Security.Cryptography.RijndaelManaged
	With (rj_256)
		'32 byte'lık bloklar halinde çalışacak
		.BlockSize = 256
		'16 byte anahtar ve 16 byte IV kullanacağız,
		'yani toplamda 32 byte.
		.KeySize = 256
		'Cipher modumuz CBC.. Yani her blok işleme başlamadan
		'önce kendisinden önceki blokla xor'lanır. Güvenliği
		'bit kadar artırıyor.
		.Mode = System.Security.Cryptography.CipherMode.CBC
		'Bu satır önemli. PHP'de bildiğim bütün class'lar, yazılan
		'veri eksik kalırsa kalan kısmı \x00 değeri ile doldurur.
		'biz de aynısını yapmazsak php'de açıldığında anahtarımızın
		'sonunda gereksiz veri olur.
		.Padding = System.Security.Cryptography.PaddingMode.Zeros
		'İlk anahtarımızı kullanacağız.
		.Key = key1
	End With
	'Sonucu kaydedeceğimiz yer...
	Dim sonuc As Byte()
	'Şimdi sonucu yazacağımız memorystream'i açalım.
	Using stream As New System.IO.MemoryStream
		'Öncelikle rastgele bir IV ürettirelim.
		rj_256.GenerateIV()
		'Şimdi bu IV değerini karşı tarafa şifrelenmeden aktarmalıyız.
		'Ben genelde yarısını başa, yarısını sona yazarım.
		'Yarısını yazalım stream'e. 16 byte olduğuna göre yarısı ilk
		'8 byte oluyor.
		stream.Write(rj_256.IV, 0, 8)
		'şimdi asıl kripto stream'ini tanımlıyoruz.
		'İlk parametremiz yazılacağı stream. Ardından oluşturduğumuz
		'kripto class'ına "bana encryptor oluştur" diye emrediyoruz.
		'Son olarak da şu anda bu stream'e yazacağımızı söylüyoruz.
		Using crypto As New System.Security.Cryptography.CryptoStream(stream, rj_256.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
			'veriyi kripto stream'ine yazıyoruz...
			crypto.Write(data, 0, data.Length)
			'Sonra da "işimiz bitti diyoruz ki her şeyi yazsın.
			crypto.FlushFinalBlock()
			'Son olarak da IV'nin geri kalan yarısını yazalım.
			stream.Write(rj_256.IV, 8, 8)
			'Kripto işlemi tamamlandı. Şimdi bunu php'ye gönderip cevap alacağız;
			'Burada işlem biraz karışık. Web üstünden binary veri gönderemeyiz kolay
			'kolay. Uğraşmak ve standart dışı prosedürlerle uğraşmak yerine veriyi
			'base64 encode ediyorum, geri aldığım veri de sunucudan aynı mantıkta
			'base64 string olarak gelecek, onu da decode ediyorum.
			sonuc = Convert.FromBase64String(New System.Net.WebClient().UploadString("<site adresi>", "data=" + Convert.ToBase64String(stream.ToArray())))
		End Using
	End Using
	'Veriyi aldık. Şimdi okumamız lazım. Bu sefer
	'decrypt edeceğiz.
	'Önce kullandığımız key'i değiştirelim.
	rj_256.Key = key2
	'php de IV'yi benle aynı mantıkta göndermiş olsun.
	'Low level olarak sonuc'un başından ve sonundan 8'er
	'byte'ı rj_256'nın IV değerine kopyalayalım.
	'işlem hızı önemsiz burada, sadece blockcopy'e çok alışığım.
	'Siz canınız isterse for döngüsü ile kopyalayın, farketmez.
	System.Buffer.BlockCopy(sonuc, 0, rj_256.IV, 0, 8)
	System.Buffer.BlockCopy(sonuc, sonuc.Length - 8, rj_256.IV, 8, 8)
	'Ters mantıkta cryptostream'i de kuruyoruz.
	'Tabii bu sefer encryptor değil decryptor istiyoruz rj_256'dan ve de
	'yapacağımız işlem WRITE değil, READ.
	'Yine boş bir memorystream'e yazacak sonucu...
	Using stream As New System.IO.MemoryStream()
		Using crypto As New System.Security.Cryptography.CryptoStream(stream, rj_256.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Read)
			'Veriyi aktarırken AMAN DİKKAT. İlk 8 byte ve son 8 byte IV idi.
			crypto.Read(sonuc, 8, sonuc.Length - 16)
			'İşlemi bitirip flush ediyoruz.
			crypto.FlushFinalBlock()
			'Fazladan değişken harcamaya gerek yok. Sonucun içine deşifre
			'edilmiş veriyi yazıyoruz.
			sonuc = stream.ToArray()
		End Using
		'Burada artık, istediğimiz kontrolleri yapıyoruz. sonuc byte array
		'olarak sunucunun gönderdiği veriyi içeriyor.
		'istersek bunu
		Dim _sonuc As String = System.Text.Encoding.UTF8.GetString(sonuc)
		'deyip string'e de çeviririz.
	End Using
End Using
    


__________________

Programcı adamın tembeli makbuldür. Tembel adam 100 satır kod yazmaya üşenir, 10 satır optimize kod yazmanın yolunu öğrenir.

"Bak ben kung fu biliyom ona gore"
byZehirX


Konu zztri tarafından (20-03-2017 Saat 23:07 ) değiştirilmiştir..
Offline
 
Alıntı ile Cevapla
Alt 20-03-2017   #9
  • Offline
  • Tamamen Forumdan Uzaklaştırıldı
  • Genel Bilgiler
Üyelik tarihi
Jan 2017
Nereden
UZAY
Mesajlar
Konular


  


Alıntı:
zztri´isimli üyeden Alıntı Mesajı göster
Aslında çeviri çok kolay yahu.. Çok özel bir yapı kullanmadım. Asıl delegate, methodinvoker filan kullanınca vb.net'e çevirmek zor olur

Kod:
'data adında bir string içinde topladığım bütün veriyi tuttuğumu var sayıyorum.
'Önce kullanacağımız kripto algoritması... 
Using rj_256 As New System.Security.Cryptography.RijndaelManaged
	With (rj_256)
		'32 byte'lık bloklar halinde çalışacak
		.BlockSize = 256
		'16 byte anahtar ve 16 byte IV kullanacağız,
		'yani toplamda 32 byte.
		.KeySize = 256
		'Cipher modumuz CBC.. Yani her blok işleme başlamadan
		'önce kendisinden önceki blokla xor'lanır. Güvenliği
		'bit kadar artırıyor.
		.Mode = System.Security.Cryptography.CipherMode.CBC
		'Bu satır önemli. PHP'de bildiğim bütün class'lar, yazılan
		'veri eksik kalırsa kalan kısmı \x00 değeri ile doldurur.
		'biz de aynısını yapmazsak php'de açıldığında anahtarımızın
		'sonunda gereksiz veri olur.
		.Padding = System.Security.Cryptography.PaddingMode.Zeros
		'İlk anahtarımızı kullanacağız.
		.Key = key1
	End With
	'Sonucu kaydedeceğimiz yer...
	Dim sonuc As Byte()
	'Şimdi sonucu yazacağımız memorystream'i açalım.
	Using stream As New System.IO.MemoryStream
		'Öncelikle rastgele bir IV ürettirelim.
		rj_256.GenerateIV()
		'Şimdi bu IV değerini karşı tarafa şifrelenmeden aktarmalıyız.
		'Ben genelde yarısını başa, yarısını sona yazarım.
		'Yarısını yazalım stream'e. 16 byte olduğuna göre yarısı ilk
		'8 byte oluyor.
		stream.Write(rj_256.IV, 0, 8)
		'şimdi asıl kripto stream'ini tanımlıyoruz.
		'İlk parametremiz yazılacağı stream. Ardından oluşturduğumuz
		'kripto class'ına "bana encryptor oluştur" diye emrediyoruz.
		'Son olarak da şu anda bu stream'e yazacağımızı söylüyoruz.
		Using crypto As New System.Security.Cryptography.CryptoStream(stream, rj_256.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write)
			'veriyi kripto stream'ine yazıyoruz...
			crypto.Write(data, 0, data.Length)
			'Sonra da "işimiz bitti diyoruz ki her şeyi yazsın.
			crypto.FlushFinalBlock()
			'Son olarak da IV'nin geri kalan yarısını yazalım.
			stream.Write(rj_256.IV, 8, 8)
			'Kripto işlemi tamamlandı. Şimdi bunu php'ye gönderip cevap alacağız;
			'Burada işlem biraz karışık. Web üstünden binary veri gönderemeyiz kolay
			'kolay. Uğraşmak ve standart dışı prosedürlerle uğraşmak yerine veriyi
			'base64 encode ediyorum, geri aldığım veri de sunucudan aynı mantıkta
			'base64 string olarak gelecek, onu da decode ediyorum.
			sonuc = Convert.FromBase64String(New System.Net.WebClient().UploadString("<site adresi>", "data=" + Convert.ToBase64String(stream.ToArray())))
		End Using
	End Using
	'Veriyi aldık. Şimdi okumamız lazım. Bu sefer
	'decrypt edeceğiz.
	'Önce kullandığımız key'i değiştirelim.
	rj_256.Key = key2
	'php de IV'yi benle aynı mantıkta göndermiş olsun.
	'Low level olarak sonuc'un başından ve sonundan 8'er
	'byte'ı rj_256'nın IV değerine kopyalayalım.
	'işlem hızı önemsiz burada, sadece blockcopy'e çok alışığım.
	'Siz canınız isterse for döngüsü ile kopyalayın, farketmez.
	System.Buffer.BlockCopy(sonuc, 0, rj_256.IV, 0, 8)
	System.Buffer.BlockCopy(sonuc, sonuc.Length - 8, rj_256.IV, 8, 8)
	'Ters mantıkta cryptostream'i de kuruyoruz.
	'Tabii bu sefer encryptor değil decryptor istiyoruz rj_256'dan ve de
	'yapacağımız işlem WRITE değil, READ.
	'Yine boş bir memorystream'e yazacak sonucu...
	Using stream As New System.IO.MemoryStream()
		Using crypto As New System.Security.Cryptography.CryptoStream(stream, rj_256.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Read)
			'Veriyi aktarırken AMAN DİKKAT. İlk 8 byte ve son 8 byte IV idi.
			crypto.Read(sonuc, 8, sonuc.Length - 16)
			'İşlemi bitirip flush ediyoruz.
			crypto.FlushFinalBlock()
			'Fazladan değişken harcamaya gerek yok. Sonucun içine deşifre
			'edilmiş veriyi yazıyoruz.
			sonuc = stream.ToArray()
		End Using
		'Burada artık, istediğimiz kontrolleri yapıyoruz. sonuc byte array
		'olarak sunucunun gönderdiği veriyi içeriyor.
		'istersek bunu
		Dim _sonuc As String = System.Text.Encoding.UTF8.GetString(sonuc)
		'deyip string'e de çeviririz.
	End Using
End Using
Allah Razı Olsun ABİM İnşallah Bende Birgün İnsanlara Işık Saçarım Sizin Gibi
    
Offline
 
Alıntı ile Cevapla
Alt 21-03-2017   #10
  • Offline
  • Asteğmen
  • Genel Bilgiler
Üyelik tarihi
Jan 2017
Mesajlar
Konular
9


  


Valla hocam hiç anlamadığım halde hepsini okudum bence roman yazarlığıda yapmalısın 🕵
    
Offline
 
Alıntı ile Cevapla
Cevapla

Bookmarks

Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks Kapalı
Pingbacks Kapalı
Refbacks Kapalı


Bilgilendirme Turkhackteam.net/org
Sitemizde yer alan konular üyelerimiz tarafından açılmaktadır.
Bu konular yönetimimiz tarafından takip edilsede gözden kaçabilen telif hakkı olan veya mahkeme kararı çıkmış konular sitemizde bulunabilir. Bu tür konuları bize turkhackteamiletisim [at] gmail.com adresine mail atarak bildirdiğiniz takdirde en kısa sürede konular hakkında gerekli işlemler yapılacaktır.
Please Report Abuse, DMCA, Harassment, Scamming, Warez, Crack, Divx, Mp3 or any Illegal Activity to turkhackteamiletisim [at] gmail.com


Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz, bu sitelerin güvenlik açıklarını site sahibine bildirmek için çaba sarfeder.
Turkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Turkhackteam sorumlu değildir. Sitelerinize Turkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.




Powered by vBulletin® Copyright ©2000 - 2017

TSK Mehmetçik Vakfı

Türk Polis Teşkilatını Güçlendirme Vakfı



Google Links

wau

Search Engine Friendly URLs by vBSEO 3.6.0 ©2011, Crawlability, Inc.