Как раскодировать шаблон wordpress

Сегодня мы займемся богомерзким не совсем этичным, но порой таким нужным делом - раскодировкой шаблонов wordpress.

Многие из вас видели в файлах шаблонов строки вида eval(base64_decode('тра-ля-ля')и задумывались- что там может быть?

Да всё, что угодно автору шаблона - от ссылок в футере, позволяющих автору иметь лишнюю копеечку на хлеб с икрой маслом, до вредоносного кода.

Поэтому хотя бы проанализировать, привести эти строчки в читаемый вид - будет полезно.

Начнем, как всегда, с азов, и да поможет нам К.О. Википедия...

Base64 — позиционная система счисления с основанием 64. Здесь 64 — это наибольшая степень двойки (2 в 6 степени), которая может быть представлена с использованием печатных символов ASCII.

Base64 — это схема, по которой произвольная последовательность байт преобразуется в последовательность печатных ASCII символов. Используются только символы латинского алфавита в верхнем и нижнем регистре — символы (A—Z, a—z), цифры (0—9), и символы «+» и «/», с символом «=» в качестве специального кода суффикса.

Чаще всего эта схема используется в электронной почте для так называемого транспортного кодирования.

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

Рассмотрим практический пример раскодировки шаблонов от американского (во всяком случае, так показывает whois) сайта newwpthemes[точка]com.

Всем хороши шаблоны, созданные на основе Blueprint CSS Framework 0.8 , но выпущены они под лицензией Creative Commons и футер шаблона содержит 3-4 ссылки на неизвестные нам забугорные сайты.

Оставлю все морально-этически-лицензионные размышления на вашу совесть и просто покажу - что же пытался спрятать под кодом автор...

0. Disclaimer

disclaimer- всё что вы делаете, вы делаете на свой страх и риск, автор статьи не несёт абсолютно никакой ответственности за возможный ущерб.

- и вообще - проводить подобные "эксперименты" на рабочем сайте - невиданная глупость - используйте для этого специально созданный сайт на локалхосте.

- для правок используйте текстовые редакторы, позволяющие сделать "откат" исправлений, например Notepad++

1. Анализ

Действуем просто - открываем каждый файл шаблона в текстовом редакторе, набираем в поиске base64 и ищем...

Подробный просмотр файлов шаблона iBusiness выявил 4 закодированных строки в файле functions.php, две таких строки в header.php и предупреждение на расовом английском языке "не менять ссылки в футере, иначе сайт не будет работать".

И действительно, поменяв хотя бы букву в ссылках внизу футера, получаем вместо сайта белый экран:

license

2. Декодирование

Понятно, что каждый (ну почти каждый))) получивший такое вот непотребство, сразу же загорается желанием "насолить" автору )))

Для этого, тщательно копируем все закодированные строчки в Блокнот (лучше Notepad++) и пытаемся разобраться.

В декодировании нам поможет неплохой ресурс Free online base64 encoder and decoder .

Просто копируем буквенную абракадабру, следующую после eval(base64_decode(' и до ')); в форму на сайте и жмём decode.

Еще раз- дабы избежать лишних вопросов...

Есть строчка:

eval(base64_decode('Y2hlY2tfdGhlbWVfaGVhZGVyKCk7'));

копируем

Y2hlY2tfdGhlbWVfaGVhZGVyKCk7

Вставляем в форму, жмём decode, получаем результат:

check_theme_header(); - потренируйтесь, если получилось нечто иное - значит- не так скопировали.

Ремарка - онлайн-декодеров в интернетах много, поэтому если вы пользуетесь другим сервисом - внимательно читайте правила пользования.

Теперь полученной раскодированной строчкой можно заменить исходную в шаблоне. Не забываем ставить теги <?php и ?> там, где это уместно.

Проверяем новую редакцию шаблона - всё должно работать.

В онлайн-декодере жмём reset data и повторяем всё вышеописанное с новой строчкой.

