JavaScript를 난독 화 (보호)하려면 어떻게해야합니까? [닫은]


714

오픈 소스가 아닌 JavaScript 응용 프로그램을 만들고 싶기 때문에 JS 코드를 난독 화하는 방법을 배우고 싶습니다. 이것이 가능한가?


15
코드를 난독 화하려는 이유를 듣고 싶습니다. 유용한 답변을 제공하는 데 필요한 컨텍스트를 제공 할 수 있습니다.
JohnFx 2012 년

45
비밀을 지키는 유일한 방법 은 클라이언트에게 보내지 않는 것 입니다. 그들이 없으면 읽을 수 없습니다. 암호화를 보내는 것은 실제로 관심을 가진 소수의 사람들에게 문제를 요구하고 있으며 다른 사람은 분명하게 보내더라도 찌르지 않을 것입니다 (cfm DRM).
Donal Fellows


8
코드를 난독 처리 하는 것은 좋은 생각이 아닙니다. 합법적 인 사용자 (예 : 버그 수정이 필요한 경우)에만 불편을 주며 리버스 엔지니어링에 대한 인센티브가있는 사람들로부터 버그를 '보호'하기 위해 아무 조치도 취하지 않습니다. 이다 근본적으로 불가능 자바 스크립트 코드의 리버스 엔지니어링을 방지하기 위해.
Sven Slootweg

14
난독 화하지 않는 주장은 나에게 결함이있는 것 같습니다. 사용자가 버그를 수정 /보고 할 수 있다고 생각하지 않는 한 그렇게해야합니다. 축소하여로드 시간을 줄일 수 있습니다. 실제로 전용 해커를 중지 시키지는 않지만 속도를 늦추고 절반으로 반격 된 해킹 시도를 중지합니다. 수행하기가 쉽고 많은 도구가 있습니다 (다른 답변 참조). 대부분의 이점 만 있지만 확실히 보안을 유지하거나 누군가가 코드를 복사하는 것을 막을 것이라고 기대하지는 않습니다. 그들이 정말로 원한다면. 이를 수행하는 유일한 방법은 코드 서버 측을 유지하고 ajax를 사용하는 것입니다.
Benjamin

답변:


405

난처:

YUI 압축기를 사용해보십시오 . Yahoo UI 팀이 개발, 개선 및 유지 관리하는 매우 인기있는 도구입니다.

다음을 사용할 수도 있습니다.

업데이트 :이 질문은 원래 10 년 이상 전에 요청되었으며 YUI는 더 이상 유지되지 않습니다. Google Closure Compiler는 여전히 사용 중이며 노드 패키지 관리자를 통해 UglifyJS를 로컬로 실행할 수 있습니다.npm install -g uglify-js

개인 문자열 데이터 :

문자열 값을 비공개로 유지하는 것은 다른 관심사이며 난독 화는 실제로 큰 도움이되지 않습니다. 물론 소스를 깨져서 최소화 된 엉망으로 패키징하면 모호함을 통해 가벼운 보안 버전을 얻을 수 있습니다 됩니다. 대부분의 경우 소스를 보는 것은 사용자이며 클라이언트의 문자열 값은 사용 목적이므로 개인 문자열 값이 필요하지 않은 경우가 많습니다.

사용자가보고 싶지 않은 값을 실제로 가지고 있다면 몇 가지 옵션이 있습니다. 먼저 페이지로드시 해독되는 일종의 암호화를 수행 할 수 있습니다. 그것은 아마도 가장 안전한 옵션 중 하나 일뿐 만 아니라 불필요한 많은 작업 일 것입니다. 아마도 일부 문자열 값을 base64로 인코딩 할 수 있으며 더 쉬울 것입니다. 그러나 실제로 해당 문자열 값을 원하는 사람은 쉽게 해독 할있습니다 . 암호화는 모든 사람이 데이터에 액세스하지 못하도록 막는 유일한 방법이며, 대부분의 사람들은 필요 이상으로 보안을 강화합니다.

사이드 노트 :

Javascript의 난독 화는 일부 버그를 일으키는 것으로 알려져 있습니다. 난 독자 들은 그것에 대해 조금 더 나아지고 있지만, 많은 복장들은 그들이 축소 하고 찌그러 뜨리는 것으로 부터 충분한 이익을 볼 것이라고 결정하고 , 난독 화의 추가 절약이 항상 문제의 가치가있는 것은 아닙니다 . 소스를 보호하려는 경우 코드를 읽기 어렵게 만드는 것이 가치가 있다고 판단 할 수 있습니다. JSMin 은 좋은 대안입니다.


