This page has been robot translated, sorry for typos if any. Original content here.

Як дешифрувати eval (base64_decode ()); eval (gzinflate (base64_decode ()));

По темі:


Як дешифрувати або декодинг eval gzinflate base64_decode

Основні принципи шифровки і упаковки, слабкі місця захистів, способи ручного зйому, а також універсальні інструменти для автоматичного зняття пакувальників та навісний захисту зі скриптів JavaScript.

Останнім часом все частіше вихідний код скриптів шифрується або пакується.

Цим почали захоплюватися Яндекс, DLE і інші популярні проекти, а красиві байки про "турботу про користувачів", "економію трафіку" і іншу нісенітницю виглядають дуже смішно.

Що ж, якщо комусь є що приховувати, значить наше завдання вивести їх на чисту воду.

теорія

Через особливості виконання JavaScript все шіфровщікі і пакувальники, незважаючи на їх різноманітність, мають всього два варіанти алгоритму:

	 var encrypted = 'зашифровані дані'; 
	 function decrypt (str) { 
	  // функція розшифровки або розпакування 
	 } 
	 // Виконати розшифрований скрипт 
	 eval (decrypt (encrypted)); 	
	

або як варіант:

	 var encrypted = 'зашифровані дані'; 
	 function decrypt (str) { 
	  // функція розшифровки або розпакування 
	 } 
	 // Вивести на екран розшифровані дані 
	 document.write (decrypt (encrypted)); 
	

Другий спосіб найчастіше використовується для захисту вихідного html-коду сторінки, а також різними троянами для впровадження в сторінку шкідливого коду, наприклад прихованого фрейма.

Обидва алгоритми можуть комбінуватися, "навороченность" і заплутаність расшифровщика може бути будь-який, незмінним залишається тільки сам принцип.

В обох випадках виходить, що функцій eval () і document.write () передаються повністю розшифровані дані.

Як їх перехопити?

Спробуйте замінити eval () на alert (), і в розпочатому MessageBox'е ви відразу побачите розшифрований текст.

Деякі браузери дозволяють копіювати текст з MessageBox'ов, але краще скористатися таким ось напівавтоматичним декодером:

	 <Html> 
	 <Head> <title> JavaScript Decoder </ title> </ head> 
	 <Body> 
	 
	 <Script type = "text / javascript"> 
	 // Функція запису в лог результатів розшифровки 
	 function decoder (str) { 
	  document.getElementById ( 'decoded'). value + = str + '\ n'; 
	 } 
	 </ Script> 
	 
	 <! - Вікно балки -> 
	 <Textarea id = "decoded" style = "width: 900px; height: 500px;"> </ textarea> 
	 
	 <Script type = "text / javascript"> 
	 // Сюди вставити зашифрований скрипт, попередньо 
	 // замінити в ньому всі виклики eval () і document.write () на decoder (). 
	 </ Script> 
	 
	 </ Body> 
	 </ Html> 
	

Для прикладу візьмемо який-небудь скрипт з Яндекса , подивившись вихідний код бачимо щось нездорове:

