Сейчас на форуме: asfa, bartolomeo (+7 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Проверка регистрационного кода через сайт |
Посл.ответ | Сообщение |
|
Создано: 20 февраля 2012 08:30 · Личное сообщение · #1 Всем привет! Расковырял бота для игры, нашел код проверки регистрации программы при запуске. Выглядит он примерно так: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Management; using System.Net; namespace keygen3 { public partial class Form1 : Form { private long long_1; private long long_0; private ulong ulong_0; private ulong ulong_2; private UInt64 ulong_3; public ulong ulong_4; private ulong ulong_5; private int p; private int z; public string e = ""; public Form1() { InitializeComponent(); } public string connect(string kod) { WebRequest.DefaultWebProxy = null; WebClient client = new WebClient(); try { e= client.DownloadString("hттp://bimsbot.ru/bims43x.php?id=" + Convert.ToUInt64(ulong_4) + "&kod=" + kod); return e; } catch { } Random random = new Random(); return random.Next(0xf4240, 0x989680).ToString(); } } private void Form1_Load(object sender, EventArgs e) { Random random = new Random(); string[] strArray3 = new string[] { Convert.ToString((long)(random.Next(0x3e8) * 0x174876e800L)), Convert.ToString((int)(random.Next(100) * 100)), "" }; FileInfo info = new FileInfo(@"C:\BimsBot\registration.re"); if (!info.Exists) { MessageBox.Show("Файла нет"); } string str = string.Empty; StreamReader reader = File.OpenText(@"C:\BimsBot\registration.re"); try { for (byte i = 0; i < 2; i = (byte)(i + 1)) { str = reader.ReadLine(); if (str == null) { MessageBox.Show("Файл пустой"); } strArray3[i] = str; } reader.Close(); } catch { } string[] strArray = new string[3]; string[] strArray2 = new string[3]; strArray = strArray3; try { long_0 = Convert.ToInt64(strArray[0]); } catch { long_0 = 0xe1dfd777L; } string s = ""; SelectQuery query = new SelectQuery("Win32_Processor"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); using (ManagementObjectCollection.ManagementObjectEnumerator enumerator = searcher.Get().GetEnumerator()) { while (enumerator.MoveNext()) { s = Convert.ToString(enumerator.Current["ProcessorId"]); } } byte[] bytes = new ASCIIEncoding().GetBytes(s); for (int i = 0; i < bytes.Length; i++) { p += bytes[i] * (i + 10); } ulong_3 = Convert.ToUInt64(p); ulong_4 = ulong_3 * ((ulong) 0x5ba0L); ulong_0 = Convert.ToUInt64(connect(long_0.ToString())); } private void button1_Click(object sender, EventArgs e) { ulong_2 = (ulong)Math.Ceiling(Math.Pow(((((double)long_0) / ((double)(ulong_3 * ((ulong)0x929L)))) + 3555.0) + (ulong_3 * ((ulong)0x929L)), 1.49)); if (ulong_2 != ulong_0) { триальная Версия; } else { Мы зарегестрированы; } } } } Это уже сам немного его переделал, что бы понять где, как и что работает, но основные моменты остались оригинальными. Значит в теле кода генерируется некое число, которое уникально для каждого компьютера, ulong_3. На основании этого числа генерируется ulong_4. Из регистрационного файла берется ключ, введенный при регистрации программы (long_0) и вместе с ulong_4 отправляется на сайт автора программы. При попытке воспроизвести все это дело и записать логи, получилось, что возвращаемое сайтом число каждый раз разное, при постоянных long_0 и ulong_4. Мое предположение такое: При обращении к серверу идет проверка отправляемого ключа в базе данных и если ключ есть, то отправляется уже постоянный ответ. Если такого ключа нет, генерируется бред. Вот хочу спросить вашего совета, как же можно то это дело обойти. Пытаюсь пропатчить код на сравнении изменив знак равенства, экзешник отказывается запускаться. Но в этом варианте я не уверен, поскольку опыта в таком патчинге у меня нет. Пока же запустил цикл с обходом возможных кодов регистрации и проверкой их на сервере. Это на тот случай если я все же оказался прав про одинаковые ответы на существующий серийник. ![]() |
|
Создано: 20 февраля 2012 09:51 · Личное сообщение · #2 |
|
Создано: 20 февраля 2012 10:10 · Личное сообщение · #3 |
|
Создано: 20 февраля 2012 10:38 · Личное сообщение · #4 |
|
Создано: 20 февраля 2012 10:42 · Поправил: AlexandrK · Личное сообщение · #5 kreolx Нету там ни каких проверок. Значит не правильно пропатчил. Я сделал гораздо проще... Там же есть триал. Просто найди по тексту из оповещения, где он закрывается по окончании триального времяни и удали килл процесса и вызов оповещения + к этому там чуть выше по тексту в том же методе есть ограничение на кол-во запущенных ботов которое тож можно просто удалить ![]() ![]() |
|
Создано: 20 февраля 2012 14:04 · Личное сообщение · #6 AlexandrK А ты чем патчил? Не знаю что не так делаю, но и через Reflexil и связкой Reflector, IDA, fLEXHEX ничего не получилось, в том плане, что выскакивает ошибка... Хотя это скорее мне матчасть учить нужно. И понравился вариант с установкой своего сервера на localhost. Сейчас пробую реализовать... ![]() |
|
Создано: 20 февраля 2012 15:58 · Личное сообщение · #7 |
|
Создано: 20 февраля 2012 16:42 · Поправил: kreolx · Личное сообщение · #8 В общем оказалось все не так просто на самом деле. У меня на внесение в файл Hosts адреса по которому отправляется запрос вызывало неизвестную ошибку и вылет программы. Убираешь строчку и работает нормально. А осуществить редирект программными средствами пока не знаю как, нашел одну прогу, но она работает только с браузерами, бота не видит. Покурю еще маны, может выплывет что нибудь.. Действительно SAE пропатчила без вопросов. Кстати в этой версии пройти проверку оказалось даже проще чем в предидущих. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Проверка регистрационного кода через сайт |
Эта тема закрыта. Ответы больше не принимаются. |