32
base64 인코딩을 수행하는 것은 사소한 되돌릴 수있는 절차이기 때문에 보안에 도움이되지 않는다고 덧붙이고 싶습니다. 클라이언트 측에서 암호를 해독하면 암호화해도 도움이되지 않습니다. 문자열의 보안을 보장하는 유일한 방법은 클라이언트에게 암호화 된 문자열 만 보도록하는 것입니다.
Claudiu

16
추가 처리를위한 서버.
Claudiu

9
참고로, 온라인 YUI 압축기는 여기에서 찾을 수 있습니다 : refresh-sf.com/yui
mtness

7
문자열 값을 암호화하면 브라우저에서 암호 값을 사용하여 해독해야하는 경우 base64 인코딩보다 약간 더 유리합니다. 그 이유는 브라우저에 암호화 키를 제공해야하며 브라우저가 사용자에게 할 수있는 모든 작업도 수행해야하기 때문입니다.
Ben

9
YUI Compressor로 축소 작업을 수행 할 때 "안전한"축소 방법을 사용해야합니다. 즉 세미콜론을 유지합니다 --preserve-semi. 개인 변수를 a, b, c 등으로 다시 쓰는 것이 일반적으로 안전합니다. 내가하는 또 다른 일은 코드에서 각 세미콜론 다음에 축소 기가 줄 바꿈을하도록하는 것입니다 --line-break 0. 그런 다음 프로덕션에서 오류가 발생하면 작업 할 수있는 유효한 참조 줄이 없으며 개발 사본에서 해당 코드를 찾을 수 있습니다. 그렇지 않으면 방대한 코드 줄에 오류가 발생하고 오류의 위치를 ​​알 수 없습니다.
zuallauz '15

136

구글 클로저 컴파일러에 대해 언급 한 사람이 아무도 없다 . 축소 / 압축뿐만 아니라 사용되지 않는 코드를 찾아 제거하기 위해 분석하고 최대 축소를 위해 다시 작성합니다. 또한 유형 검사를 수행 할 수 있으며 구문 오류에 대해 경고합니다.

JQuery는 최근 YUI Compresser에서 Closure Compiler로 전환하여 "고급 개선 "


60
예, 그러나 최근에는 Closure 컴파일러를 떠나 현재 UglifyJS를 사용하고 있습니다. JQuery 코드는 클로저 컴파일러로 압축 한 후 버그가 발생했습니다
Chielus

각도로 작업하는 경우 참고하고 싶습니다. 확인할 수없는 확인란이 없으면 종속성 삽입 및 인수 이름 바꾸기 때문에이 도구가 실제로 작동하지 않습니다.
iConnor

1
유용한 도구이지만 난독 처리를하지 않으므로 다른 사람이 언급하지 않은 이유 일 수 있습니다.
Madbreaks

1
@Advanced Optimizations ( developers.google.com/closure/compiler/docs/api-tutorial3 )를 사용하면 코드가 난독 화 지점으로 축소됩니다 . 예를 들어 변수 이름은 간결하게하기 위해 이름을 바꿀 수 있습니다.
Jason Hall

구글은 보안을위한 옵션도 아닙니다
Fillipo Sniper

121

난독 화는 실제로 작동하지 않습니다. 실제로 코드를 얻고 싶은 사람이라면 속도가 빨라집니다. 더 나쁜 것은 사용자가 버그를 수정하지 못하도록하고 수정 사항을 사용자에게 다시 전달하지 못하게하며 현장의 문제를 진단하기 어렵게 만듭니다. 시간과 돈을 낭비합니다.

지적 재산권 법과 귀하의 법적 선택에 대해 변호사와 상담하십시오. "오픈 소스" 는 "사람이 소스를 읽을 수 있음"을 의미하지 않습니다. 대신 오픈 소스는 코드를 자유롭게 사용하고 수정할 수있는 권한을 부여하는 특정 라이센스 모델입니다. 그러한 라이센스를 부여하지 않으면 코드를 복사하는 사람들이 위반되며 (대부분의 경우) 라이센스를 중지 할 수있는 법적 옵션이 있습니다.

코드를 실제로 보호 할 수있는 유일한 방법은 코드를 제공하지 않는 것입니다. 중요한 코드를 서버 측으로 옮기고 공개 Javascript 코드가 Ajax를 호출하도록하십시오.

