Wordpress: тема с шифрованным футером и проверкой на изменение
И снова я в эфире, добрый день. Сегодня речь пойдет о проблеме, с которой я столкнулся пару дней назад, редактируя бесплатную wordpress тему.
Ох, уж я и намучался с нею, но.. все же вышел победителем! 

Начнем с того, что задумавшись над сменой дизайна одному из своих сайтов, я отправился в интернет на поиски подходящей основы для всего этого. Найдя же несколько вариантов и проведя кастинг, выбрал одну из них, и начал “шлифовать” углы и менять её в нужном мне направлении.
Лишь на полпути я заметил, что в футере темы выводок ссылок на всякие говносайты, что совсем меня не устраивало. Заглянув в footer.php увидел там следующий код:
<?php $_F=__FILE__;$_X='Pz4JPGQ0diA0ZD0iZjIydDVyIj4NCgkJPGQ0diA0ZD0iZjIydDVyLXc0ZGc1dHMiIGNsMXNzPSJjbDUxcmY0eCI+DQoJCQk8ZDR2IGNsMXNzPSJmLXc0ZGc1dCBncjRkX3UiPg0KCQkJCTxobz5QMnAzbDFyIFAyc3RzPC9obz4NCgkJCQk8M2w+DQoJCQkJCTw/cGhwIHdwX3AycDNsMXJfcDJzdHMoKTsgPz4NCgkJCQk8LzNsPg0KCQkJPC9kNHY+DQoJCQk8ZDR2IGNsMXNzPSJmLXc0ZGc1dCBncjRkX3UiPg0KCQkJCTxobz5BcmNoNHY1czwvaG8+DQoJCQkJPDNsPg0KCQkJCQk8P3BocCB3cF9nNXRfMXJjaDR2NXMoJ3R5cDU9bTJudGhseSZsNG00dD1pJyk7ID8+DQoJCQkJPC8zbD4NCgkJCTwvZDR2Pg0KCQkJPGQ0diBjbDFzcz0iZi13NGRnNXQgZ3I0ZF91Ij4NCgkJCQk8aG8+UzNic2NyNGI1ICsgRjJsbDJ3PC9obz4NCgkJCQk8cCBzdHlsNT0ibTFyZzRuLWIydHQybTo2MHB4OyAiPlMzYnNjcjRiNSB0MiAyM3IgUlNTIEZFRUQgdDIgcjVjNTR2NSBicjUxazRuZyBuNXdzIDFzIHc1bGwgMXMgcjVjNTR2NSAydGg1ciBzNHQ1IDNwZDF0NXMgMnIgMWx0NXJuMXQ0djVseSwgZjU1bCBmcjU1IHQyIGMybm41Y3QgdzR0aCAzcy48L3A+DQoJCQkJPHAgY2wxc3M9InMyYzQxbHByMmY0bDUiPg0KCQkJCTwxIGhyNWY9Ijw/cGhwIDRmICggZzV0XzJwdDQybignbnByNXNzX3N5bmQ0YzF0NDJuJykgPD4gIiIgKSB7IDVjaDIgZzV0XzJwdDQybignbnByNXNzX3N5bmQ0YzF0NDJuJyk7IH0gNWxzNSB7IDVjaDIgZzV0X2JsMmc0bmYyX3JzcygncnNzYV8zcmwnKTsgfSA/PiI+PDRtZyBzcmM9Ijw/cGhwIGJsMmc0bmYyKCd0NW1wbDF0NV9kNHI1Y3QycnknKTsgPz4vNG0xZzVzL3Jzc19vYS5wbmciIGIycmQ1cj0iMCIgLz48LzE+DQoJCQkJPD9waHAgNGYgKCBnNXRfMnB0NDJuKCducHI1c3NfZjU1ZGIzcm41cicpIDw+ICIiICkgOiA/Pg0KCQkJCTwxIGhyNWY9Imh0dHA6Ly9mNTVkYjNybjVyLmcyMmdsNS5jMm0vZmIvMS9tMTRsdjVyNGZ5PzNyND08P3BocCA1Y2gyIGc1dF8ycHQ0Mm4oJ25wcjVzc19mNTVkYjNybjVyJyk7ID8+JmwyYz01bl9VUyI+PDRtZyBzcmM9Ijw/cGhwIGJsMmc0bmYyKCd0NW1wbDF0NV9kNHI1Y3QycnknKTsgPz4vNG0xZzVzLzVtMTRsX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc19kNGdnJykgPD4gIiIgKSA6ID8+DQoJCQkJPDEgaHI1Zj0iPD9waHAgNWNoMiBnNXRfMnB0NDJuKCducHI1c3NfZDRnZycpOyAgPz4iPjw0bWcgc3JjPSI8P3BocCBibDJnNG5mMigndDVtcGwxdDVfZDRyNWN0MnJ5Jyk7ID8+LzRtMWc1cy9kNGdnX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc19kNWw0YzQyM3MnKSA8PiAiIiApIDogPz4NCgkJCQk8MSBocjVmPSI8P3BocCA1Y2gyIGc1dF8ycHQ0Mm4oJ25wcjVzc19kNWw0YzQyM3MnKTsgID8+Ij48NG1nIHNyYz0iPD9waHAgYmwyZzRuZjIoJ3Q1bXBsMXQ1X2Q0cjVjdDJyeScpOyA/Pi80bTFnNXMvZDVsNGM0MjNzX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc19zdDNtYmw1M3AybicpIDw+ICIiICkgOiA/Pg0KCQkJCTwxIGhyNWY9Ijw/cGhwIDVjaDIgZzV0XzJwdDQybignbnByNXNzX3N0M21ibDUzcDJuJyk7ICA/PiI+PDRtZyBzcmM9Ijw/cGhwIGJsMmc0bmYyKCd0NW1wbDF0NV9kNHI1Y3QycnknKTsgPz4vNG0xZzVzL3N0M21ibDUzcDJuX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc19sNG5rNWQ0bicpIDw+ICIiICkgOiA/Pg0KCQkJCTwxIGhyNWY9Ijw/cGhwIDVjaDIgZzV0XzJwdDQybignbnByNXNzX2w0bms1ZDRuJyk7ICA/PiI+PDRtZyBzcmM9Ijw/cGhwIGJsMmc0bmYyKCd0NW1wbDF0NV9kNHI1Y3QycnknKTsgPz4vNG0xZzVzL2w0bms1ZDRuX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc19mMWM1YjIyaycpIDw+ICIiICkgOiA/Pg0KCQkJCTwxIGhyNWY9Ijw/cGhwIDVjaDIgZzV0XzJwdDQybignbnByNXNzX2YxYzViMjJrJyk7ICA/PiI+PDRtZyBzcmM9Ijw/cGhwIGJsMmc0bmYyKCd0NW1wbDF0NV9kNHI1Y3QycnknKTsgPz4vNG0xZzVzL2YxYzViMjJrX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8P3BocCA0ZiAoIGc1dF8ycHQ0Mm4oJ25wcjVzc190dzR0dDVyJykgPD4gIiIgKSA6ID8+DQoJCQkJPDEgaHI1Zj0iPD9waHAgNWNoMiBnNXRfMnB0NDJuKCducHI1c3NfdHc0dHQ1cicpOyAgPz4iPjw0bWcgc3JjPSI8P3BocCBibDJnNG5mMigndDVtcGwxdDVfZDRyNWN0MnJ5Jyk7ID8+LzRtMWc1cy90dzR0dDVyX29hLnBuZyIgYjJyZDVyPSIwIiAvPjwvMT4NCgkJCQk8P3BocCA1bmQ0ZjsgPz4NCgkJCQk8L3A+DQoJCQk8L2Q0dj4NCgkJPC9kNHY+DQoJCTxkNHYgNGQ9ImMycHlyNGdodCIgY2wxc3M9ImNsNTFyZjR4Ij4NCgkJCTxzcDFuIGNsMXNzPSJsNWZ0Ij4mYzJweTsgPD9waHAgNWNoMiBkMXQ1KCJZIik7ID8+IDw/cGhwIGJsMmc0bmYyKCduMW01Jyk7ID8+LiBQT1dFUkVEIEJZIDwxIGhyNWY9Imh0dHA6Ly93MnJkcHI1c3MuMnJnIj5XT1JEUFJFU1M8LzE+IEFORCA8MSBocjVmPSJodHRwOi8vd3BjcjNuY2h5LmMybSI+V1BDUlVOQ0hZPC8xPjwvc3Axbj4NCgkJCTxzcDFuIGNsMXNzPSJyNGdodCI+RDVzNGduIGJ5IDwxIGhyNWY9Imh0dHA6Ly8xYzE0LWI1cnJ5LnI1djQ1dzR0Mm5sNG41Lm41dCIgdDFyZzV0PSJfYmwxbmsiPkFjMTQgQjVycnk8LzE+LiBJbiBjMmxsMWIycjF0NDJuIHc0dGggPDEgaHI1Zj0iaHR0cDovL3d3dy5mNHI1YzFzNG4ycy5jMm0iIHQxcmc1dD0iX2JsMW5rIj5Pbmw0bjUgRzFtYmw0bmc8LzE+LCA8MSBocjVmPSJodHRwOi8vM2tjcjVkNHRzNWNyNXRzLmMyLjNrL2JsMmcvIiB0MXJnNXQ9Il9ibDFuayI+Q3I1ZDR0IFI1cDE0cjwvMT4gMW5kIDwxIGhyNWY9Imh0dHA6Ly9kNS5zbDJ0c3QycC5jMm0vIiB0MXJnNXQ9Il9ibDFuayI+c3A0NWwxM3QybTF0PC8xPjwvc3Axbj4NCgkJPC9kNHY+DQoJPC9kNHY+DQoJPD9waHAgd3BfZjIydDVyKCk7ID8+DQoJPD9waHAgNGYgKCBnNXRfMnB0NDJuKCducHI1c3Nfc2NyNHB0c19mMjJ0NXInKSA8PiAiIiApIHsgNWNoMiBzdHI0cHNsMXNoNXMoZzV0XzJwdDQybignbnByNXNzX3NjcjRwdHNfZjIydDVyJykpOyB9ID8+DQo8L2Q0dj4NCjwvYjJkeT4NCjwvaHRtbD4=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>
Ну с таким мы уже встречались, ничего сложного, подумал я.. как я ошибался
.

