문제

Perl에 대한 좋은 코드 obsfucator를 아는 사람이 있나요?클라이언트에 코드를 공개하기 전에 코드를 난독화하는 옵션을 조사해 달라는 요청을 받았습니다.난독화된 코드가 여전히 리버스 엔지니어링될 수 있다는 것을 알고 있지만 그것이 우리의 주요 관심사는 아닙니다.

일부 클라이언트는 우리가 제공한 소스 코드를 약간 변경하고 있는데 문제가 발생하여 이를 수정해야 하거나 변경된 내용과 작동하지 않는 패치를 릴리스하면 악몽을 꿉니다.따라서 의도는 그들이 스스로 코드를 변경하기 어렵게 만드는 것입니다(어쨌든 그렇게 해서는 안 됩니다).

도움이 되었습니까?

해결책

나는 이전에 이 길을 가본 적이 있으며 "난독화된" 코드로 작업해야 하는 것은 정말 악몽입니다. ​​개발자가 코드를 읽을 수 없을 때 클라이언트 서버의 문제를 디버그하려고 하면 엄청난 비용이 들기 때문입니다. ."실제 코드"를 클라이언트 서버에 복사하거나 유지 관리가 정말 번거로워지는 여러 가지 문제로 인해 "난독화 해제기"가 발생하게 됩니다.

귀하의 의견을 이해합니다. 하지만 경영진에 문제가 있는 것처럼 들리며 올바른 솔루션이 무엇인지 파악하기보다는 선택한 솔루션을 구현하기를 귀하에게 기대하고 있습니다.

이 경우에는 라이센스나 계약상의 문제인 것 같습니다.코드를 오픈 소스로 두되, 제출한 모든 변경 사항이 귀하에게 돌아와 승인을 받아야 하는 라이센스의 일부로 만드세요.패치를 푸시할 때 모든 코드의 md5 합계를 확인하고 예상한 것과 일치하지 않으면 라이센스 위반이며 그에 따라 비용이 청구됩니다(그리고 훨씬 더 높은 요금이 부과되어야 합니다).(저희에게 코드 오픈 소스를 허용한 한 회사가 기억납니다. 그러나 우리가 무엇이든 변경하면 코드를 25,000달러에 "구매"했으며, 우리가 구매하지 않는 한 그들은 더 이상 버그 수정이나 업그레이드에 대해 책임을 지지 않는다는 점을 분명히 했습니다. 새로운 라이센스).

다른 팁

하지 않다.하지 마세요.

소프트웨어 변경 사항에 대해 귀하는 책임을 지지 않는다는 내용을 계약서에 기재하십시오(또는 필요한 경우 계약서를 수정하십시오).그들이 당신의 코드를 엉망으로 만들고 당신이 그것을 고치기를 기대한다면, 코드를 난독화해도 해결되지 않는 클라이언트 문제가 있는 경우.난독화하여 실제 문제가 발생하면 버그 보고서에 줄 번호 등을 정확하게 보고하도록 행운을 빕니다.

그러지 마세요.사람들이 Perl 코드를 변경하는 것을 원하지 않는다면 적절한 라이센스를 적용하고 해당 라이센스를 시행하십시오.라이센스가 부여되었을 때 사람들이 코드를 변경해서는 안 된다고 말하면서 업데이트가 더 이상 설치와 함께 작동하지 않는 것은 문제가 되지 않습니다.

보다 "Perl 프로그램의 소스를 어떻게 숨길 수 있나요?"에 대한 perlfaq3의 답변 상세 사항은.

주요 문제는 클라이언트가 코드를 수정하여 이를 지원하기 어렵게 만드는 것 같습니다.지원을 받기 위해 방문할 때 해당 파일의 체크섬(md5,sha 등)을 요청하고, 패치할 때 파일의 체크섬도 마찬가지로 확인하는 것이 좋습니다.예를 들어 클라이언트에게 설치 과정을 거쳐 모든 파일을 체크섬하는 제공된 프로그램의 출력을 제공하도록 요청할 수 있습니다.

궁극적으로 그들은 코드를 갖고 있으므로 원하는 것은 무엇이든 할 수 있습니다.당신이 할 수 있는 최선의 방법은 라이센스를 시행하고 수정되지 않은 코드만 지원하는지 확인하는 것입니다.

이 경우 난독화는 잘못된 접근 방식입니다.

코드를 클라이언트에 릴리스할 때 전송한 코드의 복사본을 디스크에 보관하거나 버전 제어에 태그/브랜치로 보관하는 것이 좋습니다.

그런 다음 고객이 변경한 경우 고객이 보유한 코드를 귀하가 보낸 코드와 비교하여 변경 사항을 쉽게 확인할 수 있습니다.결국 그들이 변경이 필요하다고 느낀다면 어딘가에 문제가 있는 것이므로 마스터 코드베이스에서 이를 수정해야 합니다.

프로그램을 바이너리로 변환하는 또 다른 대안은 무료입니다. PAR-패커 도구 켜기 CPAN.코드 난독화를 위한 필터도 있지만 다른 사람들이 말했듯이 이는 가치 있는 것보다 더 많은 문제가 될 수 있습니다.