난 독자에 대한 내 답변은 여기를 참조하십시오.


14
변호사에 +1하지만 다른 국가 / 관할 지역에서는 작동하지 않을 수 있습니다.
jmort253

16
변호사는 아마도 코드를 잃어버린 것보다 더 많은 비용 / 문제를 야기 할 수 있으며, 신중하게 생각하고 변호사를 참여시키기 위해 많은 돈을 마련해야합니다 !!
andora

11
-1 : JavaScript를 이해하는 변호사를 찾는 것이 어려울 것이라고 생각합니다. "위반자"를 찾는 데 필요한 비용과 시간은 말할 것도 없습니다. 누군가 서명하지 않은 경우 HTML / 자바 스크립트 파일에 묻힌 라이센스를 실제로 위반할 수 있습니까? AJAX 통화의 경우 +1
Alerty

12
@Alerty 1) 라이센스는 기본적 으로 저작권이있는 자료의 사용을 허가 하는 것입니다. 라이센스없이 사용할 권리가 거의 없습니다. 권리를 얻기 위해 서명 할 필요는 없습니다. 라이센스는 계약과 다릅니다. 2a) HTML / Javascript를 무단으로 복사하여 사용하는 사람들에 대한 질문이므로 라이센스는 "매장"되어 있지 않으며, 현재 사용중인 것이 있습니다. 2b) 귀하는 라이센스없이 다른 사람의 저작권이있는 자료를 사용할 권리가 없습니다. 3) 변호사는 단지 지적 재산권 법인 Javascript를 이해할 필요가 없습니다.
Schwern

4
@Alerty 방해하지 마십시오. 이것은 허가없이 자신의 사이트에서 사용하기 위해 파일을 복사하는 사람들을 처벌하는 것입니다. 당신이 말하는 것은 라이센스가 아닌 계약입니다. 계약은 상호 동의가 필요하며주고받는 것입니다. 라이센스는 귀하에게 지적 재산을 사용할 권리를 부여합니다. 라이센스는 일방 통행 (소유자가 제공하는 것)이며, 귀하가 아무 것도주지 않기 때문에 서명 할 필요가 없습니다. 많은 "소프트웨어 라이센스 계약 (Software License Agreements)"은 실제로 라이센스 계약을 넘어서 고소 할 권리와 같은 어리석은 일을하기 때문에 실제로 계약입니다.
Schwern

49

당신이 원하는 모든 자바 스크립트 소스를 난독 화 할 수 있지만 클라이언트 시스템에서 실제로 모든 소스 코드를 실행해야하기 때문에 항상 리버스 엔지니어링 할 수 있습니다 ... 내가 생각할 수있는 가장 좋은 옵션은 모든 처리를 완료하는 것입니다. 서버 측 코드와 함께 자바 스크립트가 수행하는 모든 클라이언트 코드는 서버 자체에 처리 요청을 보냅니다. 그렇지 않으면 누구나 코드가 수행하는 모든 작업을 항상 추적 할 수 있습니다.

누군가 문자열을 안전하게 유지하기 위해 base64를 언급했습니다. 이것은 끔찍한 생각입니다. Base64는 코드를 리버스 엔지니어링하려는 사람들이 즉시 인식 할 수 있습니다. 그들이 할 첫 번째 일은 인코딩을 풀고 그것이 무엇인지 확인하는 것입니다.


45
어디를 가든지 "자바 스크립트를 난독 화하는 방법"에 대한 가장 일반적인 대답은 "누군가 모호하지 않기 때문에 걱정할 필요가 없습니다." 이것은 실제로 답이 아닙니다.
트래비스 윌슨

2
@Vivek : 조금 늦었지만 실제로 의미하는 것은 "서버 측 코드"입니다. 브라우저가 아닌 서버에서만 자바 스크립트를 실행할 수는 있지만 그게 얼마나 일반적인지 모르겠습니다.
Claudiu

8
@Travis : "걱정해서는 안된다"고 말하지 않았습니다. 나는 폐쇄 소스 프로그램을 원한다면 클라이언트 측 자바 스크립트로 작성하고 싶지 않을 것이라고 말했다.
Claudiu

8
권리. "어떻게 JavaScript를 난독화할 수 있습니까?" 난독 화는 추상적 인 개념이 아니라 기술적 인 개념입니다. 작전은 단순히 "어떻게?"
Madbreaks