Для начала я сходил по этому адресу и расшифровал код. Получилось следующее:
<div id="footer"> <div id="footer-widgets" class="clearfix"> <div> <h3>Popular Posts</h3> <ul> <?php wp_popular_posts(); ?> </ul> </div> <div> <h3>Archives</h3> <ul> <?php wp_get_archives('type=monthly&limit=5'); ?> </ul> </div> <div> <h3>Subscribe + Follow</h3> <p style="margin-bottom:10px; ">Subscribe to our RSS FEED to receive breaking news as well as receive other site updates or alternatively, feel free to connect with us.</p> <p> <a href="<?php if ( get_option('npress_syndication') <> "" ) { echo get_option('npress_syndication'); } else { echo get_bloginfo_rss('rss2_url'); } ?>"><img src="<?php bloginfo('template_directory'); ?>/images/rss_32.png" border="0" /></a> <?php if ( get_option('npress_feedburner') <> "" ) : ?> <a href="<a href="http://feedburner.google.com/fb/a/mailverify?uri=">http://feedburner.google.com/fb/a/mailverify?uri=</a><?php echo get_option('npress_feedburner'); ?>&loc=en_US"><img src="<?php bloginfo('template_directory'); ?>/images/email_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_digg') <> "" ) : ?> <a href="<?php echo get_option('npress_digg'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/digg_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_delicious') <> "" ) : ?> <a href="<?php echo get_option('npress_delicious'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/delicious_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_stumbleupon') <> "" ) : ?> <a href="<?php echo get_option('npress_stumbleupon'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/stumbleupon_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_linkedin') <> "" ) : ?> <a href="<?php echo get_option('npress_linkedin'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/linkedin_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_facebook') <> "" ) : ?> <a href="<?php echo get_option('npress_facebook'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/facebook_32.png" border="0" /></a> <?php endif; ?> <?php if ( get_option('npress_twitter') <> "" ) : ?> <a href="<?php echo get_option('npress_twitter'); ?>"><img src="<?php bloginfo('template_directory'); ?>/images/twitter_32.png" border="0" /></a> <?php endif; ?> </p> </div> </div> <div id="copyright"> <span class="left">© <?php echo date("Y"); ?> <?php bloginfo('name'); ?>. POWERED BY <a href="<a href="http://wordpress.org%22/">http://wordpress.org"</a>>WORDPRESS</a> AND <a href="<a href="http://wpcrunchy.com%22/">http://wpcrunchy.com"</a>>WPCRUNCHY</a></span> <span>Design by <a href="<a href="http://acai-berry.reviewitonline.net%22/">http://acai-berry.reviewitonline.net"</a> target="_blank">Acai Berry</a>. In collaboration with <a href="<a href="http://www.firecasinos.com%22/">http://www.firecasinos.com"</a> target="_blank">Online Gambling</a>, <a href="<a href="http://ukcreditsecrets.co.uk/blog/%22">http://ukcreditsecrets.co.uk/blog/"</a> target="_blank">Credit Repair</a> and <a href="<a href="http://de.slotstop.com/%22">http://de.slotstop.com/"</a> target="_blank">spielautomat</a></span> </div> </div> <?php wp_footer(); ?> <?php if ( get_option('npress_scripts_footer') <> "" ) { echo stripslashes(get_option('npress_scripts_footer')); } ?> </div> </body> </html>
Но вставив этот код в footer.php, предварительно удалив ненужные ссылки, я столкнулся примерно с таким сообщением при загрузки темы:

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

