1

Легко, если код не минимизирован. но трудно сказать, что они сведены к минимуму и запутаны. Я нашел это: http://research.microsoft.com/pubs/148514/tr.pdfКак программно обнаруживать обфускацию JavaScript?

Как бы определить разницу между миниатюрным и обфузифицированным кодом?

+0

Я внесла изменения в ваш вопрос, так как запросы библиотеки запрещены и получили много близких/вниз голосов. –

+0

Хотя на самом деле - то, что говорится в этой статье, должно быть достаточно - они просто обучили классификатор на основе кода, который они загрузили, а затем обсчитали против стандартного –

+0

Привет, Бенджамин, я ищу более общий подход, который будет обрабатывать правильно новые (или измененные) обфускаторы , Я не знаю, как это сделать, и надеюсь, что кто-то здесь может помочь – karpada

ответ

4

Здесь не о чем поговорить.

Но сначала, давайте зададим вопрос: Что такое минимальный код?

Ну, это не слишком сложно. Wikipedia есть! Но не объясняет, как добиться минимального кода.

В принципе, вам необходимо как можно меньше уменьшить код, но сохранить ту же функциональность.

Давайте проанализируем некоторый код!

var times; 
 

 
times = window.prompt('Insert a number','5'); 
 

 
times = parseInt(times, 10); 
 

 
if(!isNaN(times)) 
 
{ 
 
    for(var i=0; i<=10; i=i+1) 
 
    { 
 
    document.write(times + ' &times; ' + i + ' = ' + (i * times) + '<br/>'); 
 
    } 
 
} 
 
else 
 
{ 
 
    alert('Invalid number'); 
 
}

Теперь мы можем сократить этот код много!

И это то, что касается минерализации.

Теперь давайте посмотрим на этот код:

var i=0,t=window.prompt('Insert a number',5);if(t/1==t/1)for(;i<11;i++)document.write(t+' &times; '+i+' = '+(i*t)+'<br/>');else alert('Invalid number');

Он делает то же самое! Но так много короче!

Что я сделал:

  • Уменьшено имена переменных
  • признал их обоих в то же время
  • Уменьшено количество раз, что значение приписывается переменной
  • Заменены строка '5' с номером 5
  • Удалено ненужное parseInt()
  • Заменено заменено !isNaN(times)t/1==t/1
    Если это не номер, t/1 будет NaN.
    Если вы запустите NaN==NaN, это будет false.
  • Удалены (пробелы разнесены, новая строка)
  • Удалены брекеты

Этот код может быть снижена еще больше, но вы можете (немного сложнее) увидеть функциональность.

Чтобы уменьшить размер кода, существует больше методов, но я не буду вдаваться в подробности.


Но теперь другой вопрос: Что затемненный код?

Обфускамированный код - это код, который не подлежит обсуждению.

Вы можете прочитать код, но функциональность не будет понятна.

Это намного больше, чем минимизация. Сокращение его размера не является обязательным требованием.

Но, в большинстве случаев, запутанный код уменьшается таким образом, который вы не понимаете.

Только те, кто знает, смогут это понять.

JSF * ck - пример этого.

Используя 2 онлайн инструментов, вот что затемненный код будет выглядеть следующим образом:

затемненных с помощью http://www.jsobfuscate.com/:

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}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}('4 2;2=d.e(\'c a 3\',\'5\');2=b(2,6);7(!8(2)){9(4 i=0;i<=6;i=i+1){h.j(2+\' &2; \'+i+\' = \'+(i*2)+\'<f/>\')}}k{l(\'g 3\')}',22,22,'||times|number|var||10|if|isNaN|for||parseInt|Insert|window|prompt|br|Invalid|document||write|else|alert'.split('|'),0,{}))

Запутанного использование http://packer.50x.eu/:

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(c/a))+String.fromCharCode(c%a+161)};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\[\xa1-\xff]+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp(e(c),'g'),k[c])}}return p}('£ ¡;¡=©.¨(\'§ a ¢\',\'5\');¡=¥(¡,¤);¦(!ª(¡)){«(£ i=0;i<=¤;i=i+1){®.¬(¡+\' &¡; \'+i+\' = \'+(i*¡)+\'<±/>\')}}­{¯(\'° ¢\')}',17,17,'times|number|var|10|parseInt|if|Insert|prompt|window|isNaN|for|write|else|document|alert|Invalid|br'.split('|'),0,{}))

Используя эти инструменты, есть несколько сходств:

  • Оба имеют eval()
  • Как создать функцию с переменным p,a,c,k,e,d.
  • И есть список всех proterties и другие вещи, в конце
  • Оба используют строки вуду для генерации кода

Но каждый затемненный код равен? НЕТ! Это не так.

Вот пример:

var ________________ = [] + []; var _ = +[]; _++; var _____ = _ + _; 
 
var ___ = _____ + _____; var __ = ___ + ___; var ____ = __ + __; var ______ = ____ + ____; 
 
var _______ = ______ + _; var ___________ = ______ + ______ + __; 
 
var ______________ = ___________ + ____ - _; var ____________ = _ + _____; 
 
var ________ = _______ * ____________ + _; var _________ = ________ + _; 
 
var _____________ = ______________ + ______ - ___ - _; var __________ = _____________ - 
 
____________; var _______________ = __________ - ____________; document.write(________________ + 
 
String.fromCharCode(___________, _________, _______________, _______________, __________, 
 
______, ______________, __________, _____________, _______________, ________, _______));

Это было взято с другого сайта. Вы можете посмотреть исходный ответ здесь: https://codegolf.stackexchange.com/a/22746/14732

Как вы это разделяете? Вы просто не можете. Или вы супер гений, который может видеть запутанный код и видеть, что он делает.

Вам понадобится действительно умный алгоритм, чтобы знать, что делает код. А потом перестройте его назад. Если оба кода не совпадают, то он может быть запутанным.


Вывод: вы не может отличить нечитаемом код и Минимизированный один.

+0

Привет Исмаэль, я также не смог решить это. Спасибо за помощь и анализ! – karpada

+0

@karpada Добро пожаловать. Только на 1 час написано. –

Смежные вопросы