2
@Madbreaks : 문제는 그의 코드를 오픈 소스로 만들지 않는 것이 었습니다. 즉각적인 기술적 답변이 받아 들여지지 만 상황에 맞는 더 나은 답변 (실제로 무엇을하려고합니까?)은 오픈 소스가 아닌 클라이언트 측 자바 스크립트를 가질 수 없다는 IMO입니다. 난독 화 방법에 관계없이 모든 사람이 소스를 가지고 있습니다. 어느 쪽이든 두 가지 답변이 모두 있으며 사람들은 두 가지 모두를 읽고 혜택을 볼 수 있습니다.
Claudiu

45

자유롭게 사용할 수있는 많은 JavaScript 난독 화 도구가 있습니다. 그러나 JavaScript를 역 엔지니어링 할 수없는 수준으로 난독 처리하기가 어렵다는 점에 유의해야한다고 생각합니다.

이를 위해 어느 정도 초과 근무 시간에 사용했던 몇 가지 옵션이 있습니다.

  • 유이 압축기 . Yahoo!의 JavaScript 압축기는로드 시간을 향상시키는 코드를 잘 압축합니다. 비교적 잘 작동하는 작은 난독 화 수준이 있습니다. 본질적으로 Compressor는 함수 이름을 변경하고 공백을 제거하며 지역 변수를 수정합니다. 이것이 내가 가장 자주 사용하는 것입니다. 이것은 오픈 소스 Java 기반 도구입니다.

  • JSMin 은 Douglas Crockford가 작성한 도구로 JavaScript 소스를 축소하려고합니다. 크록 포드 자신의 말에 따르면, "JSMin은 난독하지 않지만 어설프게 나타납니다." 기본 목표는 브라우저에서 더 빠르게로드 할 수 있도록 소스 크기를 최소화하는 것입니다.

  • 무료 JavaScript Obfuscator . 이것은 실제로 코드를 인코딩하여 코드를 난독 처리하려는 웹 기반 도구입니다. 인코딩 방식 (혹은 난독 화)의 형태에 대한 절충은 파일 화 비용을 초래할 수 있다고 생각합니다. 그러나 그것은 개인적인 취향의 문제입니다.


19
Javascript 코드는 클라이언트 시스템에서 실행되어야하므로 코드를 리버스 엔지니어링 할 수 없지만 불가능한 지점까지 난독 처리하기는 어렵습니다 .
Schwern

20
통계에 관한 것입니다. 난독 화와 무단으로 누군가 코드에 액세스 할 수있는 임계 값은 얼마입니까? 여전히 액세스 권한을 얻을 수 있지만 임계 값이 높을수록 사람이 줄어 듭니다. 더 적은 사람들이 무언가에 대해 알고 더 안전합니다. 표준 보안 분류 실습.
Cris Stringfellow

1
텍스트 편집기에서 @PeterR 검색 / 대체는 삶을 읽거나 리버스 엔지니어링하는 것을 훨씬 어렵게 만듭니다. 완벽하지는 않지만 컨텍스트 단서를 제거하여 성가심 / 어려움을 추가합니다. 대부분의 프로그래머는 당신만큼 똑똑하지 않아서 이것이 훌륭한 억제책이됩니다.
SED

1
@ SED 나는 [ZER0O00OIFY, ZER0000OIFY, ZEROO00OIFY, ZEROOO0OIFY]적어도 [var1, var2,..]1 분 안에 여러 가지를 찾을 수 없거나 교체 할 수없는 단일 프로그래머를 모른다 . 문자 그대로 2 분 안에 var 이름을 제거하고, 들여 쓰기하고, var 이름을 검색 / 대체 할 수 있습니다. 그리고 아뇨, 저는 평균적인 Jr. Dev보다 똑똑합니다. 간단한 사실은 클라이언트 쪽 JS를 가리는 방법이 없다는 것입니다. 최대 5 분만 구매할 수 있지만 소용이 없습니다. 이 항목은 실제로 추가 된 "보안"에 대한 코드를 모르는 사람을 판매하기위한 것입니다. JS 라인을 작성한 사람은 그 쓰레기를 사지 않을 것입니다.
피터 R

3
@PeterR "2 분 이내에 문자 그대로 탈퇴, 재 들여 쓰기 및 var 이름 검색 / 바꾸기" 를 수행 할 수 있습니다. 원래의 주석이 달린 소스 코드로도 이해할 수 있습니다. 더 어렵게 만들기 위해 들여 쓰기, 줄 등이 변경 될 때 의도적으로 코드를 손상시키는 난독 화 도구가 존재합니다.
John Weisz

