Неактуальная инфа
Всем привет, в связи с нежеланием разработчика этого плагина делиться исходным кодом в соответствии с GNU/GPL, я решил написать гайд по обходу системы защиты этого плагина. Кратко о плагине: это автоматическая система миксов в CS:S, которая продается по 5 евро на сервер. Зачем я не даю разработчику обогащаться на плагине? Потому-что язык Sourcepawn распространяется по лицензии GNU/GPL, что должно гарантировать наличие исходного кода. Так как кода мы не имеем, то мы заставляем плагин работать, несмотря на желание разработчика разжиреть на написании плагинов на столь простом языке, да и надо поднимать авторитет в отношении соблюдения лицензий для опенсоурса :)
Пост состоит из двух частей: непосредственно инструкция, и хронология моих действий (для тех, кому интересно). Может быть, мой пост будет полезен какому-нибудь новичку в крякании плагинов c:
Я надеюсь, что я правильно выбрал форум для этого поста, потому что csmania для меня всегда была символом получения запретных плодов c:
Пост состоит из двух частей: непосредственно инструкция, и хронология моих действий (для тех, кому интересно). Может быть, мой пост будет полезен какому-нибудь новичку в крякании плагинов c:
Как я пришел к способу обхода
Найти плагин...
Один знакомый скинул мне этот плагин (его я, естественно, не называю), для сервера v34, сказав, что там стоит система защиты, которую нельзя обойти. Меня это утверждение разогрело к дальнейшим действиям. Первым делом я отправил его на веб-декомпилятор GoDTony (спасибо тебе чувак огромное!), где увидел куски исходного кода, включая информацию о БД с лицензиями, сервере апдейтов, и прочее. С сервера апдейтов я вручную скачал все нужные части плагина, и принялся их реверсить на том-же декомпиляторе...
В плагине знакомого была устаревшая информация (как он у него работал — остается вопросом, лол), и я нашел новую информацию для подключения к БД.
после этого обмануть скрипт проверки...
Это — скрипт проверки лицензии...
Прочитав этот код, мне в голову залезла идея: обмануть лицензию можно банально... подменив хост базы данных! Верно!
Скачал денвер, установил, запустил и залил бекап базы (их база лежит в открытом доступе, в исходнике плагина Вы сможете увидеть информацию для подключения к ней, но бекап 12.08 я залью сюда). После этого встал вопрос о подмене хоста, и тут на помощь пришел великий файл hosts!
Через минуту эти две строки уже были в hosts:
После этого я просто подменил IP и порт в БД лицензий, прописал код лицензии в файле cstrike/cfg/sourcemod/mmw_system.cfg и запустил сервер, скрестив пальцы.
Сервер выдал вожделенный ответ:
Плагин работает! Ура! Я написал на их форум, что, мол либо вы выкладываете исходники\платите мне деньги за неразглашение, или я выкладываю способ обхода на разные порталы. Разработчик вероломно удалил мой пост, обновил плагин добавив в него такие строки:
Собственно, теперь этот плагин — достояние общественности. Все файлы, которые мне удалось выкачать, я прикреплю в архиве. Этот способ лома точно работает на версии 5.11 — версии, в которой разработчик добавил вышеприведенные строки.
Сейчас, конечно, я ищу более эффективный способ обхода защиты, и эта довольно простая победа дала мне сил :)
Один знакомый скинул мне этот плагин (его я, естественно, не называю), для сервера 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
Сервер выдал вожделенный ответ:
- 1.png (171.58 КБ) 5062 просмотра
- 1.png (171.58 КБ) 5062 просмотра
Код: Выделить всё
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);
}
Сейчас, конечно, я ищу более эффективный способ обхода защиты, и эта довольно простая победа дала мне сил :)
Установка и обход лицензии, инструкция @ Windows
1. Качаем архив из приложения или выкачиваем всё по-отдельности с этой ссылки файлы.
2. Поднимаем денвер (на самом деле сгодится любой веб-сервер с работающим MySQL), создаем базу с такими данными:
2.1 Заливаем бекап из приложения к посту
3. Прописываем в файле C:\Windows\System32\drivers\etc\hosts следующие строки:
Не забываем сохранить.
4. Прописываем в файле cstrike/cfg/sourcemod/mmw_system.cfg ключ лицензии, любой из базы.
Выбираем ключи из тех, у которых префикс - Leased, это наиболее полная версия плагина
5. Меняем IP адрес для выбранного ключа лицензии в БД. (можно через PMA)
6. Запускаем сервер и радуемся.
2. Поднимаем денвер (на самом деле сгодится любой веб-сервер с работающим MySQL), создаем базу с такими данными:
Код: Выделить всё
имя базы: eu_mixwars_buy
имя пользователя: checklicense
пароль к базе: rVen9YfeLwG4deUy
данные верны на версии 5.11
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`='выбранный_ключ_лицензии'