26 сентября 2011 г.

Почему ни в коем случае не стоит искать бесплатные шаблоны для Wordpress в Google, или где-либо ещё. Часть 2

Продолжаем перевод статьи «Why You Should Never Search For Free WordPress Themes in Google or Anywhere Else», написанной Siobhan McKeown.


2. Free WordPress Themes
Ещё один сайт с бесплатными темами для Wordpress. Отлично! Это как раз то, что мне нужно. Халяву я люблю. Первая тема называется «BeautyStore» («Магазин красоты»). Магазины красоты я тоже люблю, поэтому качаю именно её. Инсталлирую и прогоняю через TAC.





Ещё больше зашифрованного кода!
Вот футер темы:




Для магазина красоты так себя вести не очень красиво. В футере полно различных зашифрованных функций. Но в этот раз мне не удалось просто заменить eval() на echo(), ничего не появилось. Я пыталась прогонять этот текст через различные декодеры, но и из этого ничего не вышло.
Плагину Exploit Scanner тоже всё это явно не нравится:



Вердикт:
Второй сайт из поисковой выдачи гугла, и мы получаем ещё больше зашифрованного кода. Я скачала ещё несколько тем с этого сайта. Правда в них были лишь статичные ссылки, и никаких шифров. В случае с сайтом WordPressThemesBase мне удалось дешифровать код, а в этот раз – нет. Поиск части этого зашифрованного кода по различным форумам показал, что этот код может быть использован хакерами. Я недостаточно компетентна в технических вопросах что бы сказать точно. Впрочем, как и большинство обычных пользователей wordpress’а.

Моё решение:
Остерегаться!



Перевод второй части закончен. Далее идёт замечание переводчика, т.е. моё.

В этот раз автор не смогла вообще ничего сделать с зашифрованным кодом, просто констатировала факт его присутствия. Ну что ж, исправим этот недочёт.
Несмотря на то, что оригинальная статья была написана не так давно (в январе этого года), упоминаемого сайта freewordpressthemes.com уже не существует. С него идёт редирект на сайт http://www.freewp.com
Ничего страшного, мы скачаем шаблон BeautyStore с другого сайта. Например отсюда http://slodive.com/freebies/free-wordpress-themes-for-2011/
Устанавливаем, прогоняем через TAC, убеждаемся, что зашифрованный код опять в футере, открываем footer.php из каталога с темой.

<?php    if (!function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))  {   function T7FC56270E7A70FA81A5935B72EACBE29($TF186217753C37B9B9F958D906208506E)   {    $TF186217753C37B9B9F958D906208506E = base64_decode($TF186217753C37B9B9F958D906208506E);    $T7FC56270E7A70FA81A5935B72EACBE29 = 0;    $T9D5ED678FE57BCCA610140957AFAB571 = 0;    $T0D61F8370CAD1D412F80B84D143E1257 = 0;    $TF623E75AF30E62BBD73D6DF5B50BB7B5 = (ord($TF186217753C37B9B9F958D906208506E[1]) << 8) + ord($TF186217753C37B9B9F958D906208506E[2]);    $T3A3EA00CFC35332CEDF6E5E9A32E94DA = 3;    $T800618943025315F869E4E1F09471012 = 0;    $TDFCF28D0734569A6A693BC8194DE62BF = 16;    $TC1D9F50F86825A1A2302EC2449C17196 = "";    $TDD7536794B63BF90ECCFD37F9B147D7F = strlen($TF186217753C37B9B9F958D906208506E);    $TFF44570ACA8241914870AFBC310CDB85 = __FILE__;    $TFF44570ACA8241914870AFBC310CDB85 = file_get_contents($TFF44570ACA8241914870AFBC310CDB85);    $TA5F3C6A11B03839D46AF9FB43C97C188 = 0;    preg_match(base64_decode("LyhwcmludHxzcHJpbnR8ZWNobykv"), $TFF44570ACA8241914870AFBC310CDB85, $TA5F3C6A11B03839D46AF9FB43C97C188);    for (;$T3A3EA00CFC35332CEDF6E5E9A32E94DA<$TDD7536794B63BF90ECCFD37F9B147D7F;)    {     if (count($TA5F3C6A11B03839D46AF9FB43C97C188)) exit;     if ($TDFCF28D0734569A6A693BC8194DE62BF == 0)     {      $TF623E75AF30E62BBD73D6DF5B50BB7B5 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8);      $TF623E75AF30E62BBD73D6DF5B50BB7B5 += ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]);      $TDFCF28D0734569A6A693BC8194DE62BF = 16;     }     if ($TF623E75AF30E62BBD73D6DF5B50BB7B5 & 0x8000)     {      $T7FC56270E7A70FA81A5935B72EACBE29 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 4);      $T7FC56270E7A70FA81A5935B72EACBE29 += (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]) >> 4);      if ($T7FC56270E7A70FA81A5935B72EACBE29)      {       $T9D5ED678FE57BCCA610140957AFAB571 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) & 0x0F) + 3;       for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 < $T9D5ED678FE57BCCA610140957AFAB571; $T0D61F8370CAD1D412F80B84D143E1257++)        $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012+$T0D61F8370CAD1D412F80B84D143E1257] = $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012-$T7FC56270E7A70FA81A5935B72EACBE29+$T0D61F8370CAD1D412F80B84D143E1257];       $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571;      }      else      {       $T9D5ED678FE57BCCA610140957AFAB571 = (ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8);       $T9D5ED678FE57BCCA610140957AFAB571 += ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) + 16;       for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 < $T9D5ED678FE57BCCA610140957AFAB571; $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012+$T0D61F8370CAD1D412F80B84D143E1257++] = $TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]);       $T3A3EA00CFC35332CEDF6E5E9A32E94DA++; $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571;      }     }     else $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012++] = $TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++];     $TF623E75AF30E62BBD73D6DF5B50BB7B5 <<= 1;     $TDFCF28D0734569A6A693BC8194DE62BF--;     if ($T3A3EA00CFC35332CEDF6E5E9A32E94DA == $TDD7536794B63BF90ECCFD37F9B147D7F)     {      $TFF44570ACA8241914870AFBC310CDB85 = implode("", $TC1D9F50F86825A1A2302EC2449C17196);      $TFF44570ACA8241914870AFBC310CDB85 = "?".">".$TFF44570ACA8241914870AFBC310CDB85."<"."?";      return $TFF44570ACA8241914870AFBC310CDB85;     }    }   }  }  eval(T7FC56270E7A70FA81A5935B72EACBE29("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"));  ?>