23

내가 할 것 :

A. 해커를 트롤하십시오!

이것은 두 번째 부분에서 가짜 / 난독 화 된 비밀 자바 스크립트 코드 런처입니다. 소스 코드에서 볼 수있는 것.

이 코드는 무엇입니까?

  1. 실제 코드를로드
  2. 사용자 정의 헤더를 설정합니다
  3. 맞춤 변수를 게시

var ajax=function(a,b,d,c,e,f){
 e=new FormData();
 for(f in d){e.append(f,d[f]);};
 c=new XMLHttpRequest();
 c.open('POST',a);
 c.setRequestHeader("Troll1","lol");
 c.onload=b;
 c.send(e);
};
window.onload=function(){
 ajax('Troll.php',function(){
  (new Function(atob(this.response)))()
 },{'Troll2':'lol'});
}

B. 코드를 약간 난독 처리

그게 뭐야?

  1. base64에서와 동일한 코드입니다.
  2. 이것은 SECRET 자바 스크립트 코드가 아닙니다.

(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()

C 실제 코드를 사용하여 PHP 파일을 표시하기 어렵게 만듭니다.

이 PHP 코드는 무엇입니까?

  1. 올바른 리퍼러를 확인합니다 (실행기의 도메인 / 디렉토리 / 코드)
  2. 커스텀 HEADER 확인
  3. 사용자 정의 POST 변수를 확인합니다

모든 것이 정상이라면 올바른 코드를 표시하거나 가짜 코드 또는 IP 금지를 표시합니다. 페이지를 닫으십시오.

<?php
$t1=apache_request_headers();
if(base64_encode($_SERVER['HTTP_REFERER'])=='aHR0cDovL2hlcmUuaXMvbXkvbGF1bmNoZXIuaHRtbA=='&&$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){
 echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';//here is the SECRET javascript code
}else{
 echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';
};
?>

base64 리퍼러 = http://here.is/my/launcher.html

비밀 자바 스크립트 = document.body.appendChild(document.createElement('div')).innerText='Awesome';

가짜 = window.open('', '_self', '');window.close();

이제 .. SECRET 자바 스크립트에서 이벤트 핸들러를 정의하는 경우 아마도 액세스 할 수 있습니다. 시작 코드를 사용하여 외부에서 중첩 된 SECRET 함수를 가리켜 서 정의해야합니다.

그래서 ... 코드를 얻는 쉬운 방법이 있습니까? document.body.appendChild(document.createElement('div')).innerText='Awesome';

이것이 작동하는지 확실하지 않지만 크롬을 사용하고 요소, 리소스, 네트워크, 소스, 타임 라인, 프로필, 감사를 사용하고 있지만 위의 줄을 찾지 못했습니다.

참고 1 : Inspect element-> network에서 Troll.php URL을 크롬으로 열면 가짜 코드가 표시됩니다.

참고 2 : 전체 코드는 최신 브라우저 용으로 작성되었습니다. polyfill에는 더 많은 코드가 필요합니다.

편집하다

launcher.html

<!doctype html><html><head><meta charset="utf-8"><title></title><script src="data:application/javascript;base64,KG5ldyBGdW5jdGlvbihhdG9iKCdkbUZ5SUdGcVlYZzlablZ1WTNScGIyNG9ZU3hpTEdRc1l5eGxMR1lwZTJVOWJtVjNJRVp2Y20xRVlYUmhLQ2s3Wm05eUtHWWdhVzRnWkNsN1pTNWhjSEJsYm1Rb1ppeGtXMlpkS1R0OU8yTTlibVYzSUZoTlRFaDBkSEJTWlhGMVpYTjBLQ2s3WXk1dmNHVnVLQ2RRVDFOVUp5eGhLVHRqTG5ObGRGSmxjWFZsYzNSSVpXRmtaWElvSWxSeWIyeHNNU0lzSW14dmJDSXBPMk11YjI1c2IyRmtQV0k3WXk1elpXNWtLR1VwTzMwN2QybHVaRzkzTG05dWJHOWhaRDFtZFc1amRHbHZiaWdwZTJGcVlYZ29KMVJ5YjJ4c0xuQm9jQ2NzWm5WdVkzUnBiMjRvS1hzZ0tHNWxkeUJHZFc1amRHbHZiaWhoZEc5aUtIUm9hWE11Y21WemNHOXVjMlVwS1Nrb0tYMHNleWRVY205c2JESW5PaWRzYjJ3bmZTazdmUT09JykpKSgp"></script></head><body></body></html>

트롤 .php

<?php $t1=apache_request_headers();if(/*base64_encode($_SERVER['HTTP_REFERER'])=='PUT THE LAUNCHER REFERER HERE'&&*/$_POST['Troll2']=='lol'&&$t1['Troll1']='lol'){echo 'ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSkuaW5uZXJUZXh0PSdBd2Vzb21lJzsNCg==';}else{echo 'd2luZG93Lm9wZW4oJycsICdfc2VsZicsICcnKTt3aW5kb3cuY2xvc2UoKTs=';}; ?>

1
아 그리고 그래, 나는 또한 자바 스크립트 코드를 난독화할 것이다.
cocco

1
크래커를 트롤링하는 것입니다. PHP를 사용하지 않고도 이와 같은 것을보고 싶습니다 :)
pgarciacamou

