Как был наказан разработчик MMWSource... [Update! 26.11.14]

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#1 Сообщение 13.08.2013, 16:23

Неактуальная инфа
Всем привет, в связи с нежеланием разработчика этого плагина делиться исходным кодом в соответствии с GNU/GPL, я решил написать гайд по обходу системы защиты этого плагина. Кратко о плагине: это автоматическая система миксов в CS:S, которая продается по 5 евро на сервер. Зачем я не даю разработчику обогащаться на плагине? Потому-что язык Sourcepawn распространяется по лицензии GNU/GPL, что должно гарантировать наличие исходного кода. Так как кода мы не имеем, то мы заставляем плагин работать, несмотря на желание разработчика разжиреть на написании плагинов на столь простом языке, да и надо поднимать авторитет в отношении соблюдения лицензий для опенсоурса :)

Пост состоит из двух частей: непосредственно инструкция, и хронология моих действий (для тех, кому интересно). Может быть, мой пост будет полезен какому-нибудь новичку в крякании плагинов c:
Как я пришел к способу обхода
Найти плагин...
Один знакомый скинул мне этот плагин (его я, естественно, не называю), для сервера v34, сказав, что там стоит система защиты, которую нельзя обойти. Меня это утверждение разогрело к дальнейшим действиям. Первым делом я отправил его на веб-декомпилятор GoDTony (спасибо тебе чувак огромное!), где увидел куски исходного кода, включая информацию о БД с лицензиями, сервере апдейтов, и прочее. С сервера апдейтов я вручную скачал все нужные части плагина, и принялся их реверсить на том-же декомпиляторе...
В плагине знакомого была устаревшая информация (как он у него работал — остается вопросом, лол), и я нашел новую информацию для подключения к БД.

после этого обмануть скрипт проверки...
Это — скрипт проверки лицензии...