3. Чтение и понимание

Для этого пункта нам необходимо знание хотя бы азов PHP или, на худой конец, просто английского...

Нам важен сейчас смысл и действие, а не знания синтаксиса.

Смотрим, читаем, пытаемся понять...

/*functions.php*/
1)

eval(base64_decode('aWYgKCFlbXB0eSgkX1JFUVVFU1RbInRoZW1lX2xpY2Vuc2UiXSkpIHsgdGhlbWVfdXNhZ2VfbWVzc2FnZSgpOyBleGl0KCk7IH0gZnVuY3Rpb24gdGhlbWVfdXNhZ2VfbWVzc2FnZSgpIHsgaWYgKGVtcHR5KCRfUkVRVUVTVFsidGhlbWVfbGljZW5zZSJdKSkgeyAkdGhlbWVfbGljZW5zZV9mYWxzZSA9IGdldF9ibG9naW5mbygidXJsIikgLiAiL2luZGV4LnBocD90aGVtZV9saWNlbnNlPXRydWUiOyBlY2hvICI8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCIwO3VybD0kdGhlbWVfbGljZW5zZV9mYWxzZVwiPiI7IGV4aXQoKTsgfSBlbHNlIHsgZWNobyAoIjxwIHN0eWxlPVwicGFkZGluZzoxMHB4OyBtYXJnaW46IDEwcHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXI6IDJweCBkYXNoZWQgUmVkOyBmb250LWZhbWlseTphcmlhbDsgZm9udC13ZWlnaHQ6Ym9sZDsgYmFja2dyb3VuZDogI2ZmZjsgY29sb3I6ICMwMDA7XCI+VGhpcyB0aGVtZSBpcyByZWxlYXNlZCBmcmVlIGZvciB1c2UgdW5kZXIgY3JlYXRpdmUgY29tbW9ucyBsaWNlbmNlLiBBbGwgbGlua3MgaW4gdGhlIGZvb3RlciBzaG91bGQgcmVtYWluIGludGFjdC4gVGhlc2UgbGlua3MgYXJlIGFsbCBmYW1pbHkgZnJpZW5kbHkgYW5kIHdpbGwgbm90IGh1cnQgeW91ciBzaXRlIGluIGFueSB3YXkuIFRoaXMgZ3JlYXQgdGhlbWUgaXMgYnJvdWdodCB0byB5b3UgZm9yIGZyZWUgYnkgdGhlc2Ugc3VwcG9ydGVycy48L3A+Iik7IH0gfQ=='));
 
if (!empty($_REQUEST["theme_license"])) { theme_usage_message(); exit(); } function theme_usage_message() { if (empty($_REQUEST["theme_license"])) { $theme_license_false = get_bloginfo("url") . "/index.php?theme_license=true"; echo "&lt;meta http-equiv=\"refresh\" content=\"0;url=$theme_license_false\"&gt;"; exit(); } else { echo ("&lt;p style=\"padding:10px; margin: 10px; text-align:center; border: 2px dashed Red; font-family:arial; font-weight:bold; background: #fff; color: #000;\"&gt;This theme is released free for use under creative commons licence. All links in the footer should remain intact. These links are all family friendly and will not hurt your site in any way. This great theme is brought to you for free by these supporters.&lt;/p&gt;"); } }

Эта строчка при выполнении/невыполнении некоторых условий выводит лицензионное сообщение вместо сайта.

2)