ОК, видно что тут есть зашифрованный код, но также видно, что есть и обфусцированный. Обфусцированный означает, что код специально привели в не читаемый вид. Т.е. это обычные команды php, но вместо имени переменной $number_of_rows используется, например, $T0D61F8370CAD1D412F80B84D143E1257. Компьютеру всё равно, как будет называться переменная, он код отработает в обоих случаях, а вот человеку прочитать второй код будет намного труднее. Именно это мы и наблюдаем в нашем случае.
Кроме того, для дополнительного затруднения чтения кода, он был специально записан в одну строку. Сначала я пытался привести код к читабельному виду вручную, однако быстро понял, что дело это явно неблагодарное. Я воспользовался консольной программой phpCodeBeautifier. При помощи команды

C:\TEMP\phpCB-1.0.1-windows\phpCB.exe "C:\TEMP\footer.php" >> "C:\temp\footer_new.php"

мы отформатируем весь текст и приведём его к нормальному виду. У программы есть различные ключи для настройки форматирования (о них подробно написано в инструкции), но в моём случае они мне не понадобились.
Итак, мы получаем нормальный (более или менее) текст:


  1. <?php if (!function_exists("T7FC56270E7A70FA81A5935B72EACBE29")){
  2.     function T7FC56270E7A70FA81A5935B72EACBE29($TF186217753C37B9B9F958D906208506E){
  3.         $TF186217753C37B9B9F958D906208506E = base64_decode($TF186217753C37B9B9F958D906208506E);
  4.         $T7FC56270E7A70FA81A5935B72EACBE29 = 0;
  5.         $T9D5ED678FE57BCCA610140957AFAB571 = 0;
  6.         $T0D61F8370CAD1D412F80B84D143E1257 = 0;
  7.         $TF623E75AF30E62BBD73D6DF5B50BB7B5 = (ord($TF186217753C37B9B9F958D906208506E[1]) << 8) +ord($TF186217753C37B9B9F958D906208506E[2]);
  8.         $T3A3EA00CFC35332CEDF6E5E9A32E94DA = 3;
  9.         $T800618943025315F869E4E1F09471012 = 0;
  10.         $TDFCF28D0734569A6A693BC8194DE62BF = 16;
  11.         $TC1D9F50F86825A1A2302EC2449C17196 = "";
  12.         $TDD7536794B63BF90ECCFD37F9B147D7F = strlen($TF186217753C37B9B9F958D906208506E);
  13.         $TFF44570ACA8241914870AFBC310CDB85 = __FILE__;
  14.         $TFF44570ACA8241914870AFBC310CDB85 = file_get_contents($TFF44570ACA8241914870AFBC310CDB85);
  15.         $TA5F3C6A11B03839D46AF9FB43C97C188 = 0;
  16.         preg_match(base64_decode("LyhwcmludHxzcHJpbnR8ZWNobykv"), $TFF44570ACA8241914870AFBC310CDB85,$TA5F3C6A11B03839D46AF9FB43C97C188);
  17.         for (;$T3A3EA00CFC35332CEDF6E5E9A32E94DA < $TDD7536794B63BF90ECCFD37F9B147D7F;){
  18.             if (count($TA5F3C6A11B03839D46AF9FB43C97C188)) exit;
  19.             if ($TDFCF28D0734569A6A693BC8194DE62BF == 0){
  20.                 $TF623E75AF30E62BBD73D6DF5B50BB7B5 =(ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8);
  21.                 $TF623E75AF30E62BBD73D6DF5B50BB7B5 +=ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]);
  22.                 $TDFCF28D0734569A6A693BC8194DE62BF = 16;
  23.             }
  24.             if ($TF623E75AF30E62BBD73D6DF5B50BB7B5 & 0x8000){
  25.                 $T7FC56270E7A70FA81A5935B72EACBE29 =(ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 4);
  26.                 $T7FC56270E7A70FA81A5935B72EACBE29 +=(ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]) >> 4);
  27.                 if ($T7FC56270E7A70FA81A5935B72EACBE29){
  28.                     $T9D5ED678FE57BCCA610140957AFAB571 =(ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) & 0x0F) + 3;
  29.                     for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 <$T9D5ED678FE57BCCA610140957AFAB571; $T0D61F8370CAD1D412F80B84D143E1257++)$TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012 +$T0D61F8370CAD1D412F80B84D143E1257] =$TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012 -$T7FC56270E7A70FA81A5935B72EACBE29 + $T0D61F8370CAD1D412F80B84D143E1257];
  30.                     $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571;
  31.                 }else{
  32.                     $T9D5ED678FE57BCCA610140957AFAB571 =(ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) << 8);
  33.                     $T9D5ED678FE57BCCA610140957AFAB571 +=ord($TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++]) + 16;
  34.                     for ($T0D61F8370CAD1D412F80B84D143E1257 = 0; $T0D61F8370CAD1D412F80B84D143E1257 <$T9D5ED678FE57BCCA610140957AFAB571;$TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012 +$T0D61F8370CAD1D412F80B84D143E1257++] =$TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA]);
  35.                     $T3A3EA00CFC35332CEDF6E5E9A32E94DA++;
  36.                     $T800618943025315F869E4E1F09471012 += $T9D5ED678FE57BCCA610140957AFAB571;
  37.                 }
  38.             }else $TC1D9F50F86825A1A2302EC2449C17196[$T800618943025315F869E4E1F09471012++] =$TF186217753C37B9B9F958D906208506E[$T3A3EA00CFC35332CEDF6E5E9A32E94DA++];
  39.             $TF623E75AF30E62BBD73D6DF5B50BB7B5 << = 1;
  40.             $TDFCF28D0734569A6A693BC8194DE62BF--;
  41.             if ($T3A3EA00CFC35332CEDF6E5E9A32E94DA == $TDD7536794B63BF90ECCFD37F9B147D7F){
  42.                 $TFF44570ACA8241914870AFBC310CDB85 = implode("", $TC1D9F50F86825A1A2302EC2449C17196);
  43.                 $TFF44570ACA8241914870AFBC310CDB85 = "?" . ">" . $TFF44570ACA8241914870AFBC310CDB85 . "<" . "?";
  44.                 return $TFF44570ACA8241914870AFBC310CDB85;
  45.             }
  46.         }
  47.     }
  48. }
  49. eval(T7FC56270E7A70FA81A5935B72EACBE29("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"));
  50. ?>

