Перейти к публикации
TheAndrey

руководство Делаем Nulled DLE своими руками

Рекомендованные сообщения

TheAndrey

Nevex уже давно прекратил выпуск nulled-версий DataLife Engine. Впоследствии был закрыт генератор ключей для retail-версий (оригинал). Всё это за прошедшие годы утратило свой смысл. Сегодня я хочу рассказать Вам, как самостоятельно сделать свой nulled-дистрибутив буквально за 5 мин.

Nulled подразумевает под собой удаление всего функционала, связанного с проверкой наличия лицензии. На выходе Вы получаете «разлоченную» CMS.

 

Не используйте готовые Nulled версии

Готовые «нуллы» настоятельно не рекомендуется качать, потому что далеко не все авторы добросовестны. Помимо разблокировки CMS, они могут внести дополнительные изменения:

  • Афишировать, что ваша CMS «нуленная»: например, в админпанели будет указан тип лицензии «Nulled by N2C-Team» и в исходных файлах тоже. Даже ежу (и вашему хостинг-провайдеру) будет понятно, что вы используете взломанную версию скрипта 🤫
  • Скрытые ссылки в шаблонах на сайт автора. Это своего рода плата за нулл, а ваш сайт в свою очередь станет донором.
  • Встраивание бэкдоров для последующего взлома вашего сайта.

Многие поэтому предпочитают брать оригинальный дистрибутив и активировать его кейгеном, так безопаснее.

 