6
이것이 재밌더라도 사이트를 제대로 검사 할 수있는 웹 개발자는 어떻게 든 소스 코드를 얻을 수 있습니다. 실제로 온라인에 넣은 순간에 모든 유형의 데이터를 숨길 방법이 없다고 생각합니다.
cocco 2016 년

내가 생각하는 난독 화의 종류가 아닙니다. 그러나 콘솔을 여는 방법을 알고 있으며 base64 인코딩 / 디코딩에 대해서도 매우 간단합니다.
T.Todua

19

JScrambler을 사용해보십시오 . 나는 최근에 그것을 스핀하고 그것에 감동했다. 세부 정보에 신경 쓰지 않고 신속하게 처리하려는 사람들을 위해 사전 정의 된 설정으로 난독 처리를위한 템플릿 세트를 제공합니다. 원하는 변환 / 기술을 선택하여 사용자 정의 난독 화를 생성 할 수도 있습니다.


7
JScrambler 구독은 매우 비쌉니다. 가장 저렴한 구독에는 최소 3 개월 가격 $ 145가 필요합니다.
barbushin

1
그들은 이제 무료 플랜을 가지고 있습니다. 다른 가입 계획은 여전히 ​​그 비싸다.
user7610

2
무료 플랜에는 최적화 및 축소 만 포함됩니다.
Jean Hominal

1
'무료 계획에는 최적화와 축소가 포함됩니다.' 난독 화와 최적화는 함께 진행되지 않습니다. 죄송합니다.
NiCk Newman

2
오늘 JScrambler의 웹 사이트와 더 많은 가격 계획을 보면 무료 옵션을 볼 수 없습니다. 무료 평가판 만 ..
KDT

18

인터프리터 언어의 문제점은 소스를 전송하여 소스 코드를 작동시키는 것입니다 (컴파일러가 바이트 코드로 작성되지 않은 한 다시 디 컴파일하는 것은 쉽지 않습니다).

따라서 성능을 희생하지 않으려면 예를 들어 변수 및 함수 이름에 대해서만 작업 할 수 있습니다. 그것들을 a, b ... aa, ab ... 또는 a101, a102 등으로 교체하십시오. 물론, 가능한 많은 공간 / 개행을 제거하십시오 (JS 압축기라고하는 것).
난독 화 문자열은 실시간으로 암호화하고 해독해야하는 경우 성능이 저하됩니다. 또한 JS 디버거는 최종 값을 표시 할 수 있습니다 ...


17

YUI Compressor에 대해 제안하는 다른 답변 대부분과는 반대로; Google Closure 를 사용해야합니다 .

압축률이 높지 않기 때문에 a = [1,2,3,];IE를 haywire로 만드는 것과 같은 자바 스크립트 오류를 ​​잡을 수 있기 때문입니다 .


5
오류에 대한 코드를 확인 안되며, 어느 쪽이든 할 수 호환성 전에 난독을 ?? 실제로 난독 화와는 아무 관련이 없습니다
phil294

13

오픈 소스가 아닌 Javascript 기반 응용 프로그램은 매우 어리 석습니다. 자바 스크립트는 클라이언트 측에서 해석되는 언어입니다. 난독 화는 그다지 보호되지 않습니다.

JS 난독 화는 일반적으로 "보호"하는 대신 스크립트의 크기를 줄이기 위해 수행됩니다. 코드를 공개하지 않으려는 경우 Javascript가 올바른 언어가 아닙니다.