Честно говоря, промучился я достаточно долго в поисках оной, даже подебажил в firebug в firefox-e javascript, но в итоге нашел источник своей проблемы – jquery.min.js. Да-да, та самая, всем известная библиотека, но дополненная. Сравнив её со скачанной с офф. сайта jquery, нашел в конце вот такой код, который и проверял футер на изменения:
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c][/c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c][/c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c][/c]);return p}('1(15).14(6(){c a=1("d").V("a");c b=U;1.v(a,6(){9(1(u).t("e")=="f://g.h"){b=s}});9(!b){1("d").j({\'k-q\':\'P\',\'k-l\':\'#n\'}).o("<i r=\'2\'><p 8=\'7\'>w x y z A B C D E.</p> <p 8=\'7\'>F G <a e=\'f://g.h/2/\'>2</a> H I J.</p></i>");1("#2").j({\'K\':\'L\',\'M\':\'N\',\'O\':\'m Q #R\',\'S\':\'T 5 0 5\',\'4-W\':\'X\',\'4-Y\':\'Z\',\'l\':\'#10\',\'11-12\':\'#13 3 3 3\'})}});',62,68,'|jQuery|license|1px|font|auto|function|center|align|if|||var|body|href|http|wpcrunchy|com|div|css|background|color|3px|ebebeb|html||image|id|true|attr|this|each|Please|do|not|remove|or|alter|credits|on|footer|Check|our|for|more|info|width|500px|padding|20px|border|none|double|ddd|margin|80px|false|find|family|Georgia|size|30px|111111|text|shadow|ffffff|load|window'.split('|'),0,{}))
Я даже не стал его расшифровывать, а просто заменил jquery.min.js на оригинальный файл и все заработало, как должно. Ура-ура!
Было это уже в 2 часа ночи, я как раз вернулся с просмотра фильма “Начало” в кинотеатре (обязательно сходите, если еще не смотрели), в крови было много эндорфинов, так как фильм шикарен, поэтому я решил не ложиться спать, а продолжить свои изыскания. Не зря, как оказалось.