Код: Выделить всё

		if (mmws_LDb)
		{
			FormatEx(licquery, 255, "SELECT `serviceid`, `validdomain`, `validip`, `status`, `validdirectory`, `quantity` FROM mod_licensing WHERE `licensekey` = '%s'", lic);
			new Handle:licresult = SQL_Query(mmws_LDb, licquery, -1);
			if (licresult)
			{
				if (SQL_GetRowCount(licresult) == 1)
				{
					while (SQL_FetchRow(licresult))
					{
						licid = SQL_FetchInt(licresult, 0, 0);
						SQL_FetchString(licresult, 1, licip, 255, 0);
						SQL_FetchString(licresult, 2, licport, 255, 0);
						SQL_FetchString(licresult, 3, licstatus, 255, 0);
						SQL_FetchString(licresult, 4, licservers, 255, 0);
						liccol = SQL_FetchInt(licresult, 5, 0);
					}
				}
				else
				{
					MMWS_Updater_Log("License not valid. Plugin MMWSystem Lite %s activated...", "5.11");
				}
				if (StrContains(lic, "Leased-", true) != -1)
				{
					if (StrEqual(licstatus, "Active", true))
					{
						MMWS_Updater_Log("License accepted. Plugin MMWSystem Full %s activated...", "5.11");
						license = 1;
					}
					else
					{
						if (StrEqual(licstatus, "Reissued", true))
						{
							URLcurl = curl_easy_init();
							Format(liccheck, 255, "http://buy.mixwars.eu/check_license.php?id=%d&lic=%s&ip=%s&port=%s", licid, lic, s_ServerIP, s_ServerPort);
							curl_easy_setopt_string(URLcurl, CURLoption:10002, liccheck);
							curl_easy_perform_thread(URLcurl, URLonComplete, any:0);
						}
						MMWS_Updater_Log("License not valid. Plugin MMWSystem Lite %s activated...", "5.11");
					}
				}
				if (StrContains(lic, "LeaseD-", true) != -1)
				{
					if (StrEqual(licstatus, "Active", true))
					{
						Format(lservers, 255, "%s:%s", s_ServerIP, s_ServerPort);
						if (StrContains(licservers, lservers, true) != -1)
						{
							MMWS_Updater_Log("License accepted. Plugin MMWSystem Full %s activated...", "5.11");
							license = 1;
						}
						else
						{
							if (liccol < 5)
							{
								URLcurl = curl_easy_init();
								Format(liccheck, 255, "http://buy.mixwars.eu/check_license.php?id=%d&lic=%s&ip=%s&port=%s", licid, lic, s_ServerIP, s_ServerPort);
								curl_easy_setopt_string(URLcurl, CURLoption:10002, liccheck);
								curl_easy_perform_thread(URLcurl, URLonComplete, any:0);
							}
						}
					}
					else
					{
						if (StrEqual(licstatus, "Reissued", true))
						{
							URLcurl = curl_easy_init();
							Format(liccheck, 255, "http://buy.mixwars.eu/check_license.php?id=%d&lic=%s&ip=%s&port=%s", licid, lic, s_ServerIP, s_ServerPort);
							curl_easy_setopt_string(URLcurl, CURLoption:10002, liccheck);
							curl_easy_perform_thread(URLcurl, URLonComplete, any:0);
						}
						MMWS_Updater_Log("License not valid. Plugin MMWSystem Lite %s activated...", "5.11");
					}
				}
				if (StrContains(lic, "LeaSeD-", true) != -1)
				{
					if (StrEqual(licstatus, "Active", true))
					{
						Format(lservers, 255, "%s:%s", s_ServerIP, s_ServerPort);
						if (StrContains(licservers, lservers, true) != -1)
						{
							MMWS_Updater_Log("License accepted. Plugin MMWSystem Full %s activated...", "5.11");
							license = 1;
						}
						else
						{
							URLcurl = curl_easy_init();
							Format(liccheck, 255, "http://buy.mixwars.eu/check_license.php?id=%d&lic=%s&ip=%s&port=%s", licid, lic, s_ServerIP, s_ServerPort);
							curl_easy_setopt_string(URLcurl, CURLoption:10002, liccheck);
							curl_easy_perform_thread(URLcurl, URLonComplete, any:0);
						}
					}
					if (StrEqual(licstatus, "Reissued", true))
					{
						URLcurl = curl_easy_init();
						Format(liccheck, 255, "http://buy.mixwars.eu/check_license.php?id=%d&lic=%s&ip=%s&port=%s", licid, lic, s_ServerIP, s_ServerPort);
						curl_easy_setopt_string(URLcurl, CURLoption:10002, liccheck);
						curl_easy_perform_thread(URLcurl, URLonComplete, any:0);
					}
					MMWS_Updater_Log("License not valid. Plugin MMWSystem Lite %s activated...", "5.11");
				}
			}
		}
Прочитав этот код, мне в голову залезла идея: обмануть лицензию можно банально... подменив хост базы данных! Верно!
Скачал денвер, установил, запустил и залил бекап базы (их база лежит в открытом доступе, в исходнике плагина Вы сможете увидеть информацию для подключения к ней, но бекап 12.08 я залью сюда). После этого встал вопрос о подмене хоста, и тут на помощь пришел великий файл hosts!
Через минуту эти две строки уже были в hosts:

Код: Выделить всё

127.0.0.1	mysql.q-media.ru
127.0.0.1	buy.mixwars.eu
После этого я просто подменил IP и порт в БД лицензий, прописал код лицензии в файле cstrike/cfg/sourcemod/mmw_system.cfg и запустил сервер, скрестив пальцы.
Сервер выдал вожделенный ответ:
1.png
1.png (171.58 КБ) 4891 просмотр
1.png
1.png (171.58 КБ) 4891 просмотр
Плагин работает! Ура! Я написал на их форум, что, мол либо вы выкладываете исходники\платите мне деньги за неразглашение, или я выкладываю способ обхода на разные порталы. Разработчик вероломно удалил мой пост, обновил плагин добавив в него такие строки:

Код: Выделить всё

	if (StrEqual(s_ServerIP, "194.54.177.174", true))
	{
		GetPluginFilename(GetMyHandle(), s_PluginName, 32);
		decl String:filename[200];
		BuildPath(PathType:0, filename, 200, "plugins/%s", s_PluginName);
		DeleteFile(filename);
		ServerCommand("sm plugins unload %s", s_PluginName);
	}