eval(base64_decode('ZnVuY3Rpb24gY2hlY2tfdGhlbWVfZm9vdGVyKCkgeyAkdXJpID0gc3RydG9sb3dlcigkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSk7IGlmKGlzX2FkbWluKCkgfHwgc3Vic3RyX2NvdW50KCR1cmksICJ3cC1hZG1pbiIpID4gMCB8fCBzdWJzdHJfY291bnQoJHVyaSwgIndwLWxvZ2luIikgPiAwICkgeyAvKiAqLyB9IGVsc2UgeyAkbCA9ICdCdXkgRnJlZSA8YSBocmVmPSJodHRwOi8vd3d3LmJlc3RpbmNlbGxwaG9uZXMuY29tL3QtbW9iaWxlLmFzcCIgdGl0bGU9IlQtTW9iaWxlIFBob25lcyI+VC1Nb2JpbGUgUGhvbmVzPC9hPiB3aXRoIFBsYW5zLiB8IFRoYW5rcyB0byA8YSBocmVmPSJodHRwOi8vd3d3LmljZWxscGhvbmVkZWFscy5jb20vYnV5LXZlcml6b24tcGhvbmVzLXdpdGhvdXQtY29udHJhY3Qtbm8tcGxhbi8iIHRpdGxlPSJWZXJpem9uIFBob25lcyB3aXRob3V0IENvbnRyYWN0Ij5WZXJpem9uIFBob25lcyB3aXRob3V0IENvbnRyYWN0PC9hPiwgPGEgaHJlZj0iaHR0cDovL21tb2h1dC5jb20iPkZyZWUgTU1PUlBHIEdhbWVzPC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL2luY2luZXJhZG9yZGVncmFzYWVzcGVjaWFsLmNvbSI+SW5jaW5lcmFkb3IgRGUgR3Jhc2EgUmV2aXNpw7NuPC9hPic7ICRmID0gZGlybmFtZShfX2ZpbGVfXykgLiAiL2Zvb3Rlci5waHAiOyAkZmQgPSBmb3BlbigkZiwgInIiKTsgJGMgPSBmcmVhZCgkZmQsIGZpbGVzaXplKCRmKSk7IGZjbG9zZSgkZmQpOyBpZiAoc3RycG9zKCRjLCAkbCkgPT0gMCkgeyB0aGVtZV91c2FnZV9tZXNzYWdlKCk7IGRpZTsgfSB9IH0gY2hlY2tfdGhlbWVfZm9vdGVyKCk7'));
 
function check_theme_footer() { $uri = strtolower($_SERVER["REQUEST_URI"]); if(is_admin() || substr_count($uri, "wp-admin") &gt; 0 || substr_count($uri, "wp-login") &gt; 0 ) { /* */ } else { $l = 'Buy Free &lt;a href="http://www.bestincellphones.com/t-mobile.asp" title="T-Mobile Phones"&gt;T-Mobile Phones&lt;/a&gt; with Plans. | Thanks to &lt;a href="http://www.icellphonedeals.com/buy-verizon-phones-without-contract-no-plan/" title="Verizon Phones without Contract"&gt;Verizon Phones without Contract&lt;/a&gt;, &lt;a href="http://mmohut.com"&gt;Free MMORPG Games&lt;/a&gt; and &lt;a href="http://incineradordegrasaespecial.com"&gt;Incinerador De Grasa RevisiA?n&lt;/a&gt;'; $f = dirname(__file__) . "/footer.php"; $fd = fopen($f, "r"); $c = fread($fd, filesize($f)); fclose($fd); if (strpos($c, $l) == 0) { theme_usage_message(); die; } } } check_theme_footer();

Проверяет соответствие ссылок в футере заданным, если - нет, то DIE (думаю, в переводе не нуждается)))

3)

eval(base64_decode('Y2hlY2tfdGhlbWVfaGVhZGVyKCk7'));
 
check_theme_header();

Вызывает функцию check_theme_header

4)

eval(base64_decode('ZnVuY3Rpb24gY2hlY2tfdGhlbWVfaGVhZGVyKCkgeyBpZiAoIShmdW5jdGlvbl9leGlzdHMoImZ1bmN0aW9uc19maWxlX2V4aXN0cyIpICYmIGZ1bmN0aW9uX2V4aXN0cygidGhlbWVfZm9vdGVyX3QiKSkpIHsgdGhlbWVfdXNhZ2VfbWVzc2FnZSgpOyBkaWU7IH0gfQ=='));
 
