JavaScript 난독 화란 무엇이며 왜 위협입니까?


답변:


38

난독 화는 자바 스크립트 코드의 실제 의미와 의도를 "분산"하는 수단입니다. 일부 사이트는 코드를 복사 / 빌리려는 사람들에게 장애물로 사용합니다. 다른 사이트는 코드의 실제 의도를 숨기는 수단으로 사용합니다.

일부 형태의 가려 짐 :

  1. 코드를 읽기 어렵고 이해하기 어렵도록 변수를 짧은 의미없는 이름으로 자동 이름 바꾸기
  2. 여분의 공백과 줄 바꿈을 모두 제거하면 코드가 하나의 긴 줄입니다.
  3. 코드의 첫 번째 패스가 실행되어 실제 코드가 생성되어 의도 한 작업을 수행하도록 실행되도록 코드의 일부를 자체 생성합니다.
  4. 일반적인 자바 스크립트 코드가 아닌 eval과 결합 된 문자 코드 및 문자열 조작을 사용하여 실행할 실제 코드를 구성합니다.

모호는 그 자체로는 사악한 것이 아니라 사악한 의도를 숨기려고 시도 할 수 있으며 이는 아마도 AVG가 반대하는 것입니다. 자바 스크립트가 막으려 고하는 것을 시도하고 있는지 알 수없는 너무 많은 모호함을 감지했습니다. 따라서 코드가 정상으로 보이는지 확인할 수 없으므로 기본적으로 코드를 안전하지 않은 것으로 선언했습니다.


그것이 내가 생각했지만 확인하고 싶었던 것입니다. 설명해 주셔서 감사합니다.
L84

AVG가 잘 알려진 평판이 좋은 웹 사이트에 대한 액세스를 차단하는 경우 해당 사이트를 무시할 수 있습니다. 사이트 담당자를 모르는 경우에는 제안하지 않습니다.
uSlackr

4
일부 사이트는 js 압축을 사용하므로 더 빨리로드 (대부분 모두), 코드가 난독 해 보일 것입니다.
jcubic

9
1그리고 2또한 자바 스크립트 압축기에 의해 수행된다. 컴프레서는 코드를 부작용으로 난독 처리하지만 주요 목적은 아닙니다. 주요 목적은 자바 스크립트를 더 작게 만들고 대역폭을 줄이는 것입니다.
BlueRaja-대니 Pflughoeft

5. 또한 빠른 다운로드를 위해 JS 파일을 압축하는 데 사용됩니다. 야후는 웹에 온 이후로이를 해왔으며 웹 애플리케이션을 만들기위한 구글 툴 (GMail, 캘린더 등)도이를 수행한다.
Chloe

13

난독 화란 의도 된 의미를 숨기는 것을 말합니다.

이 경우 명확하게 읽을 수있는 JavaScript 스 니펫 (예 :

window.onload = function() { alert("Hello " + username) };

에 의해 대체 될 수있다

var _0xc5b2=["\x6F\x6E\x6C\x6F\x61\x64",
        "\x48\x65\x6C\x6C\x6F\x20"];window[_0xc5b2[0]]=
    function (){alert(_0xc5b2[1]+username);} ;

또는

eval(unescape("var%20_0xc5b2%3D%5B%22onload%22%2C%22Hello%20%22%5D%3Bwindow"+
  "%5B_0xc5b2%5B0%5D%5D%3Dfunction%20%28%29%7Balert%28_0xc5b2%5B1%5D+username"+
  "%29%3B%7D%20%3B"));

세 개의 코드 스 니펫은 모두 똑같은 작업을 수행하지만 첫 번째 코드 만 읽으면 의도를 쉽게 이해할 수 있습니다.

분명히 AVG는 실행을 허용하기 전에 JavaScript 코드의 목적을 이해하려고 시도합니다. 코드가 난독 화되면 AVG가 실패 할 수 있습니다. 따라서 경고.

즉, 일부 웹 사이트는 악의적 인 의도 때문에 JavaScript를 난독 화하지 않고 작업을 도용하기 어렵게 만듭니다. 난독 화는 이러한 목적으로 사용되는 경우 일반적으로 쓸모가 없지만 요점은 난독 화가 반드시 나쁜 의도를 의미하지는 않는다는 것입니다.


3
내가 자주 찾은 것처럼, 난독 화 코드는 종종 도둑질 할 가치가없는 악의적 인 자바 스크립트를 숨 깁니다. 이것은 프로그래머가 적절한 프로그래밍 기술보다 도난에 대해 더 많은 시간을 소비하고, 난 독감을 제대로 얻지 못해 쉽게 금이 간다는 표시입니다. 코드를 실제로 다루기 어려워하는 데 시간을 투자 한 유일한 사람은 맬웨어 프로그래머뿐입니다. 따라서 AVG는 사이트를 피하는 것이 참 좋은 이유라고 경고합니다.
Fiasco Labs

2
AVG는 사람이 아니라 기계입니다. 분명히, 기계는 코드를 이해할 수 있습니다. 이것이 코드가 같은 일을하는 방식입니다. 또한 사람들은 서핑 할 때 일반적으로 자바 스크립트를 보지 않습니다. 이것은 단순히 "협회에 의한 죄책감"의 경우입니다. 위험한 일부 자바 스크립트는 특정 패턴의 난독 화를 사용합니다. 따라서 유사한 패턴을 가진 다른 Javascript가 의심됩니다.
Kaz

@Kaz : 이것은 단지 예일 뿐이지 만 JavaScript 엔진을 이해해야하는 더 복잡한 난독 화 방법이 있습니다. 맬웨어 스캐너는 일반적으로 성능상의 이유로 스크립트를 실행하는 대신 특정 패턴을 검색합니다.
Dennis

이론적으로 무가치하고 실제로 무가치하다는 것은 다르다. 이론적으로, 난독 화 코드는 쓸모없고 동의된다. 그러나, 난독 처리 비용이 새로운 코드를 생성하는 비용과 비슷하거나 (또는 ​​게으른 도둑을 막기 위해 비용이 충분히 높아지는 경우), 원치 않는 도난을 방지하기위한 난독 화가 유리할 수 있습니다.
Ronald

정확히, 문제가되는 것은 난독 화 자체 가 아니라 알려진 악성 코드와 코드의 유사성입니다.
Kaz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.