이전 제안에 동의합니다.

그러나 정말로 원한다면 살펴볼 수 있습니다 평가 및/또는 필터::암호화 CPAN 모듈.함께 사용할 수도 있습니다.

저는 제품을 광학 미디어로 배송할 때 매우 가벼운 형태의 "보호"로 후자(Filter::Crypto)를 사용했습니다.그것은 당신을 "보호"하지는 않지만, 당신의 소스 파일을 수정하려는 사람들의 90%를 막을 것입니다.

이것은 진지한 제안은 아니지만, 한 번 살펴보세요. 애크미::버피.

적어도 당신의 하루를 밝게 해줄 것입니다!

난독화의 대안은 다음과 같은 것을 사용하여 스크립트를 바이너리로 변환하는 것입니다. ActiveState의 Perl 개발 키트.

저는 Windows O/S를 실행 중이고 IndigoSTAR의 perl2exe를 사용하고 있습니다.결과 .EXE 파일은 현장에서 변경될 가능성이 없습니다.

다른 사람들이 말했듯이 "어떻게 난독화합니까?"는 잘못된 질문입니다."고객이 코드를 변경하는 것을 어떻게 막나요?"가 맞습니다.

체크섬과 계약 아이디어는 귀하가 설명하는 "문제"를 예방하는 데 유용하지만, 업그레이드 출시 및 버그 수정의 어려움으로 인해 비용이 발생한다면 고객은 어떻게 변경을 통과하지 못합니까? 포괄적인 테스트 스위트?이러한 변경을 수행할 수 있다면(또는 적어도 코드에서 수행하려는 작업을 표현하는 변경 수행) 지원 티켓을 열고 패치를 업로드하는 것을 쉽게/자동화하는 것은 어떨까요?고객은 항상 옳다 고객이 원하는 것에 대해 (그들은 "올바른 방법"을 수행하는 방법에 대한 단서가 없을 수도 있지만 그것이 바로 그들이 당신에게 돈을 지불하는 이유입니다.)

난독 처리기를 원하는 더 좋은 이유는 모든 고객이 고정 계약을 맺고 있지 않은 대량 시장 데스크탑 배포를 위한 것입니다.그런 경우에는 뭔가 좋다 PAR - 암호화/난독화 논리를 컴파일된 바이너리로 압축하는 모든 것이 좋습니다.

여러 사람들이 이미 말했듯이:하지 않다.

Perl 인터프리터의 특성을 고려할 때 Perl을 난독화하기 위해 수행하는 모든 작업은 Perl이 손에 넣기 전에는 실행 취소할 수 없어야 하며 이는 인터프리터가 있는 곳에 난독화 해제 스크립트/바이너리를 남겨 두어야 함을 의미합니다. (그리고 귀하의 고객)이 그것을 찾을 수 있습니다 :)

실제 문제를 해결하세요.체크섬 및/또는 적절하게 표현된 라이센스.그리고 지원 직원은 '바꿨나요?'라고 말하도록 훈련받았습니다.우리는 라이선스의 34b조를 적용하고 있으며, 이를 만지기 전에는 $X,000가 될 것입니다....

또한 읽어보세요 난독화를 사용해야 하는 이유 좀 더 일반적인 답변을 원하시면.

나는 그들을 자신의 브랜치에 있는 내 SVN 트리에 초대하여 그들이 변경 사항을 제공할 수 있도록 하고 나는 이를 보고 그들의 변경 사항을 내 개발 트리에 통합할 수 있습니다.

싸우지 말고 받아들이십시오.

Ovid가 말했듯이 이는 계약상의 사회적 문제입니다.코드를 변경하면 보증이 무효화됩니다.문제를 해결하기 위해 많은 비용을 청구하는 동시에 변경 사항을 제안할 수 있는 채널을 제공하십시오.또한 변경하려는 내용을 살펴보고 가능하다면 해당 부분을 구성에 포함시키십시오.그들은 하고 싶은 일이 있고, 당신이 그것을 만족시킬 때까지 계속해서 당신 주위를 둘러보려고 할 것입니다.

~ 안에 펄 마스터하기, Obfucator를 물리치는 것에 대해 조금 이야기하겠습니다.말도 안되는 변수 이름을 만드는 등의 작업을 수행하더라도 B::데스 그리고 B::난독화 해제, 다음과 같은 Perl 도구와 함께 펄::깔끔하다, 지식이 풍부하고 의욕이 있는 사람이 귀하의 소스를 쉽게 얻을 수 있도록 하십시오.무지하고 의욕이 없는 사람들은 어차피 코드로 무엇을 해야 할지 모르기 때문에 너무 걱정할 필요가 없습니다.

이에 대해 관리자들과 이야기할 때 우리는 일반적인 비용 편익 분석을 거칩니다.당신이 가진 모든 종류의 물건이 있습니다 ~할 수 있었다 하지만 그 중 많은 비용이 귀하가 얻는 혜택보다 적은 것은 아닙니다.

행운을 빌어요,

심각하지 않은 또 다른 제안은 다음을 사용하는 것입니다. 애크미::표백제, 그러면 코드가 매우 깔끔해집니다 ;-)

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