JavaScript를 난독화(보호)하려면 어떻게 해야 합니까?
오픈소스가 아닌 JavaScript 어플리케이션을 만들고 싶기 때문에 JS 코드를 난독화하는 방법을 배우고 싶습니다.이게 가능합니까?
난독화:
해라YUI 컴프레서이것은 매우 인기 있는 도구이며, 야후 UI 팀에 의해 구축되고, 강화되고, 유지 보수됩니다.
다음 항목도 사용할 수 있습니다.
UPDATE: This question was originally asked on 2008, and The mentioned technologies are deprecated. you can use:
개인 문자열 데이터:
문자열 값을 비공개로 유지하는 것은 다른 문제이며 난독화는 그다지 도움이 되지 않습니다.물론 소스를 왜곡되고 최소화된 혼란으로 패키지화함으로써 무명화를 통한 가벼운 보안 버전을 얻을 수 있습니다.대부분의 경우 소스를 표시하는 것은 사용자이며 클라이언트의 문자열 값은 이러한 값을 사용하기 위한 것이므로 이러한 종류의 개인 문자열 값은 필요하지 않습니다.
사용자에게 보여주고 싶지 않은 값이 실제로 있다면 몇 가지 옵션이 있습니다.우선 페이지 로드 시 복호화되는 일종의 암호화를 수행할 수 있습니다.그것은 아마도 가장 안전한 옵션 중 하나일 것입니다만, 많은 작업이 필요 없을 수도 있습니다.몇 가지 문자열 값을 base64로 인코딩할 수 있습니다.그게 더 쉬울 거예요하지만 그 문자열 값을 정말 원하는 사람은 쉽게 해독할 수 있어요암호화는 다른 사람이 데이터에 액세스하는 것을 진정으로 막는 유일한 방법이며, 대부분의 사람들은 암호화가 필요한 것보다 더 안전하다고 생각합니다.
사이드노트:
Javascript의 난독화로 인해 버그가 발생하는 것으로 알려져 있습니다.난독화기는 조금씩 개선되고 있지만, 많은 의상들은 최소화와 지핑으로 충분한 이점을 얻을 수 있다고 판단하고 난독화를 통한 추가 절감은 항상 수고할 가치가 있는 것은 아니다.소스를 보호하려면 코드를 읽기 어렵게 하기 위해 시간을 들일 가치가 있다고 판단해야 합니다.JSMin이 좋은 대안입니다.
아무도 구글의 클로즈 컴파일러에 대해 언급하지 않았다니 놀랍다.이 기능은 단순히 최소화/압축하는 것이 아니라 분석하여 사용하지 않는 코드를 찾아 제거하고 최대화를 위해 다시 씁니다.또한 유형 검사를 수행할 수 있으며 구문 오류에 대해 경고합니다.
JQuery는 최근 YUI Compresser에서 Closure Compiler로 전환하여 "확실히 개선"되었습니다.
난독화는 절대 효과가 없다.당신의 코드를 정말 알고 싶은 사람은 과속방지턱에 불과합니다.게다가 유저가 버그를 수정(및 수정을 반송)할 수 없게 되어, 현장에서 문제를 진단하는 것이 어려워집니다.그것은 당신의 시간과 돈을 낭비하는 것이다.
지적재산권법 및 법적 선택권에 대해서는 변호사와 상담하십시오."오픈 소스"는 "사람들이 소스를 읽을 수 있다"는 뜻이 아닙니다.대신 오픈소스는 코드를 자유롭게 사용하고 수정할 수 있는 권한을 부여하는 특정 라이센스 모델입니다.이러한 라이선스를 부여하지 않으면 코드를 복사하는 사람은 위반이 되며 (대부분의 경우) 이를 정지할 수 있는 법적 옵션이 있습니다.
코드를 보호할 수 있는 유일한 방법은 발송하지 않는 것입니다.중요한 코드를 서버 측으로 이동하여 공용 Javascript 코드로 Ajax 호출을 수행합니다.
javascript 소스를 원하는 만큼 난독화할 수 있지만, 클라이언트 머신에서 실제로 모든 소스 코드를 실행해야 하기 때문에 항상 리버스 엔지니어링이 가능합니다.제가 생각할 수 있는 최선의 옵션은 서버측 코드로 모든 처리를 하는 것이며, 자바스크립트 클라이언트 코드는 서버 자체에 처리 요청을 보내는 것입니다.그렇지 않으면 누구나 항상 코드가 수행하는 모든 작업을 추적할 수 있습니다.
누군가 끈을 안전하게 유지하기 위해 베이스64를 언급했어요이건 끔찍한 생각이야.Base64는 코드를 리버스엔지니어링하고 싶은 타입에 의해 즉시 인식됩니다.그들이 제일 먼저 할 일은 암호를 풀고 그게 뭔지 보는 거야.
자유롭게 이용할 수 있는 JavaScript 난독화 툴은 여러 가지가 있지만, JavaScript를 리버스 엔지니어링할 수 없을 정도로 난독화하는 것은 어렵다고 생각합니다.
그러기 위해 제가 어느 정도 초과근무를 해왔던 몇 가지 옵션이 있습니다.
YUI 컴프레서Yahoo!의 JavaScript 컴프레서는 로드 시간을 단축하는 코드를 잘 응축합니다.비교적 잘 작동하는 작은 수준의 난독화가 있다.기본적으로 컴프레서는 함수 이름을 변경하고 공백을 제거하며 로컬 변수를 수정합니다.이게 제가 가장 자주 쓰는 거예요.이것은 오픈 소스 Java 기반 도구입니다.
JSMin은 JavaScript 소스를 최소화하려는 Douglas Crockford에 의해 작성된 도구입니다.크로크포드의 말을 빌리자면, "JSMin은 난독화시키지 않지만, 추한 것은 된다."소스의 크기를 최소화하여 브라우저로 빠르게 로드하는 것이 주된 목표입니다.
무료 자바스크립트 난독화자.이것은 코드를 실제로 인코딩함으로써 코드를 난독화하려고 시도하는 웹 기반 도구입니다.부호화(혹은 난독화)의 트레이드오프는 파일사이징의 대가를 치르게 될 수 있다고 생각합니다만, 그것은 개인의 취향입니다.
내가 할 일:
A. 해커 트롤!
이것은 나의 가짜/암호화된 비밀 자바스크립트 코드 런처 2부에 있습니다.소스코드에 있는 거 말이야
이 코드는 무엇입니까?
- 실제 코드를 로드합니다.
- 커스텀 헤더를 설정합니다.
- 커스텀 변수를 투고하다
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. 코드를 약간 난독화합니다.
그게 뭔데요?
- 그것은 Base64의 위와 같은 코드입니다.
- 이것은 SECRET javascript 코드가 아닙니다.
(new Function(atob('dmFyIGFqYXg9ZnVuY3Rpb24oYSxiLGQsYyxlLGYpe2U9bmV3IEZvcm1EYXRhKCk7Zm9yKGYgaW4gZCl7ZS5hcHBlbmQoZixkW2ZdKTt9O2M9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7Yy5vcGVuKCdQT1NUJyxhKTtjLnNldFJlcXVlc3RIZWFkZXIoIlRyb2xsMSIsImxvbCIpO2Mub25sb2FkPWI7Yy5zZW5kKGUpO307d2luZG93Lm9ubG9hZD1mdW5jdGlvbigpe2FqYXgoJ1Ryb2xsLnBocCcsZnVuY3Rpb24oKXsgKG5ldyBGdW5jdGlvbihhdG9iKHRoaXMucmVzcG9uc2UpKSkoKX0seydUcm9sbDInOidsb2wnfSk7fQ==')))()
C 실제 코드가 포함된 표시하기 어려운 php 파일을 만듭니다.
이 php는 무엇을 코드합니까?
- 올바른 레퍼러(런처의 도메인/dir/코드)를 확인합니다.
- 커스텀 헤더를 확인합니다.
- 커스텀 POST 변수를 확인합니다.
모든 것이 정상일 경우 올바른 코드가 표시되며, 그렇지 않으면 가짜 코드 또는 ban 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
javascript = SECRET javascript =document.body.appendChild(document.createElement('div')).innerText='Awesome';
= FAKE =window.open('', '_self', '');window.close();
SECRET javascript에서 이벤트 핸들러를 정의하면 접근할 수 있을 것입니다.기동 코드와 네스트된 SECRET 함수를 사용하여 외부에서 정의해야 합니다.
그럼... 코드를 쉽게 구할 수 있는 방법은 없나요? document.body.appendChild(document.createElement('div')).innerText='Awesome';
이 방법이 효과가 있을지는 모르겠지만 Chrome을 사용하고 있으며 Elements, Resources, Network, Sources, Sources,타임라인, 프로파일,감사 중이지만 위의 라인을 찾지 못했습니다.
주의 1: Chrome의 Inspect element -> network에서 Troll.php URL을 열면 가짜 코드가 나타납니다.
주2: 코드 전체가 최신 브라우저용으로 작성되어 있습니다.polyfill은 더 많은 코드가 필요합니다.
편집
launcher.launcher.dlaughter
<!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=';}; ?>
인터프리터된 언어의 문제는 소스 전송에 의한 동작에 있습니다(바이트 코드에 컴파일러를 사용하지 않는 한 디컴파일은 매우 간단합니다).
따라서 성능을 희생하지 않으려면 변수 및 함수 이름(예: a, b... aa, ab...(【a101, a102이나 새 라고 부릅니다).물론 가능한 한 많은 공간/새 라인을 제거합니다(이것이 JS 압축기라고 함).
문자열을 암호화하고 실시간으로 암호를 해독해야 하는 경우 난독화 문자열은 성능에 영향을 미칩니다.JS는 JS에 있습니다.
JScrambler를 사용해 보세요.최근에 한 번 해봤는데 감명받았어요.이 툴은 디테일에 크게 신경 쓰지 않고 신속하게 처리하기를 원하는 사용자를 위해 미리 정의된 설정을 가진 난독화를 위한 템플릿 세트를 제공합니다.원하는 변환/기술을 선택하여 사용자 지정 난독화를 만들 수도 있습니다.
YUI 컴프레서에 대해 제안하는 대부분의 다른 답변과 달리 Google Closure를 사용해야 합니다.
더 되기 이 아니라 예: javasavascript 는 javascript 오류입니다.a = [1,2,3,];
IE の ie ie ie ie
패트릭 오닐의 자바스크립트 유틸리티를 추천할 수 있습니다.이것은 난독화/컴팩트화/압축이 가능하며, 이 기능에는 꽤 능한 것 같습니다.단, 빌드 스크립트에 통합해 본 적은 없습니다.
난독화 대 미니화 대 난독화 대 전자의 광팬은 아니다.디버깅을 할 수 없게 됩니다(행 1의 에러...)."잠깐만요, 줄이 하나밖에 없어요." 항상 포장을 푸는 데 시간이 걸립니다.하지만 필요하다면...음.
오픈소스가 아닌 Javascript 기반의 어플리케이션은 매우 어리석습니다.Javascript는 클라이언트 측 통역 언어입니다.난독화는 별로 방어가 안 돼요
JS 난독화는 보통 스크립트의 크기를 줄이기 위해 수행되며, "보호"하는 것이 아닙니다.코드 공개를 원치 않는 경우 Javascript는 올바른 언어가 아닙니다.
주변에는 많은 도구가 있지만, 대부분의 경우 이름에 "압축기"(또는 "미니퍼")라는 단어를 사용하는 데는 이유가 있습니다.
클라이언트 측 코드를 보호할 수 없습니다.Google Chrome에서 F12 키를 누르고 Javascript 실행을 일시 중지하면 암호화된 문자열까지 모두 얻을 수 있습니다.그것을 아름답게 하고 변수 이름을 바꾸면 거의 원래의 코드를 얻을 수 있습니다.
서버측 javascript(NodeJS)를 쓰는 경우, 누군가가 당신의 서버를 해킹할 것을 두려워하여 해커에게 더 많은 시간을 주고 접근권을 되찾게 하고 싶다면, javacript 컴파일러를 사용하십시오.
고급 컴파일러에서는 Closure 컴파일러를 사용해야 합니다.이는 여러 파일/모듈에서 사용되는 경우에도 모든 변수의 이름을 변경하는 유일한 도구이기 때문입니다.다만, 문제가 있습니다.그것은 코딩 방식으로 쓸 때만 동작합니다.
먼저 YUI Compressor와 같은 것으로 최소화하고 http://www.javascriptobfuscator.com/과 같은 방법으로 모든 문자열과 숫자를 HEX Values로 변환할 것을 추천합니다.
이렇게 하면 코드를 거의 이해할 수 없게 되고, 이 단계에서는 해커가 실제로 처음부터 다시 작성하는 것보다 당신의 코드를 재현하는 데 더 많은 시간이 걸릴 것입니다.개서 및 클로닝은 실제로 멈출 수 없는 것입니다.결국 우리는 자유민이다!
이 도구 Javascript 난독화기 사용
저는 HTML5 게임에서 950KB에서 150KB로 크기를 줄였을 뿐만 아니라 소스 코드를 읽을 수 없는 클로저 컴파일러와 미니어를 되돌릴 수 있게 만들었는데 개인적으로 이 난독화를 되돌리는 방법을 모르겠습니다.
Dean Edward's Packer는 뛰어난 난독화 도구이지만 코드 내에 문자열 요소가 있는 것이 아니라 주로 코드를 난독화시킵니다.
참조: 온라인 Javascript 압축 도구를 사용하여 드롭다운에서 Packer(Dean Edwards)를 선택합니다.
일부 기업(예:JackBe)는 난독화의 추가 수단으로 암호화된 JavaScript 코드를 JS 파일이 아닌 *.gif 파일 안에 넣습니다.
나는 몇 년 동안 Jasob을 사용해왔고 그것은 확실히 최고의 난독화기이다.
고도의 UI를 탑재하고 있지만, 직관적이고 사용하기 편리합니다.
HTML ss CSS の html html 。
이를 사용하는 가장 좋은 방법은 모든 개인 변수 앞에 밑줄과 같은 것을 붙인 다음sort
모두 그룹화하여 난독화 대상으로 체크하는 기능을 제공합니다.
사용자는 여전히 소스를 볼 수 있지만 개인 변수가 다음과 같은 요소에서 변환되면 이를 해독하기가 훨씬 더 어렵습니다._sUserPreferredNickName
로로 합니다.a
.
엔진은 자동으로 목표 변수의 수를 집계하고 최대 압축값을 얻기 위해 우선 순위를 지정합니다.
나는 Jasob을 위해 일하지 않고 단지 친절한 조언을 해줄 뿐 그들을 승진시켜도 아무 이득이 없다.
단점은 무료가 아니고 가격이 조금 비싸다는 것입니다. 하지만 다른 대안들과 비교해서 쌓아두면 여전히 가치가 있습니다. - '공짜' 옵션은 거의 다가오지 않습니다.
바나나스크립트 먹어봤어?고도로 압축되어 전혀 읽을 수 없는 코드를 생성합니다.
Closure-Compiler를 사용합니다.코드를 최소화하고 난독화를 위한 더 많은 옵션을 제공합니다.는 다음할 수 있습니다.
Closure ©
라는 말을 .JS. 닫힘 Uglify 의 js js js js js 、 js js js js js 。Uglipe u uJS
Uglify Closure 와 고속의 새로운 JavaScript JS: Node.js: JavaScript.종료와 동등한 기능
곧 나는 Uglife에게 기회를 줄 것이다.JS.
JavaScript/HTML/CSS 난독화/압축기로서 Patu Digua를 사용해 볼 수도 있습니다.
당신은 Obfuscriptor를 반드시 살펴봐야 합니다.
YUI Compressor나 Google Closure와 같은 다른 도구에서 볼 수 있는 일반적인 Javascript 최소화 기술을 넘어섰습니다.
난독화된 코드가 암호화된 것 같아요내가 전에 본 어떤 것과도 달라.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★무료는 아니지만 꼭 한 번 보세요.
Odfulator &
언급URL : https://stackoverflow.com/questions/194397/how-can-i-obfuscate-protect-javascript
'source' 카테고리의 다른 글
달력이 잘못된 달을 반환함 (0) | 2023.01.15 |
---|---|
Python 모듈의 버전을 확인하려면 어떻게 해야 하나요? (0) | 2023.01.15 |
하위 앵커를 클릭할 때 상위 클릭 이벤트가 발생하지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.01.09 |
python으로 현재 시각을 취득하여 년, 월, 일, 시간, 분으로 분할하는 방법 (0) | 2023.01.09 |
왜 java.lang이야?객체가 추상적이지 않습니까? (0) | 2023.01.09 |