도구가 많이 있지만 대부분의 이유로 이름에 "compressor"(또는 "minifier")라는 단어가 있습니다.


11

클라이언트 측 코드를 보호 할 수 없습니다. Chrome에서 F12 키를 누르고 자바 스크립트 실행을 일시 중지 하면 모든 문자열, 심지어 암호화 된 문자열을 얻게됩니다. 그것을 아름답게 하고 변수의 이름을 바꾸면 거의 원래 코드를 얻을 수 있습니다.

서버 측 자바 스크립트 (예 : NodeJS)를 작성하는 사람이 누군가 서버에 해킹하는 것을 두려워하고 해커의 작업을 더 어렵게 만들고 다시 액세스 할 수있는 시간을 더 준다면 javacript 컴파일러 를 사용 하십시오 .

모든 파일 / 모듈에서 변수를 사용하는 경우에도 모든 변수의 이름을 바꾸는 유일한 도구이므로 고급 컴파일에서 폐쇄 컴파일러를 사용해야합니다. 그러나 그것은 단지 문제가 있습니다 : 그것은 당신이 코딩 스타일로 쓰는 경우에만 작동합니다 .


폐쇄 컴파일은 코드를 난독 화하지 않습니다 : P
NiCk Newman

1
그것은 그것을 위해 만들어지지는 않았지만 잘 작동합니다 : 일부 컴파일러와 같은 추가 코드를 추가하지 않지만 (일반적으로 내가 인용 한 도구와 반대로 바꿀 수 있음) 일반적인 방법으로 변경하고 실행 취소하기가 어렵고 사용하지 않는 일부를 제거합니다 실제 난독 화와 비교하여 성능에 좋은 코드입니다.
구스타보 로드리게스

1
좋은 생각이 아닙니다. 축소 프로그램에 버그가있는 경우 축소 / 컴파일 코드 서버 측에서 보안 문제가 발생할 수 있습니다. zyan.scripts.mit.edu/blog/backdooring-js
mgol

인용 한 버그는 UglifyJS에만 적용되며 클로저 컴파일러에는 적용되지 않습니다.
구스타보 로드리게스

자바 스크립트 파일 축소에 관심이있는 모든 사람들을 위해 자바 스크립트 un-minifier도 있습니다. 그래서 저는 이것이 보안 계층이라고 생각하지 않습니다
Fillipo Sniper

11

JavaScript Utility를 추천 할 수 있습니다Patrick J. O'Neil의 를 . 난독 화 / 압축 및 압축 할 수 있으며 이것에 꽤 좋은 것 같습니다. 즉, 나는 그것을 어떤 종류의 빌드 스크립트로 통합하려고 시도하지 않았습니다.

난독 화 대 축소-나는 전직 팬이 아닙니다. 디버깅이 불가능합니다 (1 행의 오류 ... "한 줄만 있습니다"). 항상 압축을 풀 때 시간이 걸립니다. 하지만 필요한 경우 ...


1
그러나 난독 처리가 반드시 한 줄로 압축하는 것은 아니며 함수 및 변수 이름을 변경하거나 문자열을 base64로 변환하는 것처럼 간단 할 수 있습니다. 축소는 모든 코드를 한 줄에 넣습니다.
rw-nandemo

요즘 UglifyJS가 최선의 선택 인 것 같습니다. 저자도 멋진 사람입니다! :)
Tsvetomir Tsonev

디버깅과 관련하여 대부분 테스트 할 때 포함 할 수있는 소스 맵을 생성 할 수 있으므로 오류가 발생한 줄을 최소화하더라도 오류가 발생한 줄을 확인할 수 있습니다.
Luca Steeb

5

먼저 YUI Compressor와 같은 것으로 축소하고 http://www.javascriptobfuscator.com/ 과 같은 것을 사용하여 모든 문자열과 숫자를 16 진수 값으로 변환하는 것이 좋습니다 .

이를 통해 코드를 이해하기가 거의 불가능 해지며이 단계에서 해커가 코드를 처음부터 다시 작성하는 것보다 실제로 코드를 다시 작성하는 데 시간이 더 걸릴 것으로 생각합니다. 재 작성 및 복제는 실제로 멈출 수없는 것입니다. 결국 우리는 자유인입니다!



4

일부 기업 (예 : JackBe)은 암호화 된 JavaScript 코드를 JS 파일이 아닌 * .gif 파일에 추가하여 난독 화의 추가 수단으로 사용하고 있다는 인상을 받고 있습니다.


