Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 16.03.2014, 20:31   #1
Something in the way
 Сержант
Аватар для Diamant
 
Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(
Регистрация: 26.07.2009
Сообщений: 112
Популярность: 15236
Золото Zhyk.Ru: 12
Сказал(а) спасибо: 198
Поблагодарили 205 раз(а) в 71 сообщениях
Отправить сообщение для Diamant с помощью ICQ Отправить сообщение для Diamant с помощью Skype™
 
По умолчанию Привязка к железу с проверкой через сервер

В данной статье вы узнаете, как защищать свой софт от взлома, путем привязки программы к железу. Проверка данных будет осуществляться через PHP-скрипт. Все исходные коды вы найдете в приложенном архиве, в теме описаны только основные моменты.

Если вам лень разбираться во всем этом коде, в архиве лежит полностью рабочий вариант. Открываете, проставляете свои ключи, секретный ответ, данные от БД и можно спокойно пускать в ход.

Для начала подключаем в uses следующее:
Код:
IniFiles, EncdDecd, Wcrypt2
Wcrypt2.pas можно найти в архиве с исходниками

Главная форма будет у нас отвечать за привязку и активацию программы. Выглядеть она будет у нас вот так:

[Ссылки могут видеть только зарегистрированные пользователи. ]

Теперь я покажу четыре простые функций, которые позволяют вытянуть информацию о ПК конечного пользователя:

Код:
function DiskID: String;
var
  VolumeName, FileSystemName: array [0 .. MAX_PATH - 1] of char;
  VolumeSerialNo: Dword;
  MaxComponentLength, FileSystemFlags: cardinal;
begin
  GetVolumeInformation('C:\', VolumeName, MAX_PATH, @VolumeSerialNo,
    MaxComponentLength, FileSystemFlags, FileSystemName, MAX_PATH);
  Result := IntToHex(VolumeSerialNo, 8);
end;
Код:
function MemorySize: string;
var
  lpMemoryStatus: TMemoryStatus;
begin
  lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
  GlobalMemoryStatus(lpMemoryStatus);
  with lpMemoryStatus do
  begin
    Result := Format('%0.0f', [dwTotalPhys div 1024 / 1024]) + ' Mb';
  end;
end;
Код:
function ProcType: string;
var
  lpSystemInfo: TSystemInfo;
begin
  GetSystemInfo(lpSystemInfo);
  Result := IntToStr(lpSystemInfo.dwProcessorType);
end;
Код:
function GetMem: String;
var
  MyMem: TMemoryStatus;
begin
  MyMem.dwLength := SizeOf(MyMem);
  GlobalMemoryStatus(MyMem);
  with MyMem do
  begin
    Result := IntToStr(dwTotalPhys);
  end;
end;
Далее нам понадобится функция шифрации, которая позволит закодировать эти данные, дабы мы могли их безопасно передать на сервер.

Много кода

Теперь подробно опишу функцию проверки лицензии, которую мы тоже должны запихать в unit1.pas

Код:
function check_lic: boolean;
var
  s: string;
  HTTP: TIdHTTP;
  data: tstringlist;
  rsp: TStringStream;
begin
  data := tstringlist.Create;
  HTTP := TIdHTTP.Create;
  rsp := TStringStream.Create('');
  site_url := 'http://site.ru/check_lic.php';
  // Здесь указываете ссылку на PHP скрипт

  s := DiskID + ':' + MemorySize + ':' + ProcType + ':' + GetMem;

  s := encrypt(s, key_encode);

  data.add('key=' + EncdDecd.EncodeString(s));
  data.add('email=' + Form1.Edit2.Text);
  HTTP.Post(site_url, data, rsp);

  // Отправили мыло и ключ на сервер

  if decrypt(EncdDecd.DecodeString(rsp.DataString), key_decode)
    = (DiskID + ':' + MemorySize + ':' + ProcType + ':' + GetMem + secret_answer)
  then
  begin
    Result := True;
    IniFile.WriteString('license', 'email', Form1.Edit2.Text);
  end
  else
    showmessage('Лицензия на ваш ПК отсутствует');
  // Декодируем ответ сервера, если secret_answer сошелся, сохраняем мыло
  // в файл, подтверждаем активацию

end;
Теперь разберем процедуру TForm1.FormCreate.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Position := poScreenCenter; // Выравниваем окно по центру

  key_encode := 'NulNullOnePoint';
  key_decode := 'NullNullTwoOpen';
  secret_answer := 'its_good';

  IniFile := TIniFile.Create(ChangeFileExt(GetCurrentDir, '\options.ini'));
  // Подключаем ini файл

  Form1.Edit2.Text := IniFile.ReadString('license', 'email', '');
  // Считываем емейл из ini (если сохранили его ранее)

  // Проверяем лицензию, если есть, скрываем форму активации, открываем другую
  if check_lic = True then
  begin
    Application.ShowMainForm := false;
    Application.CreateForm(TForm2, Form2);
    Form2.Show;
  end;

  // Если лицензии нет, в форме активации пользователь увидит свой ключ

  Edit1.Text := EncdDecd.EncodeString
    (encrypt(DiskID + ':' + MemorySize + ':' + ProcType + ':' + GetMem,
    key_encode));

  // Функция EncdDecd.EncodeString перекодирует кракозябры в
  // нормальный текст, чтобы мы могли без проблем передать его на сервер

end;
Все, клиентская часть готова. Теперь надо подготовить сервер. Создайте базу данных. В ней сделайте таблицу accounts c двумя столбцами - email и key.

PHP скрипт работает у нас абсолютно аналогично. Вот его код:

Код:
<?php

error_reporting(0);

function PKCS5RemovePadding($input)	{
		return rtrim($input, substr($input, strlen($input) - 1, 1));
	}
	
function PKCS5AddPadding($input) {
		$pad = strlen($input) % 16;
		for ($i = $pad; $i < 16; $i++) {
			$input .= chr(16 - $pad);
		}
		return $input;
	}

$email = $_REQUEST['email'];
$key = base64_decode($_REQUEST['key']);

$key_encode = 'NulNullOnePoint'; // Первый ключ
$key_decode = 'NullNullTwoOpen'; // Второй ключ
$secret_answer = 'its_good'; // Секретный ответ

$bd_name = 'bdname'; // Здесь введите название БД
$bd_pass = 'bdpass'; // Здесь введите пароль от БД

$key = PKCS5RemovePadding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key_encode, $key, MCRYPT_MODE_CBC));	