Собственно, теперь этот плагин — достояние общественности. Все файлы, которые мне удалось выкачать, я прикреплю в архиве. Этот способ лома точно работает на версии 5.11 — версии, в которой разработчик добавил вышеприведенные строки.
Сейчас, конечно, я ищу более эффективный способ обхода защиты, и эта довольно простая победа дала мне сил :)
Установка и обход лицензии, инструкция @ Windows
1. Качаем архив из приложения или выкачиваем всё по-отдельности с этой ссылки файлы.
2. Поднимаем денвер (на самом деле сгодится любой веб-сервер с работающим MySQL), создаем базу с такими данными:

Код: Выделить всё

имя базы: eu_mixwars_buy
имя пользователя: checklicense
пароль к базе: rVen9YfeLwG4deUy

данные верны на версии 5.11
2.1 Заливаем бекап из приложения к посту
3. Прописываем в файле C:\Windows\System32\drivers\etc\hosts следующие строки:

Код: Выделить всё

127.0.0.1	mysql.q-media.ru
127.0.0.1	buy.mixwars.eu
Не забываем сохранить.
4. Прописываем в файле cstrike/cfg/sourcemod/mmw_system.cfg ключ лицензии, любой из базы.
Выбираем ключи из тех, у которых префикс - Leased, это наиболее полная версия плагина
5. Меняем IP адрес для выбранного ключа лицензии в БД. (можно через PMA)

Код: Выделить всё

UPDATE mod_licensing SET `validdomain`='ip сервера', `validip`='порт сервера', `validdirectory`='ip:port' WHERE `licensekey`='выбранный_ключ_лицензии'
6. Запускаем сервер и радуемся.
Я надеюсь, что я правильно выбрал форум для этого поста, потому что csmania для меня всегда была символом получения запретных плодов c:
А актуальная инфа тут: https://forum.csmania.pw/viewtopic.php? ... 5#p1136889
Вложения
mixwars.rar
архив с плагином 5.1 и 5.11
(2.07 МБ) 421 скачивание
mixwars.rar
архив с плагином 5.1 и 5.11
(2.07 МБ) 421 скачивание
dump.zip
Бекап базы лицензий MMWS, 1 таблица, только ключи лицензий
(1.91 КБ) 328 скачиваний
dump.zip
Бекап базы лицензий MMWS, 1 таблица, только ключи лицензий
(1.91 КБ) 328 скачиваний
Последний раз редактировалось igodsewer 26.11.2014, 00:05, всего редактировалось 1 раз.

yalamer
Нович0к
Нович0к
Сообщения: 29
Зарегистрирован: 04.12.2009
Благодарил (а): 10 раз
Поблагодарили: 6 раз
Контактная информация:

#2 Сообщение 13.08.2013, 16:56

igodsewer
Это всё, конечно, интересно... Но разве лицензия на язык программирования (а что это за бред кстати?:) ) подразумевает такую же лицензию на конечный продукт?
Последний раз редактировалось yalamer 13.08.2013, 17:42, всего редактировалось 2 раза.

igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#3 Сообщение 13.08.2013, 17:41

yalamer писал(а):igodsewer
Это всё, конечно, интересно... Но разве лицензия на язык программирования (а что это за бред кстати?:) ) подразумевает такую же лицензию на конечный продукт?
Это либо ты не так понял, либо я не так сказал, но условие пользования языком Sourcepawn — открытый и доступный исходный код любого приложения, язык распространяется по GNU/GPL.

yalamer
Нович0к
Нович0к
Сообщения: 29
Зарегистрирован: 04.12.2009
Благодарил (а): 10 раз
Поблагодарили: 6 раз
Контактная информация:

#4 Сообщение 13.08.2013, 17:52

igodsewer писал(а): Это либо ты не так понял, либо я не так сказал, но условие пользования языком Sourcepawn — открытый и доступный исходный код любого приложения, язык распространяется по GNU/GPL.
1. Как я понял, у Pawn лицензия zlib (не требует обязательного распространения исходных текстов вместе с продуктом). Может конечно есть какой-то особый пункт лицензии именно SourcePawn, но беглое гугление не помогло его обнаружить.
2. По твоей логике получается, что любая программа, скомпилированная gcc, должна поставляться с исходным кодом? Мне кажется ты путаешь лицензии на само средство разработки и на конечный продукт, который выходит из под клавиатуры программиста. Так бы и написал "хотел бабла от разработчика, но не получилось - поэтому вот как можно обойти защиту плагина". Незачем прикрываться какой-то светлой целью со словами про open source.

igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#5 Сообщение 13.08.2013, 18:04

yalamer писал(а):
igodsewer писал(а): Это либо ты не так понял, либо я не так сказал, но условие пользования языком Sourcepawn — открытый и доступный исходный код любого приложения, язык распространяется по GNU/GPL.
1. Как я понял, у Pawn лицензия zlib (не требует обязательного распространения исходных текстов вместе с продуктом). Может конечно есть какой-то особый пункт лицензии именно SourcePawn, но беглое гугление не помогло его обнаружить.
2. По твоей логике получается, что любая программа, скомпилированная gcc, должна поставляться с исходным кодом? Мне кажется ты путаешь лицензии на само средство разработки и на конечный продукт, который выходит из под клавиатуры программиста. Так бы и написал "хотел бабла от разработчика, но не получилось - поэтому вот как можно обойти защиту плагина". Незачем прикрываться какой-то светлой целью со словами про open source.
Тебе надо почитать http://www.sourcemod.net/license.php
Q: What license do plugins/extensions fall under? Derivative works must be under the GPL, version 3. There are compatibility expections for using 2, and these exceptions are listed in the full text linked above.
Вопрос: Под какой лицензией распространяются плагины/расширения? Все продукты должны распространяться по GPL 3 версии. Есть некоторые нюансы по совместимости с 2 версией, и все эти нюансы отмечены в полном тексте, ссылка на который есть нижу.
А я действительно преследую "светлую" цель, ибо нечего стричь бабло с того, что должно быть бесплатным.
Последний раз редактировалось NiGHt-LEshiY 13.08.2013, 18:04, всего редактировалось 2 раза.
Причина: Давайте без острых выражений.

yalamer
Нович0к
Нович0к
Сообщения: 29
Зарегистрирован: 04.12.2009
Благодарил (а): 10 раз
Поблагодарили: 6 раз
Контактная информация:

#6 Сообщение 13.08.2013, 18:14

igodsewer
Спасибо за разъяснения. Буду знать теперь =)
igodsewer писал(а):Я написал на их форум, что, мол либо вы выкладываете исходники\платите мне деньги за неразглашение, или я выкладываю способ обхода на разные порталы.
Ну а тут всё понятно. Пункт про исходный код вижу, а про требование денег не увидел...
Q: Can I sell/charge for plugins or extensions? Sure, but you have to make the source code freely available as per the GPL.
igodsewer писал(а):А я действительно преследую "светлую" цель, ибо стричь бабло с того, что должно быть бесплатным.
Открытый исходный код неравно бесплатно.

igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#7 Сообщение 13.08.2013, 18:33

yalamer писал(а):igodsewer
Спасибо за разъяснения. Буду знать теперь =)
igodsewer писал(а):Я написал на их форум, что, мол либо вы выкладываете исходники\платите мне деньги за неразглашение, или я выкладываю способ обхода на разные порталы.
Ну а тут всё понятно. Пункт про исходный код вижу, а про требование денег не увидел...
Q: Can I sell/charge for plugins or extensions? Sure, but you have to make the source code freely available as per the GPL.
igodsewer писал(а):А я действительно преследую "светлую" цель, ибо нехуй стричь бабло с того, что должно быть бесплатным.
Открытый исходный код неравно бесплатно.
Ясное дело, надо же как-то засранца наказать. Но дело не в том, бесплатно, или нет, дело в том, что лицензия GPL подразумевает бесплатность ПО, ввиду того, что она обещает свободу запуска\исследования программы.

xvitaly
Сержант
Сержант
Сообщения: 51
Зарегистрирован: 24.05.2010
Поблагодарили: 42 раза
Контактная информация:

#8 Сообщение 13.08.2013, 19:15

igodsewer писал(а):Но дело не в том, бесплатно, или нет, дело в том, что лицензия GPL подразумевает бесплатность ПО, ввиду того, что она обещает свободу запуска\исследования программы.
GNU GPL не запрещает продавать ПО. Она лишь требует предоставить исходники купившему программу.

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#9 Сообщение 13.08.2013, 21:32

