Zabezpieczanie swojej aplikacji przed "hakierami".

Ciekawe artykuły dotyczące C#

Moderator: xxSlayeRxx

Zabezpieczanie swojej aplikacji przed "hakierami".

Sponsor

Sponsor
 

Zabezpieczanie swojej aplikacji przed "hakierami".

Postprzez `DrumZy » N cze 05, 2011 6:50 am

Witam serdecznie!

Postanowiłem napisać mały tutorial jak zabezpieczyć swoją aplikację, przy której spędziło się ileś tam dni czy tygodnii. Rozwiązania stosowane tutaj są całkowicie darmowe i na pewno nie zapewnią takiej samej ochrony jak płatne, ale jak to mówią, lepszy rydz niż nic :P

Ale przejdźmy do konkretów.

1. Zabezpieczanie .exe przed osobami lubiącymi OllyDbg czy też inne programy do dekompilacji (dezasemblacji).

Dzięki user'owi max, dowiedziałem się o programie Eazfuscator.NET, który możemy pobrać TUTAJ.

Jego zadaniem jest maskowanie nazw procedur oraz samych zmiennych oraz ich wartości.
Jak na darmowy tego typu program spełnia swoje zadanie całkiem dobrze.

- Jak używać Eazfuscator.NET?

1. Najpierw pobieramy ten program.
2. Instalujemy.
3. Aplikacja zostaje zintegrowana z VS.
4. Uruchamiamy go z menu Start.
Widzimy wten takie o to okno:
Obrazek

Jak można się domyśleć, zielony odpowiada za zabezpieczenie naszej aplikacji.

5. Metodą drag & drop przerzucamy nasz plik .exe na zielone tło programu.
6. Wyświetli się okno przetwarzania, czekamy aż pasek na górze zapełni się.
7. Zabezpieczony plik będzie zamieniony z wcześniejszym, który przerzucaliśmy na okno Eazfuscator'a.

Tak o to zapewniliśmy ochronę swoich programów.

2. (BONUS) Zabezpieczony plik konfiguracyjny aplikacji (typu [b]settings.dat itp.)[/b]

Teraz pokażę Wam jak zabezpieczyć swój plik konfiguracyjny, oczywiście tyczy się to tych którzy lubią trzymać ważne dane w plikach .ini, .dat itp.

Generalnie o to pełny kod funkcji: (dzięki Day7)
Kod: Zaznacz cały
static string password = "hasełko";
static byte[] salt = { 0x01 };

public static string Encrypt(string value)
{
    try
    {
        byte[] buff = Encoding.Unicode.GetBytes(value);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, salt);

        Rijndael alg = Rijndael.Create();
        alg.Key = pdb.GetBytes(32);
        alg.IV = pdb.GetBytes(16);

        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
        cs.Write(buff, 0, buff.Length);
        cs.Dispose();

        return Convert.ToBase64String(ms.ToArray());
    }
    catch
    {
        return string.Empty;
    }
}

public static string Decrypt(string value)
{
    try
    {
        byte[] buff = Convert.FromBase64String(value);

        PasswordDeriveBytes pdb = new PasswordDeriveBytes(password, salt);

        Rijndael alg = Rijndael.Create();
        alg.Key = pdb.GetBytes(32);
        alg.IV = pdb.GetBytes(16);

        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
        cs.Write(buff, 0, buff.Length);
        cs.Dispose();

        return Encoding.Unicode.GetString(ms.ToArray());
    }
    catch
    {
        return string.Empty;
    }
}


Linijka ze zmienną password, to taki jakby klucz odblokowywujący nasze hash'e (można też nazwać ziarno, tak samo jak salt = { 0x01 }).

Aby sprawdzić działanie tworzymy prostą aplikację WinForms:
Obrazek

Przycisk Encode (button1) w metodzie Click umieszczamy:
Kod: Zaznacz cały
if (File.Exists("encoded.dat") == true)
            {
                File.Delete("encoded.dat");

            }

            StreamWriter sw = new StreamWriter("encoded.dat");

            sw.Write(Encrypt(textBox1.Text));

            sw.Close();


Tak o to napisaliśmy kodzik, który tworzy plik z zakodowanym tekstem z textBox1.

Teraz, aby odczytać tekst z tego pliku używamy w metodzie Click (button2):
Kod: Zaznacz cały
StreamReader sr = new StreamReader("encoded.dat");

            textBox2.Text = Decrypt(sr.ReadLine());


Ten kod natomiast przetwarza shashowany tekst na zwykły, dzięki czemu będziemy wstanie go odczytać.

Jak widać jest to prosta i przyjemna droga do zabezpieczenia poufnych danych.

Oczywiście warto wspomnieć, że żeby nie odkryć ziarna, trzeba używać Eazfuscator'a albo dosyć taniego (jak na takie aplikacje) Obfuscator'a.

10 euro za 1000 obfuskacji, nie jest to chyba wygórowana cena.

Pozdrawiam.
_____________________________
Credits:
max oraz Day7 za dobry kawał informacji :)
`DrumZy
Member
 
Posty: 93
Dołączył(a): Pt maja 22, 2009 6:56 pm
Lokalizacja: Piotrków Trybunalski

Zabezpieczanie swojej aplikacji przed "hakierami".

Sponsors

Sponsor
 

Powrót do Artykuły

Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot] i 2 gości