eval(function(p,a,c,k,e,r){e=function(c){return(c 35?String.fromCharCode(c+29):c.toString(36))};if(! ''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e ){return r[e]}];e=function(){return'\w+'};c=1};while(c--)if(k[c]) p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p}('$.1e .18=8(j){3 k=j["6-9"]||"#6-9";3 l=j["6-L"]||".uL";3 m=j["6-L-17"] ||"";3 n=j["1d"]||0;$(5).2(".6-9").14("7");$(5).2(".6-9").Z("7",8( ){3 a=$(5).x();3 o=$(5).x();3 h=$(5).B("C");$(5).v("g-4");$(5).16( $(k).q());3 t=$(o).2("15");3 c=$(o).2(".br");3 d=$(o).2(".b-12"); [остальной такой же бред отрезан] eval(function(p,a,c,k,e,r){e=function(c){return(c 35?String.fromCharCode(c+29):c.toString(36))};if(! ''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e ){return r[e]}];e=function(){return'\w+'};c=1};while(c--)if(k[c]) p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c]);return p}('$.1e .18=8(j){3 k=j["6-9"]||"#6-9";3 l=j["6-L"]||".uL";3 m=j["6-L-17"] ||"";3 n=j["1d"]||0;$(5).2(".6-9").14("7");$(5).2(".6-9").Z("7",8( ){3 a=$(5).x();3 o=$(5).x();3 h=$(5).B("C");$(5).v("g-4");$(5).16( $(k).q());3 t=$(o).2("15");3 c=$(o).2(".br");3 d=$(o).2(".b-12"); [остальной такой же бред отрезан]

Відразу скажу, що цей скрипт оброблений JavaScript Compressor , його легко впізнати за сигнатурі - характерному назвою фукнции на початку скрипта. Копіюємо цілком вихідний текст скрипта, замінюємо перший eval на decoder, вставляємо в декодер і зберігаємо його як html-сторінку.

	 <Script type = "text / javascript">
	 // Сюди вставити зашифрований скрипт, попередньо
	 // замінити в ньому всі виклики eval () і document.write () на decoder ().
	 decoder (function (p, a, c, k, e, r) {e = function (c) {return (c <a? '': e ...
	 </ Script>
	

Відкриваємо її в будь-якому браузері і бачимо, що в textarea відразу з'явився розпакований скрипт. Радіти поки рано, в ньому зібрано всі перенесення рядків і форматування коду. Як з цим боротися написано в статті про деобфускацію .

Другий приклад. HTML-сторінка, накрита програмою HTML Protector. Це сторінка, що демонструє можливості програми, тому там задіяні всі опції: блокування виділення і копіювання тексту, заборона правої кнопки миші, захист картинок, приховування рядка стану, шифрування html-коду і т.д. Відкриваємо вихідний код, дивимося. У самому верху вже знайомий нам document.write і зашифрований скрипт. Запускаємо його через декодер, отримуємо функцію розшифровки основного вмісту:

hp_ok=true;function hp_d01(s){ ...вырезано... o=ar.join("")+os;document.write(o)

Замінюємо в функції останній document.write на decoder і вставляємо після неї всі три залишилися зашифрованих скрипта:

	 <Script type = "text / javascript"> 
	 // Сюди вставити зашифрований скрипт, попередньо 
	 // замінити в ньому всі виклики eval () і document.write () на decoder (). 
	 hp_ok = true; function hp_d01 (s) {.... o = ar.join ( "") + os; decoder (o); 
	 hp_d01 (unescape ( "> QAPKRV% 22NCLEWC .... 
	 hp_d01 (unescape ( "> QAPKRV% 22NCLEWCEG? HctcQa ... 
	 hp_d01 (unescape ( ">` mf {% 22`eamnmp?! DDDDDD% 22v ... 
	 </ Script> 
	

Для зручності в статті скрипти наводяться в повному обсязі, ви ж повинні копіювати їх цілком. Відкриваємо декодер в браузері і бачимо захисні скрипти, додані програмою, і розшифрований вихідний текст сторінки. Для зручності можна розшифровувати тільки третій скрипт, в якому міститься html-код сторінки. Ось і вся захист. Як бачите, нічого складного. Аналогічно знімаються і інші захисту html-сторінок.

Софт для дослідження троянів і іншого шкідливого коду

Для більш складних випадків доведеться пускати в хід важку артилерію. Це безкоштовний проект Malzilla , призначений для дослідження троянів і іншого шкідливого коду. Оскільки всі програми, призначені для захисту авторського права, є однозначно шкідливими, Malzilla допоможе нам в боротьбі з ними. Качаємо останню версію, розпаковуємо, запускаємо. Відкриваємо другу вкладку Decoder, в верхнє вікно вставляємо код зашифрованого скрипта, натискаємо кнопочку Run script.

Як дешифрувати або декодинг eval gzinflate base64_decode
Malzilla за роботою

В папці eval_temp складаються всі результати виконання функцій eval (), в тому числі і проміжні. Їх можна подивитися, натиснувши на кнопку Show eval () results, текст відкриється в нижньому вікні. Його можна скопіювати, вставити в верхнє вікно і відразу ж відформатувати натисненням кнопки Format code. Крім декодера Malzilla має ще безліч інструментів і налаштувань, що дозволяють легко зняти будь-який захист зі скриптів JavaScript.

Як дешифрувати або декодинг eval gzinflate base64_decode
Скрипт успішно розшифрований і відформатований

Також можна звернути увагу на ще один безкоштовний інструмент для роботи з зашифрованими скриптами - FreShow .

Декодинг <? Php eval (gzinflate (base64_decode ( 'encoded text'))); ?> - варіант 1 (скрипт)

Зіткнувся ось тільки що з завданням як би потихому розкрити закодований через <? Php eval (gzinflate (base64_decode ( 'encoded text'))); ?> Php код.

Як завжди за підказкою вирішив звернутися до Гуглю. Відповідь як завжди знайшовся знайшовся.

код:

	 <Html>
	 <Body>
	 <! - початок дешифрування ->
	 <? Php
	 $ Str = gzinflate (base64_decode ( 'encoded text'));
	 while (1) {
	 if (($ pos1 = strpos ($ str, 'eval (')) === FALSE) {
	 break;
	 }
	 $ Pos2 = strpos ($ str, ');');
	 $ Newstr = substr ($ str, $ pos1 + 5, $ pos2- $ pos1-5);
	 eval ( '$ str ='. $ newstr. ";");
	 }
	 print $ str;
	 ?>
	 <! - кінець дешифрування ->
	 </ Body>
	 </ Html>
	

Зберігаєте цей файл як вам завгодно, залівате на хост, або запускаєте у себе на локалхосте і копіюєте з исходника все, що знаходиться між тегами

<! - початок дешифрування ->
...
<! - кінець дешифрування ->

Усе. Код дешифрований.

Декодинг <? Php eval (gzinflate (base64_decode ( 'encoded text'))); ?> - варіант 2 (скрипт)

В даному випадку необхідно зробити наступне:

  1. зберегти цей файл як decrypt.php
  2. Зашифрований код зберегти як coded.txt
  3. створити порожній файл decoded.txt (якщо будете запускати файл на сервері, то вкажіть йому CHMOD 0666)
  4. запустіть файл decrypt.php
  5. в файлі decoded.txt тепер повинен лежати розшифрований PHP код.

код:

	 <? Php
	 / *
	 Taken from http://www.php.net/manual/de/function.eval.php#59862
	 Directions:
	 1. Save this snippet as decrypt.php
	 2. Save encoded PHP code in coded.txt
	 3. Create a blank file called decoded.txt (from shell do CHMOD 0666 decoded.txt)
	 4. Execute this script (visit decrypt.php in a web browser or do php decrypt.php in the shell)
	 5. Open decoded.txt, the PHP should be decrypted if not comment below http://danilo.ariadoss.com/decoding-eval-gzinflate-base64-decode/
	 * /
	 echo "\ nDECODE nested eval (gzinflate ()) by DEBO Jurgen <jurgen@person.be> \ n \ n";
	 echo "1. Reading coded.txt \ n";
	 $ Fp1 = fopen ( "coded.txt", "r");
	 $ Contents = fread ($ fp1, filesize ( "coded.txt"));
	 fclose ($ fp1);
	 echo "2. Decoding \ n";
	 while (preg_match ( "/ eval \ (gzinflate /", $ contents)) {
	  $ Contents = preg_replace ( "/ <\? | \?> /", "", $ Contents);  eval (preg_replace ( "/ eval /", "\ $ contents =", $ contents));  } Echo "3. Writing decoded.txt \ n";  $ Fp2 = fopen ( "decoded.txt", "w");  fwrite ($ fp2, trim ($ contents));  fclose ($ fp2);
	 ?> 

Upon decrypting the source code I realized that the freeware application downloaded spyware onto visitors 'computers as well as periodically initiated pop-ups that contained obvious spam. I posted this article in order for others to be able to examine the actual source of these applications in order to prevent them from inadvertently running malicious code on their websites. I hope this helped some of you and I will endeavor to continue to post useful and insightful entries from now on.

Декодинг <? Php eval (gzinflate (base64_decode ( 'encoded text'))); ?> - варіант 3 (онлайн)

Як розшифрувати код і прибрати комерційні посилання з платних і безкоштовних скриптів?

Випадок перший:

eval(base64_decode ('SGksIG1hbg=='));

Якщо встречаемстроку eval (base64_decode ( 'SGksIG1hbg ==')),
то заходимо по цим посиланням на онлайн декодер, вставляємо в форму тільки SGksIG1hbg == з нашої рядки і тиснемо кнопку «Decode data».

Випадок другий:

eval(gzinflate(base64_decode ('80jNyclXyFTPVUhJTc5PSU0BAA==')));

Якщо зустрічаємо рядок eval (gzinflate (base64_decode ( '80jNyclXyFTPVUhJTc5PSU0BAA =='))); ,
заходимо вже по цим посиланням і вставляємо в форму вже всю рядок починаючи з eval (gzinflate і закінчуючи))); і тиснемо «Decode».

<? php eval ((base64_decode ( 'encoded text')); - варіант 4 (за допомогою echo)

Для розшифровки шкідливих вкраплень в php код типу:

eval(base64_decode(”DQplcnJvcl9yZXBv...tPWhlYWRlc...2F0aW9uOiBodHRwOi8...eGl0KCk7DQp9Cn0KfQ0KfQ0KfQ==”));

Можна елементарно замінити функцію eval на функцію echo і подивитися чого вийшло.

Це один з найбільш елементарних способів дешифрувати base64_decode ...

Якщо жоден із способів не допоміг, значить не доля :(

Якщо Вам зустрічалися ще якісь - небудь варіанти вирішення даної проблеми, пишіть в коментарі, спробуємо з ними розібратися.