PDA

Просмотр полной версии : Защита и взлом програм написанных на c#


NorickNew
27.06.2012, 20:02
Взял с моего блога...
Возможно допустил ошибки, но времени читать то что написал нету, если что-то неправильно поправьте !

Здравствуйте,это моя первая статья для этого блога который я создал 1 день назад =)
Если вы только начинаете изучать c# то она будет для вас полезна!
Представим случай: вы уже изучили половину книги и написали алгоритм программы, ну и выложили программу на форум а тут нашёлся вася которому ваша программа понравилась и он захотел «Сделать» такую, он берёт в руки «открывашку» и вскрывает исходный код!
Потом делает по исходному коду такую-же программу и выкладывает уже на другой форум, и он фактически будет считаться автором!
Сейчас я расскажу вам о взломе и защите !

Для взлома мы можем использывать программы типа- .Net Reflector!
Просто нажимаем в ней- Опен-опен файл- указываем файл-в таблицие находим нашу программу и тыкаем + рядом и находим FORM1 рядом тыкаем + и там будет «Имя_клик_номер» тыкаем на неё и смотрим код этого действия!

Для защиты мы можем пользыватся «Пакером», хоть их и можно спокойно взломать настоящему крякеру,но новичку это усложнит намнооооого жизнь =))))))))
Названия пакера- .Net Reactor!
Все файлы вы можете скачать ниже!
В нём всё очень просто,тыкаем нев проект,находим кнопку опен справа,внизу ставим все галки,слева тыкаем протект и она защищаеться,вам выдаст окно с текстом и слева кнопка «Броувзер» тыкаем и нас перенесёт к проге =)

Можете меня извинить за ошибки,пишу быстро, надо ещё привязку делать =)
Кстати в начала кода можем ещё маленькую криптовчку для защиты добавить:

private string Crypt(string text)
{
string rtnStr = string.Empty;
foreach (char c in text) // Цикл, которым мы и криптуем «текст»
{
rtnStr += (char)((int)c ^ 15); //Число можно взять любое.
}
return rtnStr; //Возвращаем уже закриптованную строку.
}

Вставить после:

public Form1()
{
InitializeComponent();

}

...
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Скачать .Net Rector(защита)Рядом есть кряк,сначала прогу устанавливаем а потом файл с названием типа «Регистер»(не помню просо) — [Ссылки могут видеть только зарегистрированные и активированные пользователи] (пароль: virus-onli.ru)


Скачать .Net Reflector(взлом) — ТЫК ([Ссылки могут видеть только зарегистрированные и активированные пользователи])

Nickitee
27.06.2012, 20:40
1. Твою привязку обойдут.
2. .Net Reactor 4.0.0.0 легко снимается.

Добавлено через 5 минут
Для крипта строки я бы посоветовал такой метод:

private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(clearText, 0, clearText.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return encryptedData;
}
public static string EncryptString(string clearText, string Password)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
private static byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}
public static string DecryptString(string cipherText, string Password)
{
byte[] cipherBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return System.Text.Encoding.Unicode.GetString(decryptedDa ta);
}

Как юзать:

MessageBox.Show(String.Format("This is normal text: {0}, \nThis is crypted text: {1}, \nThis is decrypted text: {2}", "Hello!", EncryptString("Hello!", "123"), DecryptString(EncryptString("Hello!", "123"), "123")));

Norick
27.06.2012, 21:31
1. Твою привязку обойдут.
2. .Net Reactor 4.0.0.0 легко снимается.

Добавлено через 5 минут
Для крипта строки я бы посоветовал такой метод:

private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(clearText, 0, clearText.Length);
cs.Close();
byte[] encryptedData = ms.ToArray();
return encryptedData;
}
public static string EncryptString(string clearText, string Password)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
private static byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}
public static string DecryptString(string cipherText, string Password)
{
byte[] cipherBytes = Convert.FromBase64String(cipherText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return System.Text.Encoding.Unicode.GetString(decryptedDa ta);
}

Как юзать:

MessageBox.Show(String.Format("This is normal text: {0}, \nThis is crypted text: {1}, \nThis is decrypted text: {2}", "Hello!", EncryptString("Hello!", "123"), DecryptString(EncryptString("Hello!", "123"), "123")));


ммм...
1.Мою привязку? :shock: Я только показал как сгенерировать ключ, а базу можно и негрузитьа поступить по вашему гайду заменив лишь коды генерации ключа :elefant:
Т.к многие жаловлись что айди железа легко сменить =)
2.Если конечно у вас не "супер-крутой-мега алгоритм" то этот способ сойдёт, т.к открытием занимаются в основном просто те кто нашёл прогу на форуме, а людям со стажем ваша маленькая программа и не нужна, так вы спасёте себя от нубов с рефлекторами =)
Разумеется лучше пользыватся платным пакером, т.к у них хороший алгоритм /md
Спасибо за криптовку,но у меня есть получше просто выкладывать думаю неправильно(т.к лежало под хайдом на одном форуме) :goplol:

Gogia
20.07.2012, 22:11
2. .Net Reactor 4.0.0.0 легко снимается.Хотелось бы где-нибудь почитать про это. Дайте ссылочку, пожалуйста.

.AsTex.
20.07.2012, 23:25
Да 97% обфускаторов снимаются дампом.
Сегодня(именно сегодня) искал в гугле ".net rector unpacker" но на ткнулся на анпакер для Smart Assembly, и что в итоге? PBDO бот, все что нужно - взломано