난독처리기를 사용하면 JavaScript 코드를 보호하기에 충분합니까?

StackOverflow https://stackoverflow.com/questions/29399

  •  09-06-2019
  •  | 
  •  

문제

저는 JavaScript로 작성된 개발 도구를 구축하는 작업을 하고 있습니다.

이것은 오픈 소스 프로젝트가 아니며 (희망적으로) 상용 제품으로 판매될 것입니다.

나는 내 투자를 보호할 수 있는 최선의 방법을 찾고 있습니다.코드를 합리적으로 보호하기에 충분한 난독처리기(코드 맹글러)를 사용하고 있습니까?

내가 모르는 다른 대안이 있습니까?

(Obfuscator가 올바른 단어인지는 잘 모르겠습니다. Obfuscator는 코드를 가져와서 읽을 수 없게 만드는 앱 중 하나입니다.)

도움이 되었습니까?

해결책

나는 당신에게 비밀을 말할 것입니다.일단 이해하고 나면 Javascript 난독화가 유선으로 스크립트를 보낼 때 대역폭을 절약하는 데만 유용하다는 사실에 대해 훨씬 더 기분이 좋아질 것입니다.

귀하의 소스 코드는 훔칠 가치가 없습니다.

나는 이것이 자아에 대한 충격이라는 것을 알고 있지만, 심각한 마법이 일어나는 극소수의 개발 영역 밖에서는 모든 소스 코드에 해당되기 때문에 당신이 작성한 코드 줄을 본 적이 없어도 자신있게 말할 수 있습니다.

내일 누군가가 Windows Vista의 소스 코드가 들어 있는 DVD 더미를 문앞에 버렸다고 가정해 보겠습니다.그것으로 무엇을 할 수 있을까요?물론, 이를 컴파일하여 복사본을 나눠줄 수도 있지만 이는 일반 정품 버전을 복사하는 것보다 한 단계 더 많은 노력을 기울일 뿐입니다.라이센스 확인 코드를 힘들게 찾아 제거할 수 있지만 일부 영리한 어린이는 이미 바이너리에 대해 이러한 작업을 수행했습니다.로고와 그래픽을 교체하고 직접 작성한 것처럼 가장하여 "Vicrosoft Mista"로 마케팅하시겠습니까?당신은 잡힐 것이다.

코드를 읽고 이해하려고 노력하며 Microsoft가 제품 개발에 투자한 진정한 "지적 재산을 훔치는" 데 엄청난 시간을 소비할 수 있습니다.하지만 당신은 실망할 것입니다.코드는 차례로 내려지는 일련의 긴 일상적인 결정이라는 것을 알 수 있습니다.어떤 사람들은 당신이 생각하는 것보다 더 똑똑할 것입니다.어떤 사람들은 그곳에서 어떤 종류의 원숭이를 고용하고 있는지 궁금해 머리를 흔들게 될 것입니다.대부분은 어깨를 으쓱하고 "그래, 그렇게 하는구나"라고 말하게 만들 것입니다.

그 과정에서 운영 체제 작성에 대해 많은 것을 배우게 되지만 이것이 Microsoft에 해를 끼치지는 않을 것입니다.

"Vista"를 "Leopard"로 바꾸면 위의 단락은 조금도 변경되지 않습니다.마이크로소프트가 아니고요 소프트웨어.이 사이트에 있는 사람들 중 절반은 이 사이트의 소스를 보거나 보지 않고도 Stack Overflow 복제본을 개발할 수 있습니다.그들은 단지 그렇지 않았습니다.Firefox와 WebKit의 소스 코드는 누구나 읽을 수 있도록 공개되어 있습니다.이제 처음부터 자신만의 브라우저를 작성해 보세요.몇 년 뒤에 뵙겠습니다.

소프트웨어 개발은 ​​시간의 투자입니다.당신이 하고 있는 일이 너무 특별해서 누구도 당신의 소스를 보지 않고는 그것을 복제할 수 없을 것이라고 생각하거나 심지어 실행 가능한(그리고 쉽게 감지할 수 있는) 정도의 잘라내기와 붙여넣기 없이 작업을 훨씬 쉽게 만들 것이라고 상상하는 것은 완전히 오만입니다.