$link = mysql_connect('localhost', $bd_name, $bd_pass);
mysql_select_db($bd_name);

//выбор записей
$profiles = mysql_query("SELECT * FROM `accounts` WHERE (`email`= '$email') AND (`key`= '$key') ");

    if (!$profiles) {
        echo "Could not successfully run query from DB: " . mysql_error();
        exit;
    }
    
    if (mysql_num_rows($profiles) == 0) {
		$key = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key_decode, PKCS5AddPadding($key. "its_bad"), MCRYPT_MODE_CBC);	
        echo base64_encode($key);
        exit;
    }

$key = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key_decode, PKCS5AddPadding($key. $secret_answer), MCRYPT_MODE_CBC);		
echo base64_encode($key);

?>
Ну и скрипт добавления новых лицензий:

Код:
<form method="POST">
<p>Email юзера:</p>
<input name="email" value="<?=@$_POST['email'];?>">
<p>Ключ:</p>
<input name="key" value="<?=@$_POST['key'];?>">
<p><input type="submit" value=" Отправить "></p>
</form>

<?php
	error_reporting(0);

	function PKCS5RemovePadding($input)	{
		return rtrim($input, substr($input, strlen($input) - 1, 1));
	}
	
	function PKCS5AddPadding($input) {
		$pad = strlen($input) % 16;
		for ($i = $pad; $i < 16; $i++) {
			$input .= chr(16 - $pad);
		}
		return $input;
	}
	
	$email = $_POST['email'];
	
	$key_encode = 'NulNullOnePoint'; // Первый ключ
	$key_decode = 'NullNullTwoOpen'; // Второй ключ
	$secret_answer = 'its_good'; // Секретный ответ

	$bd_name = 'bdname'; // Здесь введите название БД
	$bd_pass = 'bdpass'; // Здесь введите пароль от БД

	$key = base64_decode($_POST['key']); // Декодим из base64
	$key = PKCS5RemovePadding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key_encode, $key, MCRYPT_MODE_CBC));	// Декодируем из шифра
	
	if (strripos($key, 'Mb:') === false) {
	echo ('<p style="color: red">Ошибка! Неверный код<br/>'. $key. '</p>');
	exit;
	}
	
	
	if (! $email or ! $key) echo ('<p style="color: red">Необходимо заполнить все поля</p>');
	else { 
			$link = mysql_connect('localhost', $bd_name, $bd_pass);
			mysql_select_db($bd_name);
			
			//выбор записей
			$profiles = mysql_query("SELECT * FROM `accounts` WHERE (`email`= '$email') AND (`key`= '$key') ");
			if (mysql_num_rows($profiles) > 0) {
				echo ('<p style="color: green">Уже есть в базе!<br/>'. $key .'</p>');	
				exit;
			}
			
			mysql_query("INSERT INTO `$bd_name`.`accounts` (`email`, `key`, `ip`) VALUES ('$email', '$key', '')");
			echo ('<p style="color: green">Лицензия добавлена в базу!<br/>'. $key .'</p>');		
		}
