Обфускатор javascript-кода



Что?! При слове обфускация к тебе на ум приходят неприличные слова? Если да, то тогда тебе сюда. В обратном случае, продолжаем дальше читать статью. Обфусцировать (язык можно сломать), мы будем с целью затруднения изучения/понимания 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 = '&lt;script>(function(O,o){o(O('+a.join(',')+'))})(String.fromCharCode,eval)&lt;/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 код, и после магии обфускации получаем, что-то мало понятное и непохожее на то, что мы вводили ранее. Качаем готовую версию отсюда.



Теги: ,

Комментарии

  1. Хорошая заметка. Увы, несложно написать программу, которая с легкостью расшифрует этот код. Истинная обфускация производится путем замены имен функций и переменных, удалением комментариев и так далее. Такой код очень требует многих часов ручной работы для расшифровки. Правда, и для написания обфускатора нужно написать свой синтаксический анализатор. Но это сравнительно просто.

    Reply

  2. Жаль, что объем кода возрастает в 4-5 раз

    Reply

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