다른 팁

위의 대부분의 답변에 매우 동의하지 않습니다.

모든 소프트웨어가 난독 화에도 불구하고 도난 당할 수 있다는 것은 사실이지만, 적어도 소프트웨어의 개별 부분을 추출하고 재사용 하기가 더 어렵고 그게 요점입니다.

누군가 소프트웨어의 가장 좋은 부분을 훔쳐서 위험한 동시성을 만든 후에 코드를 공개하고 법정에서 싸우는 것보다 난독 화를 사용하는 것이 더 저렴하고 덜 위험 할 수 있습니다.

난독 화되지 않은 코드 속삭임 :

  • 자, 나를 분석하고 재사용하세요.저를 사용하여 더 나은 소프트웨어를 만들 수있을 것입니다.

    난해한 코드 내용 :

    • 저리 가세요.나를 깨뜨리는 것보다 자신의 아이디어를 사용하는 것이 더 저렴합니다.

누군가가 코드를 훔치지 않기를 바라면서 코드를 난독 화하려한다면 패배를 당할 것입니다. 평범한 브라우저가 접근하는 것을 막을 수 있지만 헌신적 인 사람은 거의 확실히 당신이 사용하는 모든 수단을 극복 할 수있을 것입니다.

과거에는 사람들이 몇 가지 일을하는 것을 본 적이 있습니다.

  1. 실제로 코드를 얻기 위해 몇 페이지 아래로 스크롤해야하는 경우 코드를 사용할 수 없다는 메시지와 함께 페이지 상단에 많은 공백을 붙여 넣습니다.
  2. 어떤 종류의 인코더를 통해 실행하면 디코더를 통해 실행될 수있을만큼 매우 유용합니다.
  3. 또 다른 방법은 변수 이름을 한 문자로 줄이고 공백을 제거하는 것입니다 (이 역시 효율성입니다).

    다른 많은 방법이 있습니다.

    결국 귀하의 노력으로 인해 일반 브라우저에서 귀하의 콘텐츠를 볼 수 없게됩니다. 헌신적 인 사람이 오면 할 수있는 일이별로 없습니다. 이것과 함께 살아야합니다.

    제 조언은 가장 난독 한 코드가 아닌 최고의 제품 / 서비스 / 커뮤니티를 보유함으로써 가장 많은 사람들을 끌어 들이고 경쟁에서이기는 정말 멋진 제품을 만드는 것입니다.

웹 페이지를 방문하는 모든 사용자가 자바 스크립트 소스의 일부 작동 버전을 다운로드한다는 사실에 항상 직면하게됩니다.소스 코드가 있습니다 .난독 처리하면 열심히 작업 한 내용을 훔칠 의도가있는 누군가가 재사용하기가 매우 어려울 수 있습니다.그러나 많은 경우 누군가가 난독 화 된 소스를 재사용 할 수도 있습니다!또는 최악의 경우 손으로 풀고 결국 이해할 수 있습니다.

당신과 같은 상황의 예로는 Google지도 가 있습니다.Javascript 소스는 명확하게 난독 화되어 있습니다.그러나 실제로 개인적이고 민감한 논리의 경우 데이터를 서버로 푸시하고 서버가 XMLHttpRequests (AJAX)를 사용하여 해당 정보를 처리하도록합니다.이 디자인을 사용하면 서버 측의 중요한 부분을 훨씬 더 엄격하게 제어 할 수 있습니다.

아마도 최선을 다할 것입니다.충분한 헌신을 가진 사람이라면 누구나 프로그램의 난독 화를 풀 수 있습니다.프로젝트를 시작하기 전에 그것에 익숙한 지 확인하십시오.가장 큰 문제는 사이트에서 누가 사용하는지 제어하는 것입니다.누군가가 귀하의 코드가있는 사이트를 방문하고 그것이하는 일을 좋아한다면 코드가 무엇을하는지 이해하지 못하거나 코드를 복사 할 수있을 때 그것을 읽을 수 없다는 것은 중요하지 않습니다.자신의 사이트에서 사용하십시오.