К сожалению, Google Blogger не имеет встроенной функции подсветки кода, а код из стороннего сервиса вставляется как-то кривовато. Ну да ладно.
Начнём с конца.
Собственно весь код содержится в строке 49. Он зашифрован собственным алгоритмом автора этого чуда-скрипта. Вероятно автор может собой гордиться, что создал такой трэш. Дешифровка производится функцией T7FC56270E7A70FA81A5935B72EACBE29(). Да-да, имя функции не очень-то говорящее, это и есть обфускация кода. Как и в прошлом случае, функция отрабатывает не всегда. Ищем ключевое слово exit. Вот он, в 18-ой строке

            if (count($TA5F3C6A11B03839D46AF9FB43C97C188)) exit;

Переменная $TA5F3C6A11B03839D46AF9FB43C97C188 - это, как я понял, кол-во функций print, sprint или echo в текущем исполняемом скрипте, вызываемым пользователем. Если их кол-во больше одного, то скрипт завершается, и ничего пользователю не показывается.
Зачем так сделано для меня осталось загадкой. Ведь получается, что в таком случае пользователь останется вообще без футера. Да и в каком скрипте может не быть ни одного print, sprint или echo? В общем, непонятно.
Ладно, закомментируем эту строку, заменим eval() на echo(), как и в прошлый раз обёрнём всё это в <teaxtarea> и, по идее, скрипт должен показать нам "всё что скрыто". Комментируем, заменяем и... обламываемся. Ничего нет. Но почему? Мне потребовалось около получаса, что бы найти ошибку в этом коде. А ошибка в строке 39:

            $TF623E75AF30E62BBD73D6DF5B50BB7B5 << = 1;