igodsewer писал(а):Но дело не в том, бесплатно, или нет, дело в том, что лицензия GPL подразумевает бесплатность ПО, ввиду того, что она обещает свободу запуска\исследования программы.
Нет, даже по Столлману (самому известному активисту FSF и создателю GNU GPL) такое ПО может продаваться. Это никак не влияет на необходимость соблюдать основные требования GNU GLP, одно из которых — предоставить исходный код либо с распространяемым дистрибутивом, либо по требованию лица, которое владеет таким распространяемым дистрибутивом.

Если автор не предоставил исходный код по вашему требованию — это нарушение лицензии.

Добавлено спустя 3 минуты 57 секунд:
А дело вы сделали хорошее, я весьма рад такому.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#10 Сообщение 13.08.2013, 23:14

NiGHt-LEshiY писал(а):
igodsewer писал(а):Но дело не в том, бесплатно, или нет, дело в том, что лицензия GPL подразумевает бесплатность ПО, ввиду того, что она обещает свободу запуска\исследования программы.
Нет, даже по Столлману (самому известному активисту FSF и создателю GNU GPL) такое ПО может продаваться. Это никак не влияет на необходимость соблюдать основные требования GNU GLP, одно из которых — предоставить исходный код либо с распространяемым дистрибутивом, либо по требованию лица, которое владеет таким распространяемым дистрибутивом.

Если автор не предоставил исходный код по вашему требованию — это нарушение лицензии.

Добавлено спустя 3 минуты 57 секунд:
А дело вы сделали хорошее, я весьма рад такому.
Хм, возможно, я ошибался. Но даже при продаже исходный код не предоставлялся.
Спасибо за похвалу, я рад c:

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#11 Сообщение 13.08.2013, 23:23

igodsewer
Да ничего, лицензии GPL одни из самых сложных лицензий для восприятия. Некоторые вещи, прописанные в лицензии, не совсем логичны с первого взгляда. Например, открытое ПО можно продавать, но первый оплативший программу и получивший исходники может начать распространять их бесплатно или платно с ценой на своё усмотрение. Это всё довольно странно %)
И, кстати, наверное за это переживал разработчик MMWSource.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

igodsewer
Нович0к
Нович0к
Сообщения: 14
Зарегистрирован: 31.10.2011
Поблагодарили: 28 раз

#12 Сообщение 14.08.2013, 00:01

NiGHt-LEshiY писал(а):igodsewer
Да ничего, лицензии GPL одни из самых сложных лицензий для восприятия. Некоторые вещи, прописанные в лицензии, не совсем логичны с первого взгляда. Например, открытое ПО можно продавать, но первый оплативший программу и получивший исходники может начать распространять их бесплатно или платно с ценой на своё усмотрение. Это всё довольно странно %)
И, кстати, наверное за это переживал разработчик MMWSource.
Ещё есть наработка по кряку плагина Jail-Commander от wS, может выложу на днях.

Veyron
Нович0к
Нович0к
Сообщения: 1
Зарегистрирован: 23.09.2013
Поблагодарили: 1 раз

#13 Сообщение 23.09.2013, 00:27

Выложи версию для стимовского сервера!

Аватара пользователя
OffsprinG
Лейтенант
Лейтенант
Сообщения: 110
Зарегистрирован: 16.04.2010
Благодарил (а): 48 раз
Поблагодарили: 33 раза
Контактная информация:

#14 Сообщение 08.10.2013, 04:12

igodsewer, когда же начнется продолжение?) Очень интересная статья. Прочел, разобрался - работает. Но автор плагина уже давно ускакал вперед, обновив свой плагин уже до 5.29 версии :) Пробовал по Вашему методу узнать все данные, но данные бд он хитро скрыл, не так как в 5.11, не в открытом виде.
Давайте, накажите негодяя еще раз :D С нетерпение жду.
PLAYHARD.ORG.UA - R.I.P.

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#15 Сообщение 08.10.2013, 05:25

Автору плагина следовало писать плагин сразу для метамода, потому как сорсмод для наживы подходит плохо :)
Никакого отношения к нацистским группам и направлениям не имею.

Ответить Вложения 4