function check_theme_header() { if (!(function_exists("functions_file_exists") &amp;&amp; function_exists("theme_footer_t"))) { theme_usage_message(); die; } }

А вот и эта функция) Проверяет наличие функций functions_file_exists и theme_footer_t (обе находятся в хэдере), если - нет, то - DIE.

/*header.php*/

5)

eval(base64_decode('ZnVuY3Rpb24gdGhlbWVfZm9vdGVyX3QoKSB7IGlmICghKGZ1bmN0aW9uX2V4aXN0cygiY2hlY2tfdGhlbWVfZm9vdGVyIikgJiYgZnVuY3Rpb25fZXhpc3RzKCJjaGVja190aGVtZV9oZWFkZXIiKSkpIHsgdGhlbWVfdXNhZ2VfbWVzc2FnZSgpOyBkaWU7IH0gfSB0aGVtZV9mb290ZXJfdCgpOw==')); 
 
function theme_footer_t() { if (!(function_exists("check_theme_footer") &amp;&amp; function_exists("check_theme_header"))) { theme_usage_message(); die; } } theme_footer_t();

Проверяет наличие функций check_theme_footer и check_theme_header (находятся в functions.php), если - нет, то - DIE.

6)

 echo get_theme_option("head") . "\n"; eval(base64_decode('ZnVuY3Rpb24gZnVuY3Rpb25zX2ZpbGVfZXhpc3RzKCkgeyBpZiAoIWZpbGVfZXhpc3RzKGRpcm5hbWUoX19maWxlX18pIC4gIi9mdW5jdGlvbnMucGhwIikgfHwgIWZ1bmN0aW9uX2V4aXN0cygidGhlbWVfdXNhZ2VfbWVzc2FnZSIpICkgeyBlY2hvICgiPHAgc3R5bGU9XCJwYWRkaW5nOjEwcHg7IG1hcmdpbjogMTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlcjogMnB4IGRhc2hlZCBSZWQ7IGZvbnQtZmFtaWx5OmFyaWFsOyBmb250LXdlaWdodDpib2xkOyBiYWNrZ3JvdW5kOiAjZmZmOyBjb2xvcjogIzAwMDtcIj5UaGlzIHRoZW1lIGlzIHJlbGVhc2VkIGZyZWUgZm9yIHVzZSB1bmRlciBjcmVhdGl2ZSBjb21tb25zIGxpY2VuY2UuIEFsbCBsaW5rcyBpbiB0aGUgZm9vdGVyIHNob3VsZCByZW1haW4gaW50YWN0LiBUaGVzZSBsaW5rcyBhcmUgYWxsIGZhbWlseSBmcmllbmRseSBhbmQgd2lsbCBub3QgaHVydCB5b3VyIHNpdGUgaW4gYW55IHdheS4gVGhpcyBncmVhdCB0aGVtZSBpcyBicm91Z2h0IHRvIHlvdSBmb3IgZnJlZSBieSB0aGVzZSBzdXBwb3J0ZXJzLjwvcD4iKTsgZGllOyB9IH0gZnVuY3Rpb25zX2ZpbGVfZXhpc3RzKCk7')); wp_head(); 
 
function functions_file_exists() { if (!file_exists(dirname(__file__) . "/functions.php") || !function_exists("theme_usage_message") ) { echo ("&lt;p style=\"padding:10px; margin: 10px; text-align:center; border: 2px dashed Red; font-family:arial; font-weight:bold; background: #fff; color: #000;\"&gt;This theme is released free for use under creative commons licence. All links in the footer should remain intact. These links are all family friendly and will not hurt your site in any way. This great theme is brought to you for free by these supporters.&lt;/p&gt;"); die; } } functions_file_exists();