누군가가 코드를 알아 내고자한다면 난독 화기는 전혀 도움이되지 않습니다.코드는 여전히 클라이언트 시스템에 존재하며 사본을 가져 와서 여유롭게 연구 할 수 있습니다.

실행을 위해 소스 코드를 브라우저에 전달해야하므로 자바 스크립트로 작성된 코드를 숨길 방법이 없습니다.

코드를 숨기려면 다음과 같은 옵션이 있습니다.

1) 컴파일 된 코드 (소스 아님)가 클라이언트에 다운로드되는 환경을 사용합니다.Flash 또는 Silverlight.이것이 완벽하다고 확신하지는 않지만 확실히 Javascript보다 훨씬 낫습니다.

2) 작업을 수행하는 서버 측에 백엔드와 서버에 요청 만하는 씬 클라이언트가 있습니다.

예라고 말하고 싶습니다. Dean Edward 's Packer 또는 유사합니다..NET에서 컴파일 된 코드 / IL을 리버스 엔지니어링하는 측면에서 .NET Reflector와 같은 도구로 가능한 일에 대해 생각하면 투자를 완전히 보호하기 위해 할 수있는 일이 없다는 것을 알게됩니다.

다른 한편으로, 소스 코드를 공개하는 사람들도 어쨌든 꽤 잘하는 것처럼 보인다는 것을 기억하십시오. 사람들이 지적 재산보다 더 많은 것을 원하는 것은 그들의 경험입니다.

코드 난독 기는 최소한의 보호를 필요로하는 것에 충분하지만 실제로 당신을 보호하기에는 충분하지 않을 것이라고 생각합니다. 인내심이 있으면 모든 것을 풀 수 있고 .. 당신을위한 프로그램이 있다고 확신합니다.

그렇지만 어쨌든 여러분이 만든 모든 종류의 보호를 결국 깨뜨릴 것이기 때문에 누구도 여러분의 물건을 도용하는 것을 막을 수는 없습니다. 코드가 컴파일되지 않은 스크립트 언어에서는 특히 쉽습니다.

다른 언어 (예 : Java 또는 .NET)를 사용하는 경우 "전화 걸기"와 같은 작업을 수행하여 라이센스 번호가 주어진 URL과 일치하는지 확인할 수 있습니다. 당신의 앱이 항상 온라인으로 연결되는 일종의 온라인 앱이라면 작동합니다. 그러나 소스에 액세스하면 사람들은 해당 부분을 쉽게 우회 할 수 있습니다.

간단히 말해서 자바 스크립트는 현재 수행중인 작업에 적합하지 않습니다.
수행중인 작업에서 한 단계 더 나아가 웹 서비스 백엔드를 사용하여 데이터를 가져올 수 있습니다. 웹 서비스가 인증 / 확인 프로세스를 처리하도록합니다. 방탄이되도록 약간의 작업이 필요하지만 작동 가능성

본질 상 메뉴 클릭 한 번으로 코드를 볼 수있는 웹 사이트 용이라면 아무것도 숨길 이유가 정말 있습니까?누군가가 당신의 코드를 훔치고 자한다면, 가장 엉망인 코드도 사람이 읽을 수 있도록 만드는 노력을 할 것입니다.상업용 웹 사이트를 보면 코드를 난독 화하지 않으며 아무도 나가서 Google 앱에서 코드를 훔치지 않습니다.코드 도용에 대해 정말로 걱정한다면 다른 컴파일 된 언어로 작성해야한다고 주장합니다.(물론 웹앱 전체를 파괴합니다 ...) 그럼에도 불구하고 여러분은 완전히 안전하지 않습니다. 많은 디 컴파일러가 있습니다.

정말로 충분한 동기를 가진 사람 앞에서 원하는 것을 할 수있는 방법이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top