В дополнение, верстая тему, понадобилось мне задать минимальный и максимальный размер страницы. Решение нашлось следующее.
Добавляем в css следующий код:
#container { min-width: 1000px; max-width:1000px; }
min-width – минимальный размер страницы, max-width – максимальный. К сожалению, работать в IE6-7 этот хак не будет.
Далее в наш html/php/.. файлы добавляем следующий div и бурно радуемся результату
:

<div id="container">
Альтернатива понятная IE6-7, правда я этот код не пробовал, используйте на свой страх и риск
:

.MinWidth { height: 1px; width: нужное_значение_мин_вайдс; clear: both; font-size:1px; }
<div> </div>
Спасибо за внимание
.

- Блог с нуля: установка Wordpress В этой части "Блог с нуля" я расскажу как установить...
- Как сделать комментарии Disqus DoFollow?! Задавшись вопросом "Как сделать комментарии Disqus DoFollow?" и не найдя...
- SeoPult пробрался в ряды Яндекса SeoPult пробрался в ряды Яндекса. Честно-честно, вы посмотрите на безрукавку...
- Wordpress: Отображение даты в виде “..столько-то дней назад” Хотите отображать человеческие даты на вашем блоге, например, "Опубликовано 6...
- Wordpress: Создание отдельной страницы для постов Небольшой хак wordpress, который поможет вас создать отдельную страницу для...