Надо убрать пробел между << и =. Благодаря этой ошибке скрипт не выполнится никогда. php его просто загасит на стадии выполнения. Так какой тогда смысл вообще во всём этом шифровании, обфускации и прочем? Цель ведь не будет достигнута. Ну да ладно, чисто из спортивного интереса исправляю строку:

            $TF623E75AF30E62BBD73D6DF5B50BB7B5 <<= 1;

И вуаля, исходный текст как на ладони:


  1. ?><div class="clear"></div>
  2.     </div>
  3.    
  4.     <div class="footer">
  5.         <div class="footertext">
  6.                         <a href="<?php bloginfo('url');?>"><img src="<?php bloginfo('template_directory');?>/images/paypal-icons.gif" width="385" height="33" alt="" /></a>
  7.         </div>
  8.     </div>
  9.     <div class="footerlinks">
  10.         <ul>
  11.             <?php wp_list_pages('title_li=&depth=-1');?>
  12.         </ul>
  13.     </div>
  14.     <div class="clear"></div>
  15. </div>
  16. </div>
  17. <div class="footerbottom">
  18.         <div class="footernote">© Copyright <?php echo date('Y');?> <a href="<?php bloginfo('home')?>"><?php bloginfo('name')?></a>. All rights reserved. Designed by <ahref="http://www.templatescraze.com/" title="Web Templates">Web Templates</a></div>
  19. </div>
  20. <?php wp_footer();?>
  21. <script type='text/javascript' src='<?php bloginfo('template_directory'); ?>/js/jsFont.js'></script>
  22. <script type='text/javascript' src='<?php bloginfo('template_directory'); ?>/js/Bauhaus_Md_BT_400.font.js'></script>
  23. <script type='text/javascript' src='<?php bloginfo('template_directory'); ?>/js/action.js'></script>
  24. <script type="text/javascript">
  25. </script>
  26. <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/jquery.easing.1.2.js"></script>
  27.           <script src="<?php bloginfo('template_directory'); ?>/js/jquery.anythingslider.js" type="text/javascript" charset="utf-8"></script>
  28. <script type="text/javascript">
  29.    
  30.         function formatText(index, panel) {
  31.                   return index + "";
  32.           };
  33.    
  34.         jQuery(function () {
  35.        
  36.             jQuery('.anythingSlider').anythingSlider({
  37.                 easing: "easeInOutExpo",        // Anything other than "linear" or "swing" requires the easing plugin
  38.                 autoPlay: true,                 // This turns off the entire FUNCTIONALY, not just if it starts running or not.
  39.                 delay: 3000,                    // How long between slide transitions in AutoPlay mode
  40.                 startStopped: false,            // If autoPlay is on, this can force it to start stopped
  41.                 animationTime: 600,             // How long the slide transition takes
  42.                 hashTags: false,                 // Should links change the hashtag in the URL?
  43.                 buildNavigation: false,          // If true, builds and list of anchor links to link to each slide
  44.                         pauseOnHover: true,             // If true, and autoPlay is enabled, the show will pause on hover
  45.                         startText: "Go",                // Start text
  46.                         stopText: "Stop",               // Stop text
  47.                         navigationFormatter: formatText // Details at the top of the file on this use (advanced use)
  48.             });
  49.            
  50.         });
  51.     </script>
  52. <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/ddsmoothmenu.js"></script>
  53. </body>
  54. </html>
  55. <?

Это html, с вкраплениями php и js. Как и в прошлый раз, обычный футер. Как и в прошлый раз всё это ради ссылки, на этот раз - http://www.templatescraze.com/.

В этот раз расшифровать код было несколько сложнее. Жаль, что всё закончилось банальной ссылкой. Я уже решил, что в конце цикла этих статей, я попробую сыграть роль хакера: взять какой-нибудь шаблон, и добавить в него левую ссылку. Но только так, что бы TAC (Theme Authenticity Checker Plugin), не обнаружил никаких следов проникновения.

До новых встреч.

2 комментария:

  1. прикольно написано , спасибо

    ОтветитьУдалить
  2. Хорошо написано и очень интересно было вторую часть читать! )))

    ОтветитьУдалить