4

이 도구를 사용해보십시오 JavaScript Obfuscator

HTML5 게임에서 크기를 950KB에서 150으로 줄 였을뿐만 아니라 소스 코드를 읽을 수없는 클로저 컴파일러와 축소 장치를 뒤집을 수있게 만들었습니다.이 난독 화를 뒤집는 방법을 개인적으로 모른다.


4

나는 Jasob 을 몇 년 동안 사용해 왔으며 최고의 난 독자 입니다.
고급 UI가 있지만 여전히 직관적이며 사용하기 쉽습니다.
HTML 및 CSS 파일도 처리합니다.

그것을 사용하는 가장 좋은 방법은 모든 개인 변수 앞에 밑줄과 같은 접두어를 붙인 다음이 sort기능을 사용하여 모두 그룹화하고 난독 화 대상으로 확인 하는 것입니다.

사용자는 여전히 소스를 볼 수 있지만 개인 변수가 같은에서 변환 될 때 그것은 암호문 해독에 훨씬 더 어려운 일 _sUserPreferredNickNamea.

엔진은 대상 변수의 수를 자동으로 집계하여 최대 압축을 얻기 위해 우선 순위를 정합니다.

나는 Jasob에서 일하지 않고 그들을 홍보하는 것에서 아무 것도 얻지 못하고 친절한 조언을 제공합니다.
단점은 무료가 아니며 약간 비싸지 만 대안과 비교할 때 여전히 가치가 있다는 것입니다. '무료'옵션은 가깝지 않습니다.


Jason은 난독 화 장치보다 축소 기 역할을합니다. 뭔가 빠졌습니까?
Alan McBee-MSFT


4

Java 스크립트 난독 처리를 위해 Closure-Compiler 유틸리티를 사용하고 있습니다. 코드를 축소하고 난독 처리를위한 더 많은 옵션이 있습니다. 이 유틸리티는 아래 URL의 Google 코드에서 사용할 수 있습니다.
폐쇄 도구

그러나 지금 나는 UglifyJS에 대해 많이 듣고 있습니다. Uglify가 승자로 보이는 Closure Compiler와 UglifyJS의 다양한 비교를 찾을 수 있습니다.
UglifyJS : 폐쇄와 동등한 Node.js를위한 새로운 JavaScript 압축기

곧 나는 UglifyJS에 기회를 줄 것이다.



3

이것은 축소 하지만 난독 화하지는 않습니다. 명령 행 Java를 사용하지 않으려면 Javascript를 웹 양식에 붙여 넣을 수 있습니다.


1
참고 : 링크가 이제 종료되었습니다.
Scott C Wilson

1
@ ScottWilson 감사합니다, 업데이트
크리스 S

2

Obfuscriptor를 살펴보십시오. .

YUI Compressor 또는 Google Closure 와 같은 다른 도구에서 본 일반적인 Javascript 축소 트릭을 뛰어 넘습니다. .

난독 처리 된 코드는 암호화 된 것처럼 보입니다. 내가 전에 본 것과는 다릅니다.


링크 주셔서 감사합니다! 난독 처리기와 코드를 실제로 시도했지만 키가 없었습니까 ??? 스크립트를 211에서 36Kb로 압축했습니다!

Obfuscriptor는 IE에서 작동하지 않음을 경고합니다. 그것은 일부의 거래 차단기입니다.
Alan McBee-MSFT

1
답변의 링크가 더 이상 도구를 가리 키지 않습니다. 나는 그것에 대한 또 다른 라이브 참조를 찾지 못했습니다.
buzoherbert

첫 번째 링크는 죽었습니다. "Obfuscriptor"
Alp Altunel

2

JavaScript 라이브러리를 사용하는 경우 클로저 컴파일러의 고급 모드 컴파일과 호환되는 (조금 수정 후) Dojo 툴킷을 고려하십시오.

Dojo – 클로저 컴파일러와 호환되는 유일한 JavaScript 라이브러리

전체 코드베이스 (라이브러리 포함)가 난독 화 되어 클로저 고급 모드로 컴파일 된 코드는 리버스 엔지니어링하기가 거의 불가능합니다 . 평균 25 %도 작습니다.

단순히 축소 된 JavaScript 코드 (YUI Compressor, Uglify 등)는 미화기를 통과 한 후 리버스 엔지니어링하기 쉽습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.