Еще проверки: наличие файла functions.php, функции theme_usage_message - если нет, то - лицензионное сообщение.

Подведем итоги: из шести закодированных строк только (2) проверяет ссылки в футере, остальные же проверяют друг друга "на наличие" и если хотя бы одной не будет - отключают сайт и и грозят анальной карой судом Божьим.

Строка (3) просто вызывает функцию проверки и может быть сразу безболезненно удалена.

4. Принятие решения

Решение, что же делать с ссылками в футере, нарушать или нет лицензию и прочее - оставляю лично вам.

Приведу просто возможные варианты:

1) Если изменить ссылки в строчке (2) на нужные вам, то теперь можно (и даже нужно!) заменить ссылки в футере на аналогичные. Остальные строчки можно тогда не трогать.

2) Если же вы решили избавиться от ссылок в футере, то все 6 строчек нужно удалить, единственное замечание - в строке (6) нужно удалить только закодированную часть - остальное оставить.

Вот как будет выглядеть строка (6) после удаления "лишнего":

php echo get_theme_option("head") . "\n"; wp_head();

5. Резюме

Честно говоря - данный пример декодирования шаблонов - простейший.

Рассказать о всех видах кодирования в рамках одной статьи просто невозможно.

Так что я показал лишь методику, а дальше вы уж сами, благо - ресурсов для раскодировки множество да и Гугл никто пока не закрыл)))

Огромная просьба - не присылайте в комментарии куски кода для расшифровки. Такие комменты будут удаляться.

Если уж не справляетесь сами - помогу, но за некоторое вознаграждение в вебманях (5 WMZ) по факту.

Мой e-mail - на страничке "об авторе", присылать следует весь архив шаблона, а не отдельные файлы или куски кода.

Не обессудьте, если кому откажу - свободного времени не так уж и много.

P.S. Еще один хороший ресурс для раскодировки, на этот раз eval(gzinflate(base64_decode - Eval - Gzip - Base64 Decoder - читайте внимательно описание - на этом сайте в форму копируется полная строчка.

Понравился пост? Поделитесь с друзьями!
Не хотите пропустить продолжение? Подпишитесь на RSS!
Kotelloblog - блог интернетоголика
Или подпишитесь на обновления по e-mail:

55 комментариев к “Как раскодировать шаблон wordpress”

  1. pila:

    и не говорите мне больше об этих сихах

  2. У меня была аналогичная проблема - искал через тотал командер вредоносный код прямо на сервере и удалял в вручную.

    СПОСОБ РЕШЕНИЯ ПРОБЛЕМЫ описал на форуме

    ""Вредоносный скрипт на сайтах WordPress""

    http://ru.forums.wordpress.org/topic/Вредоносный-скрипт-на-сайтах-wordpress

    Всем удачи в решении проблемы. ;)

  3. Евгений:

    все работает как часы, спасибо)

  4. grandspy:

    Спасибо Автор!
    Очень подмог;)

  5. Дмитрий:

    Большое спасибо очень помогла статья.

  6. Вот раскодировал.. Но что в нем удалить, чтоб ссылки исчезли с сайта. Все что не провабал - либо сайт вообще перестает работать, либо наверху строчка, мол ошибка в коде.

  7. Самый лучший мануал из тех, что смог найти по теме раскодирования шаблонов.

    Спасибо огромное автору!

  8. k0tello:

    Это ответ на комментарий Secret от 28.03 Сам коммент удален - очень прошу всех - не шлите куски кода в комментарии...
    1) В статье описана методика раскодировки eval base64, а ваш код - eval str_rot13 - естественно, декодеры работать не будут.
    2) Эта методика 100% работает (пока) на шаблонах от NewWPThemes, но это не значит, что в других шаблонах применены такие же методы кодирования-проверки...

Оставить комментарий

Авторы понравившихся мне комментариев будут отмечены бесплатными постовыми