Делаем свой Nulled

  1. Сперва нам понадобится раздобыть оригинальный (retail) дистрибутив.
    Его можно найти в интернете; попросить у владельца лицензии; либо приобрести лицензию хотя бы для одного сайта, чтобы иметь возможность скачивать дистрибутивы.
    Если решили качать из интернета, рекомендую скачать архивы с нескольких сайтов, чтобы их потом сравнить между собой. Оригинальный архив имеет примерно такое название: dle13_1.zip. Обратите внимание, что архив всегда в формате ZIP. На некоторых сайтах его ещё могут дополнительно упаковать в RAR.
    Содержимое архив имеет примерно такое:
    image.png
     
  2. Распаковываем скачанный архив.
    Например, в папку локального веб-сервера (аля OpenServer).
     
  3. [Неактуально] Снимаем обфуксацию.
    Все функции проверки лицензии спрятаны в файле engine/inc/include/init.php поэтому он обфусцирован ByteRun Protector. В интернете по запросу «ByteRun Decoder» можно найти достаточно сайтов, которые помогут в расшифровке этого файла.
    Теперь этот файл распространяется в открытом виде (думаю, ByteRun не работает с PHP 7).
     
  4. Правим engine/inc/include/init.php
    Ищем такой фрагмент:
    $lic_tr = true;
    $auto_detect_config = false;

    Переменная $lic_tr отвечает за включение демонстрационного режима (trial). Меняем true на false, чтобы перевести скрипт в активированный режим.
    Чуть ниже удаляем проверку ключика (на основе этого кода делается keygen):

    $domen_md5 = md5( get_domen_hash() . DINITVERSION );
    if( $domen_md5 == $config['key'] ) $lic_tr = false;

    В целом, на этом можно закончить. Наш скрипт уже активирован. Но я предпочитаю довести дело до конца.
    Удаляем отправку запроса на активацию и форму:

     
    
    if( $_REQUEST['activation'] == "yes" AND $lic_tr) {
    	if( $member_id['user_group'] != 1 ) die();
    	if ( $_REQUEST['dle_key'] )	dle_activation( $_REQUEST['dle_key'], get_domen_hash(), $config );
    	elseif($_REQUEST['site_code']) dle_activation( $_REQUEST['site_code'], get_domen_hash(), $config, true );
    	else echo $lang['trial_act6']." ".$lang['key_format']." <b>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</b>";
    	exit();
    }
    
    if( $member_id['user_group'] == 1 AND $lic_tr) {
    	$activation_field = <<<HTML
    <script>
    <!--
    function dle_activation ( code ){
    	document.getElementById( 'result_info' ).innerHTML = '{$lang['nl_sinfo']}';
    	if (code == 'key') {
    		var dle_key = document.getElementById('sitekey').value ;
    		var varsString = "dle_key=" + dle_key;
    	} else {
    		var site_code = document.getElementById('sitecode').value;
    		var varsString = "site_code=" + site_code;
    	}
    	$.post('?' + varsString, { activation: "yes" }, function(data){
    		$('#dle-activation').html(data);
    	});
    	return false;
    }
    //-->
    </script>
    HTML;
    
    	if(!is_writable(ENGINE_DIR . '/data/config.php')) {
    		$lang['stat_system'] = str_replace ("{file}", "engine/data/config.php", $lang['stat_system']);
    		$fail = "<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component alert alert-info alert-styled-left alert-arrow-left alert-component text-size-small text-size-small\">{$lang['stat_system']}</div>";
    	} else $fail = "";
    	$activation_field .= "<div id=\"dle-activation\" class=\"alert alert-info alert-styled-left alert-arrow-left alert-component text-left text-size-small\">{$lang['trial_info']}<br /><br /><input type=\"text\" name=\"sitekey\" id=\"sitekey\" placeholder=\"{$lang['trial_key']}\" class=\"classic width-400 mr-10\"><button onclick=\"dle_activation( 'key' ); return false;\" class=\"btn bg-teal btn-raised btn-sm\">{$lang['trial_act']}</button><div id=\"result_info\"><br />{$lang['key_format']} <b>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</b></div></div>
    	{$fail}";
    } else $activation_field = "";

    Удаляем ограничение на 100 новостей и 200 комментариев:

    if( $lic_tr AND $is_loged_in AND $mod != "editnews" AND $mod != "main" AND $mod != "upgrade" AND $mod != "") {
    	$row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_post" );
    	$stats_news = $row['count'];
    	$row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_comments" );
    	$count_comments = $row['count'];
    	if( $stats_news > 100 ) msg( "error", "error", $lang['trial_limit'].'<br /><br />'.$activation_field );
    	if( $count_comments > 200 ) msg( "error", "error", $lang['trial_limit'].'<br /><br />'.$activation_field );
    }

    На этом редактирование файла закончено.
     

  5. Правим engine/inc/include/functions.inc.php
    Удаояем функции: send_activation(), get_domen_hash() и dle_activation():

     
    
    function send_activation( $query ) {
    	$data = http_get_contents("http://dle-news.ru/extras/activate2009.php?".$query);
    	if( $data !== false ) {	
    		if( stripos( $data, "antw:activated" ) !== false ) return "1";
    		elseif( stripos( $data, "antw:denied;expires" ) !== false ) return "-4";
    		elseif( stripos( $data, "antw:denied" ) !== false ) return "0";
    	}
    	return "-1";
    }
    
    function get_domen_hash() {
    	$domen_md5 = explode( '.', $_SERVER['HTTP_HOST'] );
    	$count_key = count( $domen_md5 ) - 1;
    	unset( $domen_md5[$count_key] );
    	if( end( $domen_md5 ) == "com" OR end( $domen_md5 ) == "net" ) $count_key --;
    	$domen_md5 = $domen_md5[$count_key - 1];
    	$domen_md5 = md5( md5( $domen_md5 . "780918" ) );
    	return $domen_md5;
    }
    
    function dle_activation($key, $domen_md5, $config, $offline = false) {	
    	global $lang;
    	$domain = urlencode( strip_tags( $_SERVER['HTTP_HOST'] ) );
    	$key = trim( strip_tags( $key ) );
    	@header( "Content-type: text/html; charset=utf-8" );
    	if ( $offline ) {
    		if( $key == md5( $domen_md5 . DINITVERSION ) ) {
    			$buffer = "1";	
    		} else {	
    			$buffer = "-2";
    		}
    	} else {
    		if( strlen( $key ) == 32 ) {
    			$buffer = "-3";
    		} else {
    			$buffer = send_activation( "domain={$domain}&key={$key}&site_key={$domen_md5}&c_id=" . VERSIONID );
    		}
    	}
    
    	switch ($buffer) {	
    		case "-4" :
    			$buffer = $lang['trial_act7'];
    			break;	
    		case "-3" :
    			$buffer = $lang['trial_act6']." ".$lang['key_format']." <b>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</b>";
    			break;
    		case "-2" :
    			$buffer = $lang['trial_act5'];
    			break;
    		case "-1" :
    			$buffer = $lang['trial_act1'] . $lang['get_offline_key'] . " <a href=\"https://dle-news.ru/index.php?do=offlinekey&domain={$domain}&key={$key}&site_key={$domen_md5}&c_id=" . VERSIONID . "\" class=\"status-error\" target=\"_blank\">" . $lang['get_key'] . "</a> " . $lang['key_activation'];
    			$buffer .= "<br /><br /><b>$lang[site_code]</b><span class=\"sitecodefield\"><input class=\"classic width-400 mr-10 ml-10\" type=\"text\" name=\"sitecode\" id=\"sitecode\"> <button onclick=\"dle_activation( 'code' ); return false;\" class=\"btn bg-teal btn-raised btn-sm\">{$lang['trial_act']}</button></span><div id=\"result_info\" style=\"color:red;\"></div>";
    			break;
    		case "0" :
    			$buffer = $lang['trial_act2'];
    			break;
    		case "1" :
    			$config['key'] = md5( $domen_md5 . DINITVERSION );
    			$handler = fopen( ENGINE_DIR . '/data/config.php', "w" );
    			fwrite( $handler, "<?PHP \n\n//System Configurations\n\n\$config = array (\n\n" );
    			foreach ( $config as $name => $value ) {
    				fwrite( $handler, "'{$name}' => \"{$value}\",\n\n" );
    			}
    			fwrite( $handler, ");\n\n?>" );
    			fclose( $handler );
    			if (function_exists('opcache_reset')) {
    				opcache_reset();
    			}
    			$buffer = $lang['trial_act3'];
    			break;
    		default :
    			$buffer = $lang['trial_act4'] . $lang['get_offline_key'] . " <a href=\"https://dle-news.ru/index.php?do=offlinekey&domain={$domain}&key={$key}&site_key={$domen_md5}&c_id=" . VERSIONID . "\" >" . $lang['get_key'] . "</a> " . $lang['key_activation'];
    	}
    	echo $buffer;
    	die();
    }

    На этом всё.

  6. Смотрим результат.
    image.png
    Теперь скрипт у нас активирован 😀. При этом никто не сможет понять, nulled у нас или лицензия.
     
  7. Отключаем функцию проверки обновлений.
    Настоятельно рекомендуется сделать это, чтобы не «светить» свой сайт. Ранее скрипт сообщал домен вашего сайта, теперь передаётся ключ.
    Открываем файл engine/ajax/updates.php и полностью заменяем его содержимое на это:
    <?php
    if(!defined('DATALIFEENGINE')) {
    	header( "HTTP/1.1 403 Forbidden" );
    	header ( 'Location: ../../' );
    	die( "Hacking attempt!" );
    }
    
    if($member_id['user_group'] != 1) die ("error");
    echo $lang['no_update']; // заглушка

    Теперь скрипт будет всегда выдавать ошибку подключения (дабы его модификация осталась незаметной).

 

Убираем копирайты

Хорошо эти или плохо, решать вам. Их нужно убрать, если не хотите, чтобы ваш сайт светился в поиске по запросу «DataLife Engine». От этого зависит, как скоро вы получите «письмо счастья» с требованием приобрести лицензию.

  1. engine/engine.php
    Удалить строку:
    <meta name="generator" content="DataLife Engine (http://dle-news.ru)">
  2. engine/modules/main.php
    В самом конце файла найти и удалить строку:
    echo "\n<!-- DataLife Engine Copyright SoftNews Media Group (http://dle-news.ru) -->\r\n";
  3. engine/rss.php
    Здесь встречается много упоминаний DataLife Engine. Как быть с ними я не знаю...
  4. templates/opensearch.tpl
    Замените всё на на название сайта.
  5. Отредактируйте шаблоны сайта (особенно smartphone).
  6. Измените в настройках сайта Description и Keywords.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...