Что?! При слове обфускация к тебе на ум приходят неприличные слова? Если да, то тогда тебе сюда. В обратном случае, продолжаем дальше читать статью. Обфусцировать (язык можно сломать), мы будем с целью затруднения изучения/понимания javascript-кода.
Для примера, обфускации подвергнется следующий код:
1 | alert('2coders.ru') |
В результате обфускации мы получим:
1 2 3 4 5 | <script> (function(O,o){o(O(97,108,101,114,116,40,39, 50,99,111,100,101,114,115, 46,114,117,39,41))})(String.fromCharCode,eval) </script> |
Но, это в конце, а пока что у нас все еще предельно понятный alert(‘2coders.ru’). Первым делом, переведем символы в их ASCII эквивалент:
a — 97
l — 108
e — 101
r — 114
t — 116
Ну и т.д.
После преобразования, alert(‘2coders.ru’) будет выглядить вот так:
97,108,101,114,116,40,39,50,99,111,100,101,114,115,46,114,117,39,41
Уже лучше, но нам нужно как-то перевести ASCII значения обратно, и запустить код. В этом нам помогут: функция eval() и метод fromCharCode().
1 2 3 4 | <script> eval(String.fromCharCode(97,108,101,114,116,40,39,50,99,111, 100,101,114,115,46,114,117,39,41)); </script> |
Приведенный код, эквивалентен alert() c сообщением 2coders.ru. Попробуйте протестировать его у себя, если непонятно. Идем дальше и еще усложняем код:
1 2 3 | <script> (function(O,o){o(O(97,108,101,114,116,40,39,50,99,111,100,101,114,115,46,114,117,39,41))})(String.fromCharCode,eval); </script> |
Опять у нас все тот же alert(‘2coders.ru’), но уже в менее понятном виде. Создадим, небольшую форму и функцию, чтобы не пришлось все преобразовывать ручками.
1 2 3 4 5 6 7 8 9 10 11 12 | <script type="text/javascript"> function obf() { var str = document.getElementById('text').value; var a = []; (''+str).replace(/./g ,function(b){a.push(b.charCodeAt(0))}); document.getElementById('container').innerHTML = '<script>(function(O,o){o(O('+a.join(',')+'))})(String.fromCharCode,eval)</script>'; } </script> <div id="container"> </div> <textarea cols="50" rows="10" name="text" id="text"></textarea> <br /> <input type="submit" name="submit" value="Поехали!" onclick="obf()"/> |
Вводим в форму наш javascript код, и после магии обфускации получаем, что-то мало понятное и непохожее на то, что мы вводили ранее. Качаем готовую версию отсюда.
- Работа с cookies в jQuery и JavaScript
- Определение координат на изображении с помощью JavaScript
- jQuery: полезные примеры, при работе с DOM
- jQuery JSON: получаем данные из твиттера
- jQuery: делаем формы интерактивными
Теги: JavaScript, Полезные скрипты
Хорошая заметка. Увы, несложно написать программу, которая с легкостью расшифрует этот код. Истинная обфускация производится путем замены имен функций и переменных, удалением комментариев и так далее. Такой код очень требует многих часов ручной работы для расшифровки. Правда, и для написания обфускатора нужно написать свой синтаксический анализатор. Но это сравнительно просто.
Reply
Жаль, что объем кода возрастает в 4-5 раз
Reply