Привет, меня зовут Хашар Муджахид, и сегодня мы собираемся узнать, что такое методы ОБФУСКАЦИИ JavaScript и как мы можем их деобфускировать с точки зрения тестирования на проникновение.

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

ЧТО ТАКОЕ ОБФУСКАЦИЯ КОДА?

Обфускация кода — это практика преднамеренного написания кода таким образом, чтобы его было трудно понять или прочитать, с целью затруднить реинжиниринг или изменение кода кем-либо.

Процесс обфускации включает в себя преобразование кода, чтобы сделать его менее удобочитаемым, например, переименование переменных в более короткие и менее значимые имена или использование других синтаксических конструкций. Это также может включать добавление бессмысленного или избыточного кода, чтобы сделать общую структуру программы более сложной.

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

Существует множество онлайн-инструментов, которые могут помочь вам запутать ваш код.

как JavascriptObfuscator.io.

Теперь давайте обсудим обфускацию кода в javascript.

ОБФУСКАЦИЯ КОДА JAVASCRIPT:

Javascript может быть написан внутри html-файла или в отдельном js-файле, который затем будет связан с нашей HTML-страницей с помощью тегов script.

<script src="secret.js"></script>

Обфусцированный код в javascript выглядит примерно так.

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[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}('1.0("2 3 5 4 6");',7,7,'log|console|This|is|simple|a|code'.split('|'),0,{}))We can see the code is very hard to read and make sense of.

Попробуем запутать простой код.

function Test(){
  console.log("This is a simple code");
}

Давайте запустим это как есть, а затем запустим после того, как запутаем его.

Давайте теперь запутаем это.

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[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}('1.0("2 3 5 4 6");',7,7,'log|console|This|is|simple|a|code'.split('|'),0,{}))

Мы видим, что вывод кода такой же, как и раньше, но теперь его гораздо труднее понять.

Существуют и другие типы кодирования, такие как JSFUCK [Да!! Не выдумывая].

JSFuck — это форма кодирования, которая использует всего шесть символов для представления всего действительного кода JavaScript. Используются шесть символов:

  • ( - открывающие скобки
  • ) - закрыть скобки
  • ! - восклицательный знак
  • [ - открывающая квадратная скобка
  • ] - закрывающая квадратная скобка
  • + - знак плюс

Вот пример того, как JSFuck можно использовать для кодирования строки «Hello, World!»:

([]+[])[+!+[]]+(![]+[])[+!+[]]+([][[]]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]]+([][(+!![])+(+!![])+(+!![])+(+!![])+(+!![])+(+!![])]+[])[!+[]+!+[]+!+[]]+([][(+!![])+(+!![])]+[])[+!+[]]+(!![]+[])[+[]]+([][(+!![])+(+!![])]+[])[!+[]+!+[]+!+[]]+([][(+!![])+(+!![])+(+!![])+(+!![])+(+!![])+(+!![])]+[])[+!+[]]+(!![]+[])[+!+[]]

И JJencode

eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p;}('0(g){1.log("2, "+g+"!");}var 3=4(\'5 0(g){1.6("2, "+g+"!");}\');7.8(3);',9,9,'function|console|Hello|name|jjencode|function|log|eval|encoded'.split('|'),0,{}))

и ААэнкод.

ニ荑ㄘハニ鉄乘ハタ焚笈ニハ畝鉄焚ニ鉄乘ハニ畝畝鉄乘焚ニハ焚ニ畝畝畝焚乘鉄畝焚乘ハニ畝鉄焚ニハ焚ニ畝畝畝ハ

Теперь давайте обсудим методы деобфускации.

УЛУЧШИТЬ И ДЕОБФУСКАЦИЯ КОД JS:

Иногда мы можем видеть, что код написан в одну строку вот так.

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[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}('1.0("2 3 5 4 6");',7,7,'log|console|This|is|simple|a|code'.split('|'),0,{}))We can beautify this using some tools like Prettier or Beautifier. Let’s copy this code and beautify this using one og these tools.

Мы видим, что наш код преобразован в удобочитаемый формат.

Мы также можем использовать такие инструменты, как JSNice.

Мы можем использовать эти инструменты для деобфускации кода javascript и сделать его более читабельным.

Надеюсь, это поможет вам узнать больше о методах обфускации js.

Я увижу вас всех в следующем блоге до тех пор! Удачного взлома ❤!