?>
Не забудьте проставить точно такие же ключи, а также секретный ответ!

[Ссылки могут видеть только зарегистрированные пользователи. ]

Специально для Zhyk.Ru
________________
Не флуди

Последний раз редактировалось Diamant; 16.03.2014 в 20:55.
  Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
.Master. (16.03.2014), DeathAngel (09.03.2020), dred777 (18.03.2014), jaja123 (16.03.2014), MembRupt (16.03.2014), Oleg908 (18.03.2014)
Старый 16.03.2014, 21:53   #2
 Пехотинец
Аватар для NebesaBag
 
NebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражания
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Думаю очень важно дополнить про разного рода дизассемблеры и защиту скомпилированного файла.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]

Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)


Кто плюсует популярность, подписывайтесь пожалуйста)
  Ответить с цитированием
Старый 16.03.2014, 22:20   #3
Почетный Пользователь
 Сержант
Аватар для MembRupt
 
MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(MembRupt сломал счётчик популярности :(
Регистрация: 18.07.2013
Сообщений: 148
Популярность: 83981
Сказал(а) спасибо: 564
Поблагодарили 258 раз(а) в 195 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Цитата:
Сообщение от NebesaBagПосмотреть сообщение
Думаю очень важно дополнить про разного рода дизассемблеры и защиту скомпилированного файла.

Это статья про одну разновидность защиты, а не про "комплексную оборону" ПО, о которой писать можно очень много
А по теме: могут ли с таким сбором информации всё-таки измениться данные о железе, при смене Windows?

Последний раз редактировалось MembRupt; 16.03.2014 в 22:22.
  Ответить с цитированием
Старый 16.03.2014, 23:17   #4
 Старший сержант
Аватар для metraz
 
metraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядомmetraz в состоянии испепелить взглядом
Регистрация: 25.12.2011
Сообщений: 191
Популярность: 5259
Сказал(а) спасибо: 31
Поблагодарили 235 раз(а) в 135 сообщениях
Отправить сообщение для metraz с помощью Skype™
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Цитата:
if check_lic = True then begin
Application.ShowMainForm := false;
Application.CreateForm(TForm2, Form2);
Form2.Show;
end;

Сие легко обойти обычным jumpом. Уж лучше ставить рантайм защиту.
  Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
Diamant (17.03.2014), NebesaBag (17.03.2014), the-boxi (17.03.2014)
Старый 17.03.2014, 13:11   #5
 Фельдмаршал
Аватар для Dimedrol1536
 
Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(Dimedrol1536 сломал счётчик популярности :(
Регистрация: 22.02.2011
Сообщений: 949
Популярность: 34698
Сказал(а) спасибо: 939
Поблагодарили 2,534 раз(а) в 911 сообщениях
Отправить сообщение для Dimedrol1536 с помощью ICQ Отправить сообщение для Dimedrol1536 с помощью Skype™
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Как по мне, данный метод не надёжен, а именно обмен данными с сервером.
  Ответить с цитированием
Пользователь сказал cпасибо:
the-boxi (17.03.2014)
Старый 18.03.2014, 03:57   #6
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Конкретно данный вариант возможно. Однако стоит в обмен данными внести дополнительную метку, зависящую хоть от рандома хоть от чего другого, лишь бы менялась от запуска к запуску. И генерируя сервером ключ с учетом данной метки. Мы получаем усложнение написания эмулятора сервера. Поскольку нужно будет реверсить приложение. И таким образом сводим на нет возможность прямого парсинга ключа.
  Ответить с цитированием
Пользователь сказал cпасибо:
Diamant (18.03.2014)
Старый 18.03.2014, 04:17   #7
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Крякал одну программку, да вот проснифать ее трафик было довольно напряжно ибо он постоянно менялся, полная каша, в итоге когда разобрал сорсы понял почему так.
клиент генерил 3 случайных байта, два записывал в начале пакета и один в конце, шифровал обратимым алгоритмом с использованием этих байт. Сервер в свою очередь делал почти тоже самое, при этом вместе с полезной нагрузкой довешивал третий из случайных байт таким образом производился контроль данных и нельзя было на любой запрос слать один и тот же заготовленный ответ.
В общем всегда все сводится в компрометации кода
________________
Talk is cheap. Show me the code
— Linus Torvalds
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
NebesaBag (18.03.2014), the-boxi (19.03.2014)
Старый 18.03.2014, 16:46   #8
Something in the way
 Сержант
Аватар для Diamant
 
Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(Diamant сломал счётчик популярности :(
Регистрация: 26.07.2009
Сообщений: 112
Популярность: 15236
Золото Zhyk.Ru: 12
Сказал(а) спасибо: 198
Поблагодарили 205 раз(а) в 71 сообщениях
Отправить сообщение для Diamant с помощью ICQ Отправить сообщение для Diamant с помощью Skype™
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Цитата:
Сообщение от metrazПосмотреть сообщение
Сие легко обойти обычным jumpом. Уж лучше ставить рантайм защиту.

Предполагается, что софт, в который кодер устанавливает такую защиту, в последствии будет паковаться. Например, можно использовать ту же Themida.
________________
Не флуди
  Ответить с цитированием
Пользователь сказал cпасибо:
jaja123 (18.03.2014)
Старый 18.03.2014, 23:55   #9
 Пехотинец
Аватар для NebesaBag
 
NebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражания
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Цитата:
Сообщение от DiamantПосмотреть сообщение
Предполагается, что софт, в который кодер устанавливает такую защиту, в последствии будет паковаться. Например, можно использовать ту же Themida.

Мне кажется фемида не самый лучший вариант.
Гугл например сразу выдал [Ссылки могут видеть только зарегистрированные пользователи. ]
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]

Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)


Кто плюсует популярность, подписывайтесь пожалуйста)
  Ответить с цитированием
Старый 22.11.2014, 16:02   #10
 Разведчик
Аватар для NUBOREZKA2012
 
NUBOREZKA2012 неизвестен в этих краяхNUBOREZKA2012 неизвестен в этих краяхNUBOREZKA2012 неизвестен в этих краяхNUBOREZKA2012 неизвестен в этих краяхNUBOREZKA2012 неизвестен в этих краяхNUBOREZKA2012 неизвестен в этих краях
Регистрация: 04.02.2012
Сообщений: 8
Популярность: -639
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для NUBOREZKA2012 с помощью Skype™
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Слышал одну идею для защиты - компиляция прямо на компе пользователя. То есть человек скачивает программу, а она докачивает код, правит его под данные о железе пользователя, и компилирует индивидуальную программу, которая уже на другом компе не запустится и будет работать даже при отсутствии интернет коннекта. Может натолкнул кого-то на мысль, потому что сам я так и не смог осуществить компиляцию программы в скрытом режиме, причем вызванную программно. В общем, если развить тему, то общим трудом может и сделаем хорошую защиту.
________________
Тык спасибку если заслужил!
За помощью обращаться в Skype™
  Ответить с цитированием
Старый 09.09.2015, 22:11   #11
 Разведчик
Аватар для GameOldHack
 
GameOldHack скоро будет известенGameOldHack скоро будет известенGameOldHack скоро будет известенGameOldHack скоро будет известен
Регистрация: 31.05.2015
Сообщений: 2
Популярность: 307
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Спасибо большое )) Для новичков которые хотят уберечь свой софт от свободного распространения по интернету саме то ))

Последний раз редактировалось GameOldHack; 10.09.2015 в 15:13.
  Ответить с цитированием
Старый 28.09.2017, 21:53   #12
 Разведчик
Аватар для CasoHack
 
CasoHack никому не известный тип
Регистрация: 05.03.2015
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Привязка к железу с проверкой через сервер

Выдет кучу ошибок помоги пожалуйста !

Добавлено через 5 минут
Выдет ошибку [Fatal Error] Activator.dpr(6): File not found: 'Vcl.Forms.dcu'

Последний раз редактировалось CasoHack; 28.09.2017 в 21:59. Причина: Добавлено сообщение
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Руководство] [C#] Привязка к железу v2. Nickitee C# 126 18.02.2022 23:40
[Продам] ЛИЧНЫЙ ТОП АКК! ГОТОВ ЧЕРЕЗ ГАРАНТА С ПРОВЕРКОЙ VectorSHack World of Tanks 0 31.05.2012 21:22

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:31.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net