리버스 엔지니어링으로부터 .NET 코드를 보호 하시겠습니까?


491

난독 처리는 한 가지 방법이지만 응용 프로그램의 불법 복제 방지 보안을 위반하는 것을 막을 수는 없습니다. 응용 프로그램이 변경되지 않았는지 확인하고 등록 메커니즘을 리버스 엔지니어링 할 수 없도록하려면 어떻게해야합니까?

또한 C # 응용 프로그램을 기본 코드로 변환 할 수 있으며 Xenocode 가 너무 비쌉니다.

C #은 많은 기능을 제공하며 내 코드에 이상적인 언어이므로 전체 코드베이스를 C ++로 다시 작성하는 것은 의문의 여지가 없습니다.

.NET의 서명 된 어셈블리에서 보안 인증서를 쉽게 제거 할 수 있습니다.



@Andreas : 대단해 !! 시도해 볼게요. 그것을 사용하는 사람이 있습니까?
Jack

1
@Jack은 Windows 스토어 앱 전용입니다. 내가 알 수있는 한 데스크탑 앱에는 타임 라인이 없습니다.
Tyler Long

구식 C ++없이 네이티브를 원한다면 Delphi를 사용하십시오. .Net의 용이성은 어쨌든 델파이에서 나왔습니다.
William Egge

답변:


671

당신은 할 수 없습니다.

조금 더 어려워지기 위해 취할 수있는 단계가 있지만 궁극적으로 로컬 머신의 모든 실행 파일은 크랙킹 가능합니다. 결국 해당 코드는 기본 기계 코드로 변환되어야하며 실행 가능한 모든 응용 프로그램이 취약합니다.

당신이하고 싶은 것은 사람들의 문제에 가치가 없도록 균열하기에 충분하지 않게하는 것입니다.

애플리케이션 보호에 도움이되는 몇 가지 제안 :

  • 코드를 난독 처리 하십시오. Dotfuscator 는 무료 버전이며 Visual Studio와 함께 제공됩니다.
  • 사용 공개 / 개인 키 또는 비대칭 암호화 제품의 라이센스를 생성합니다. 이를 통해 라이센스 코드를 생성 수 있습니다. 응용 프로그램 균열이 있어도 키 생성 알고리즘을 되돌릴 수 없기 때문에 응용 프로그램에 대한 키 생성기를 발표하지 않을 것입니다.
  • 타사 패커 를 사용 하여 .NET 실행 파일을 암호화 된 Win32 래퍼 응용 프로그램에 포장하십시오. Themida 는 더 좋은 것 중 하나입니다. 이렇게하면 사람들이 .NET Reflector에 응용 프로그램을 반영하지 못하고 뒤집기 위해 포장을 풀기가 어려워집니다.
  • 나만의 커스텀 패커를 작성하십시오 . 타사 패커가 너무 비싸면 직접 작성해보십시오. 포장 풀기 방법에 대한 게시 된 방법이 없기 때문에 사용자 지정 패커가 매우 효과적 일 수 있습니다. 개인 패커 작성 방법 학습서에서는 자체 Win32 패커 작성에 대한 많은 정보를 제공합니다.

그러나 궁극적으로 사람들이 응용 프로그램에 금이 간 것을 원한다면 그렇게 할 것입니다. 응용 프로그램을 보호하기 위해 방대한 양의 리소스가 있지만 응용 프로그램이 공개되기 전에 크래킹되는 모든 상용 소프트웨어를 살펴보십시오.

숙련 된 리버스 엔지니어는 IDA-Pro 를 실행하여 사용자가 무엇을하든 버터와 같은 애플리케이션을 통해 슬라이스 할 수 있습니다. 압축 된 응용 프로그램은 압축을 풀 수 있으며 난독 처리로 인해 공원에서 걸을 수는 없습니다. 복잡한 라이센스 코드를 사용한 모든 노력은 단일 바이트 패치로 취소 할 수 있습니다.

사람들이 소프트웨어를 불법 복제 할 가능성이 매우 높다는 사실 만 인정하면됩니다. 이 일부 사람들 결코 상관없이 응용 프로그램에 대한 대가를 치를거야되지는 이러한 당신에 대해 걱정할 필요가 없습니다 사람들이다.

그러나 소송을 위험에 빠뜨리지 않고 행복하게 소프트웨어 라이센스를 구매하는 많은 비즈니스가 있으며, 위험을 감수하고 싶지 않거나 잘못 찾거나 해적에 능숙한 기술에 정통하지 않은 많은 컴퓨터 사용자가 있습니다. 이들은 진정한 고객이므로 고객에게 우수한 사용자 경험을 제공하고 소프트웨어를 크래킹하는 사람들을 무시하기 위해 노력해야합니다.

나는 이전에 내 응용 프로그램을 해적판으로 만들었고 개인적으로 사용했습니다. 여기에 나는 작은 개발자로 내 마음과 영혼을 응용 프로그램에 쏟아 부었고이 사람들이 나에게서 해적을 입었다 고?! 그들은 내 주머니에서 직접 돈을 받고 있었다!

나는 즉시 많은 draconian DRM 코드를 추가하고 불법적이거나 금이 간 사본을 사용하여 사람을 방해하려고 시도했습니다. 물론 필연적으로 응용 프로그램을 개선하기 위해 노력해 왔어 야합니다. 뿐만 아니라, 진정한 고객에게 상처를 입히고 있었기 때문에이 모든 추가 보호 기능을 사용하게 될 것입니다.

오랜 전투 끝에 나는 조수와 싸우고 있다는 것을 깨달았습니다. 베어 본 라이센스 기능을 제외한 모든 전화 홈 코드를 가져 왔으며 결코 뒤돌아 보지 않았습니다.


67
+1이 거의 +2입니다. 더 많은 사람들이 마침내 결정된 공격자로부터 소프트웨어를 보호 할 수 없게되기를 바랍니다.
Bombe

102
소프트웨어 보호 너바나에 도달했습니다. 더 많은 보호를 추가하는 것이 아니라 제품에 집중하고 사람들이 비용을 지불하고 싶어 할 정도로 좋은 것입니다. 그리고 해적을 가진 사람들에게는 어쨌든 지불하지 않았을 것이므로 마치 존재하지 않는 것처럼 보입니다.
Arthur Chaparyan

6
@Arthur Chaparyan, 동의합니다. 여기까지 오는데 오랜 시간이 걸렸지 만 마침내 빛을 보았습니다. 나는 더 제한적인 보호의 길을 가고 크래커와 싸웠다. 나는 자신을 막기 위해 리버스 엔지니어링에 관해 할 수있는 모든 것을 배웠다. 드디어 바로 이데올로기 알아 낸
mmcdole

50
지옥 누군가 내 소프트웨어가 해적판 가치가 있다고 생각한다는 사실을 알게되어 영광입니다.
Erik Forbes

10
수입의 상당 부분을 소프트웨어 판매에 의존하기 시작하면 상황이 바뀝니다. 누군가가 당신을 훔치는 것처럼 느껴집니다. 나는 당신이 말하는 것을 얻습니다. 토렌트 사이트에서 소프트웨어의 균열을 처음 발견했을 때 충격을 받았습니다.
mmcdole

265

응용 프로그램을 완전히 보호 할 수는 없습니다 (관리 여부). Playstation 및 iPad와 같은 시스템 (공급 업체가 하드웨어를 제어하는 ​​곳)에 균열이 생길 수 있다면 앱에 어떤 희망이 있습니까? 고맙게도, 당신은 정말로 원하지 않습니다. 제 생각에는 누군가가 할 수 없을 정도로 충분히 응용 프로그램을 보호해야합니다. 우연히 제품을 불법 복제 .

예를 들어 머신 별 라이센스를 사용하는 경우 새 보조 머신에 라이센스를 설치할 때 작동하지 않아야합니다. 추가 지원 요청을 막기위한 좋은 오류 메시지가 필요하지만, 해결하기가 너무 어려워지고 사용자에게 영향을 미치지 않도록 추가 시간을 소비하지 마십시오.

다른 예는 시간 제한 시험입니다. 사용자가 시스템 시계를 롤백 할 수있는 것과 같은 간단한 것들에 대해 걱정하지 않아도됩니다. 그렇게하는 사람은 라이센스 를 위반 한 것으로 알고 있으며, 위반시 사용자 가 알고있는 한 충분합니다.

사용자는 라이센스에 신경 쓰지 않기 때문에이 작업을 많이 수행해야합니다. 라이센스는 다음과 같은 구성 요소입니다. 필요할 때까지 아무도 신경 쓰지 않는 . 아무도 그것들을 읽지 않으며 실제로는 안됩니다. 따라서 사용자에게 경계가 어디에 있는지 알려주는 가장 좋은 방법은 응용 프로그램의 기본 동작이 라이센스를 준수하는 경우입니다. 이 첫 번째 경우는 두 번째로 시험판 모드에서 설치 또는 설치에 실패했음을 의미합니다. 후자의 경우 구성 파일에서 일반 텍스트 날짜를 확인하는 것입니다. 어느 쪽이든 우아하고 도움이되고 존중하는 방식으로 처리해야합니다.

그것이 의미하는 바를 설명합니다. 그러나 왜 더 이상 가지 않습니까? 당신이 찾을 수있는 모든 작은 구멍을 꽂아보십시오. 답은 두 부분으로되어 있습니다. 첫째, 누군가가 의식적으로 윤리적 문턱을 넘어 설 경우 간단한 방법으로도 라이센스 조항 위반 애플리케이션에서 애플리케이션을 가져 오는 것과 같이 더 어렵거나 위험한 것을 기꺼이 할 것입니다. 서면 토런트사이트 — 신뢰할 수없는 출처에서 다운로드 한 응용 프로그램을 실행하면 상당한 위험이 따릅니다. 더 어렵게 만드는 것은 이러한 사용자에게는 약간의 성가심이며 유료 고객에게 문제를 일으킬 위험이 있습니다. 단순하게 유지하면 누군가가 응용 프로그램을 파고 더 포괄적 인 균열을 방출하지 못할 수 있습니다. 둘째, 결함을 찾을 수있는 눈이 거의 없습니다. 해커들은 많은 것을 가지고 있으며, 그것들을 찾는 연습이 더 많습니다. 하나의 작은 결함 만 놓칠 필요가 있으며 앱은 마치 해적 사이트에서 아무 것도하지 않은 것처럼 동일한 분포를 갖습니다. 매번 옳 아야합니다. 그들은 한 번만 운이 좋다. 따라서 필요한 노력은 매우 높으며 성공의 척도는 매우 낮습니다.

궁극적으로 누군가가 단순히 응용 프로그램을 사용하는 대신 응용 프로그램 을 불법 복제 하려는 경우 이것이 주요 목표입니다. 그들을 막기 위해 할 수있는 일은 없습니다. 이것이 소프트웨어의 본질입니다. 제품을 구성하는 파일이 사용자의 컴퓨터에 일단 그들은 것이다 그들이 원하는대로 그들과 함께 할 수있을. 이것은 특히 Java 또는 .NET 과 같은 관리되는 환경과 관련이 있지만 기본 코드에도 적용됩니다. 시간이 촉박하고 충분한 시간이 주어지면 모든 디지털 보안이 깨질 수 있습니다.

사용자가 제품을 불법 복제하는 것을 막을 수 없으므로 최선의 조치는 이러한 유형의 사용자를 귀하의 이익을 위해 사용하는 방식으로 참여시키는 것입니다. 그들이 당신을 대항하기보다는 당신을 위해 일하도록하는 것이 종종 가능합니다. 이를 염두에두고 응용 프로그램이 무엇이든간에 거의 완벽하게 작동하고 만료되지 않는 무료 버전을 유지하는 것이 좋습니다. 고객이 신용 카드로 당신을 믿지 않아도되는 다른 이유가 없다면 US $ 1 가격표와 무료 가격의 차이도 엄청납니다. 제품의 무료 버전은 불법 복제 배포를 효과적으로 중단시킬뿐만 아니라 (동일한 가격으로 합법적 일 수있는 불법 복제 버전을 위험에 빠뜨리는 이유는 무엇입니까?) 청중을 크게 늘릴 수있는 잠재력이 있습니다.

결과적으로 유료 버전의 가격을 높여야 할 수 있습니다. 따라서 20 달러에 2,000 명의 사용자 대신에 각각 10 만 명의 무료 사용자가 있으며 그 중 500 명은 "전문"에디션에 대해 99 달러를 기꺼이 지불합니다. . 이렇게하면 제품을 잠그는 데 많은 시간을 할애 할 때보 다 더 많은 돈을 벌 수 있습니다. 또한 무료 사용자를 참여시키고 몇 가지 중요한 방법으로 관계를 활용할 수 있습니다.

하나는 지원입니다. 비관론자는이 기회를 통해 10 만 명의 무료 사용자 지원 비용 증가에 대해 불만을 제기 할 수 있지만 대신 놀라운 일이 발생합니다. 지원 비용에 대한 비용이없는 대규모 오픈 소스 프로젝트에서는이 점을 항상 알 수 있습니다. 사용자는 한 걸음 더 나아가게됩니다.

무료 사용자는 일반적으로 지원 기대치가 낮아졌으며 그만한 이유가 있습니다. 무료 버전을 커뮤니티 지원 대상으로 만 표시하고 해당 목적을 위해 사용자 조정 온라인 포럼을 작성하기 만하면됩니다. 귀하의 지원 지식 기반은 자체 생성되며 고급 사용자는 귀하를 대신하여 추가 손을 잡아야하는 사람들을 양육합니다. 더 중요한 것은 버그를 더 빨리 식별하고 수정하여 궁극적으로 제품의 품질을 향상시키고 총 지원 비용을 절감 할 수 있다는 것입니다. 사용자 기반이 충분히 크지 않았기 때문에 이전에는 불가능했지만 무료 사용자를 고객으로 취급하면 매우 효과적입니다.

다른 하나는 피드백입니다. 포럼을 보면서 다른 방법으로는 고려하지 않았을 중요한 개선 아이디어를 배웁니다. 이를 통해 궁극적으로 더 많은 무료 사용자를 유료 사용자로 전환하고 더 많은 잠재 고객을 끌어들이는 더 매력적인 제품을 만들 수 있습니다.

마지막으로 마케팅을 고려해야합니다. 이 모든 무료 사용자는 이제 적보다 팬이되며 그에 따라 행동합니다. 뿐만 아니라 다음 버전을 출시 할 때 이들 사용자는 다른 알려지지 않은 메커니즘이 아닌 승인 된 배포 채널을 모두 통과하게됩니다. 즉, 다음 버전에서는 더 크고 관심이 많고지지를받는 ​​대상과 연결되기 시작합니다.

Professional Edition에 예약 할 수있는 가장 좋은 기능은 회사 배포 및 관리를 쉽게 수행 할 수 있도록하는 도구입니다. 크래커는 이것들을 자신의 용도로 해킹해야 할 충분한 이유라고 생각하지는 않지만 300 개의 라이센스를 구매하고 회사 전체로 라이센스를 얻으려는 기업에게는 이것이 필수입니다. 물론, 전문 에디션 어쨌든 불법 복제되지만, 다시 : 당신은 아마 당신이 무슨 짓을했는지에 상관없이 그 해적에 제품을 판매하지 할 수 없습니다 때문에 그것은 당신에게 비용 아니에요, 그래서 걱정하지 않는 어떤 수익을.

심리적으로 귀하의 제품을 이렇게 많이 배포하는 것이 어려울 수 있지만, 실제로 가장 좋은 방법을 이해할 수 있기를 바랍니다. 뿐만 아니라 장기적으로 갈 수있는 유일한 방법입니다. 나는 누군가가 이런 식으로하고 싶지 않다고 생각하고 있다는 것을 알고 있습니다. 결국, 그들은 몇 년 동안 20 달러짜리 제품을 파는 것만으로도 좋은 결과를 얻었습니다. 그러나이 방법을 사용하지 않으면 결국 다른 사람 이 그렇게하기 때문에 너무 나쁩니다 . 그리고 그들의 제품은 당신만큼이나 좋을 것입니다. 그런 다음 갑자기 가격이 터무니없고 매출이 급격히 떨어지며 더 이상 할 수있는 일이 없습니다. 필요한 경우 추가 중간 계층을 선택할 수 있지만 도움이되지는 않습니다.


1
@Learning : 시간이 지남에 따라 다소 커지고 자동 변환을 CW 임계 값으로 전달했습니다.
Joel Coehoorn

1
+1이 질문의 이전 버전에 대한 답변보다 낫습니다. @Joel 한계가 있다는 것을 몰랐습니다.
pipTheGeek

1
나는 여기에있는 모든 것에 완전히 동의하지는 않으며, 어쨌든 매우 신중하게 제시 된 표현과 논쟁에 대한 쉬운 +1입니다.
Beska

2
좋은 주장이지만 지적 재산 보호에 관한 요점을 놓치고 있습니다. 앱에 다소 복잡한 작업을 수행하는 코드가있는 경우 난독 처리는 코드 복사 및 붙여 넣기와 코드 해석 및 리엔지니어링 간의 차이를 제공하여 작동합니다. 이것은 업데이트에서 특히 중요합니다. 누군가가 난독 처리 된 코드를 복사 한 경우 업데이트를 릴리스 할 때 다시 수행해야합니다. 최소한 최소한 더 많은 고통 / 비용 / 시간이 발생합니다. 어떤 식 으로든 보호되지 않은 경우 다시 복사 / 붙여 넣기 만하면 작동합니다.
gregmac

4
훌륭한 게시물-복잡한 복사 방지를 작성하는 것이 귀찮은 이유에 대한 모든 세부 사항에 실제로 적용됩니다. 질문이 중복 되더라도이 답변을 위해 다시 열어야합니다. 아마도 모드가 병합 할 수 있습니까?
EMP

45

내 경험상, 응용 프로그램이나 라이브러리를 해독하기가 더 어려워지면 정직한 고객이 아프지 만 부정직 한 사람은 약간 지연됩니다. 피할 수없는 지연을 위해 많은 노력을 기울이지 않고, 저 마찰 제품을 만드는 데 집중하십시오.


38

많은 사람들과 공유하는 비밀은 비밀이 아닙니다. 코드에 비밀이 있다면, 난독 화는 보호가되지 않습니다. 한 번만 난독 처리해야합니다 . 고객과 공유하고 싶지 않은 비밀이 있다면 고객 과 공유하지 마십시오. . 코드를 웹 서비스로 작성하고 자신 만 볼 수있는 자체 비밀 코드를 자신의 서버에 보관하십시오.


1
Btw는 제품 "오프라인"도 활성화하려는 프로젝트를 수행하고 있습니다. (온라인으로 활성화하기 위해 WCF 서비스를 만들었습니다). 이 경우 어떻게 코드를 조작합니까? 당신은 몇 가지 히트를 줄 수 있습니까?
Piyush

1
재미있는 아이디어이지만, WP7 게임과 같이 데이터 연결없이 실행해야하는 응용 프로그램을 개발하는 사람에게 권장되는 조치는 무엇입니까?
Charlie Skilbeck

23

대체로 세 그룹의 사람들이 있습니다.

  • 소프트웨어를 구매하지 않고 균열에 의지하거나 찾지 못한 사람은 소프트웨어를 전혀 사용하지 마십시오. 이 그룹에서 돈을 벌 것으로 기대하지 마십시오. 그들은 자신의 기술이나 크래커에 의존합니다.

  • 사용하는 보호 메커니즘에 관계없이 소프트웨어를 구매 (유료) 할 합법적 인 사용자 그룹. 정교한 보호 메커니즘을 사용하여 합법적 인 사용자가 부담을 느끼지 마십시오. 복잡한 보호 메커니즘은 사용자 경험을 쉽게 망칠 수 있으며이 그룹에서 이런 일이 일어나기를 원하지 않습니다. 개인적으로, 나는 모든 하드웨어 솔루션에 투표하여 소프트웨어 비용을 증가시킵니다.

  • "비공식적 인"크래킹에 의존하고 소프트웨어 의 기능이 라이센싱 메커니즘에 의해 보호 되므로 소프트웨어 비용지불 하는 소수 . 당신은이 그룹이 당신의 보호를 우회하는 것을 너무 쉽게하고 싶지 않을 것입니다. 그러나 소프트웨어 보호에 소비 한 모든 노력은이 그룹의 인원에 따라 상환됩니다. 이것은 전적으로 빌드하는 소프트웨어 유형에 따라 다릅니다.

당신이 말한 것을 감안할 때, 당신이 당신의 소프트웨어를 구매하도록 강요받을 수있는 소수의 사람들이 충분히 있다고 생각한다면, 계속해서 어떤 형태의 보호를 구현하십시오. 이 소수자로부터 얼마나 많은 돈을 벌 수 있는지, 보호에 소요되는 시간 또는 타사 보호 API / 도구에 소비하는 금액을 생각해보십시오.

자신 만의 솔루션을 구현하려면 공개 키 암호화를 사용하는 것이 대칭 알고리즘과 달리 쉬운 해킹을 방지하는 좋은 방법입니다. 예를 들어 라이센스 (일련 번호 또는 라이센스 파일)에 디지털 서명 할 수 있습니다. 이 문제를 해결하는 유일한 방법은 코드를 디 컴파일, 변경 및 재 컴파일하는 것입니다 (Simucal의 답변에서 제안 된 것과 같은 기술을 사용하면 더 어려워 질 수 있습니다).


라이센스가 체크 아웃되지 않은 경우 누군가 애플리케이션을 중단시키는 코드를 리핑하는 경우 강력한 암호화를 사용하여 라이센스를 보호 / 확인하는 것은 완전히 쓸모가 없습니다. :)
Bombe '02

동의하지만, 내가 말했듯이, 균열을 사용하는 사용자 그룹에 대한 보호는 아닙니다 (내가 만든 가정이 존재할 것입니다).
Mystic

공개 키 암호화 = 비대칭 암호화 나는 당신이 대칭을 의미한다고 생각합니다.
mmcdole

1
공정하게 말하면 세 번째 요점은 사람들의 일부가 항상 소수라고 가정하기 때문에 편향되어 있습니다. 나는 특정 프레임 워크에서 분명 대다수라고 확신합니다. a) 대부분의 사용자는 매우 낮은 윤리적 기준을 가진 어린이입니다. b) 월간 요금이 월 등으로 드는 월별 요금 인 경우 비용이 해당 사용자에게 중요 할 수 있기 때문에 대규모 멀티 플레이어 기능이있는 온라인 게임이 있습니다.
j riv

19

사람들이 소프트웨어를 해독하는 것을 막을 수 없습니다.

그러나 크랙을 만들어 매출을 떨어 뜨릴 수 있습니다. 소프트웨어에 유효한 등록 코드를 발행 할 수있는 Keygenerator는 소프트웨어에서 등록 인센티브를 제거하는 단순한 패치보다 훨씬 나쁩니다. 균열은 하나의 소프트웨어 버전에서만 작동하고 다음에 릴리스 한 소프트웨어 업데이트에서는 작동하지 않기 때문입니다. keygenerator는 등록 키 알고리즘을 변경할 때까지 계속 작동하며 정직한 고객을 방해하기 때문에 자주 원하지 않는 일입니다.

따라서 소프트웨어의 불법 키 생성기와 싸우는 방법을 찾고 있는데 이것이 생성하는 긴 등록 코드로 인해 아시 메트릭 암호화를 사용하지 않으려는 경우 부분 키 확인을 살펴볼 수 있습니다.

Partial Key Verification은 각 불법 키 생성기가 하나의 특정 소프트웨어 릴리스에서만 작동하는지 확인합니다. 기본적으로 소프트웨어의 각 릴리스는 등록 코드의 일부 숫자를 확인하기위한 코드와 만 링크되도록해야합니다. 어떤 숫자가 정확히 임의의 숫자이므로 크래커는 여러 버전의 소프트웨어를 리버스 엔지니어링하고 모든 버전의 소프트웨어에서 작동하는 키 생성기를 해제하기 위해이 모든 것을 하나의 키 생성기로 결합해야합니다.

정기적으로 새 소프트웨어 버전을 출시하면 더 이상 작동하지 않는 모든 종류의 소프트웨어 불법 복제 아카이브에 수많은 키 생성기가 확산됩니다. 잠재적 인 소프트웨어 해적은 일반적으로 최신 버전에 대한 크랙이나 keygen을 찾기 때문에 그 중 몇 가지를 시도하고 결국 포기할 것입니다.

(C ++) 최신 쉐어웨어 게임에서 Partial Key Verification을 사용했으며 매우 효과적이었습니다. 우리가 키게 너 레이터에 대해 많은 문제를 겪기 전에 우리는 싸울 수 없었습니다. 이후에는 특정 버전의 게임에서만 작동하는 균열과 키 생성기가 거의 없었지만 모든 버전에서 작동하는 키 생성기는 없었습니다. 우리는 정기적으로 게임의 아주 작은 업데이트를 발표했으며 기존의 모든 균열을 쓸모 없게 만들었습니다.

시도하지는 않았지만 Partial Key Verification을위한 오픈 소스 .NET 프레임 워크 가있는 것 같습니다 .


1
아이디어와 마찬가지로 릴리스마다 아시 메트릭 암호화에 다른 비밀번호를 사용할 수도 있습니다.
Priyank Bolia 09

재미있는 아이디어이지만 긴 등록 코드의 문제점은 정확히 무엇입니까? 요즘에는 아무도 손으로 입력하지 않을 것입니다. 모든 사람이 복사하여 붙여 넣을 것이므로 10 자이든 100 자이든 차이가 없습니다.
EMP

4
@Evgeny : 사용자가 고급 사용자 인 경우에만 해당됩니다. 우리는 수년간 셰어웨어 / 캐주얼 게임을 만들어 왔으며 대부분의 사용자가 복사하여 붙여 넣을 수 없다고 말할 수 있습니다. 등록 창에는 복사 및 붙여 넣기 방법에 대한 설명서가 포함되어 있으며 일부는 읽은 후에는 그렇지 않습니다.
Adrian Grigore 2016 년

와! 알았어. 글쎄, 당신은 분명히 이것보다 나보다 더 많은 경험을 가지고 있기 때문에 나는 말할 수 없다. 나는 놀랐다. 그러나 나는 그들이 복사하는 방법을 알고 다음 붙여 넣기하지 않는 경우가 있다는 말을 해야 그들이 매우 유용한 일반적인 컴퓨터 기술을 배울 그래서, 코드를 긴 200 자합니다. :)
EMP

1
@Evgeny : 심지어 짧은 등록 코드와, 우리는 여전히 자신의 코드를 잘못 입력하기 때문에 그들이 때문에 코드가 유효하지 않을 수 있다는 생각 사람의 전자 메일을 많이 가지고 결코 A의이 여러 번 같은 실수를하지 않습니다를 열. IT 교육을 다른 회사에 맡기는 것을 선호합니다 ... :-)
Adrian Grigore

16
  • 온라인 업데이트를 사용하여 라이센스가없는 사본을 차단하십시오.

  • 애플리케이션의 다른 모듈에서 일련 번호를 확인하고 단일 함수 호출을 사용하여 확인을 수행하지 마십시오 (크래커가 확인을 쉽게 우회 할 수 없도록).

  • 시작시 일련 번호를 확인하고 데이터를 저장하는 동안 확인을 수행하고 매주 금요일 저녁에 수행하고 사용자가 유휴 상태 일 때 수행하십시오 ...

  • 응용 프로그램 파일 검사 합계를 확인하고 보안 검사 합계를 다른 곳에 저장하십시오.

  • 이러한 종류의 트릭에 너무 많이 가지 말고 등록 코드를 확인하는 동안 응용 프로그램이 충돌하거나 오작동하지 않도록하십시오.


  • 크래커 에게 깨지지 않는 바이너리를 만드는 것보다 사용자에게 유용한 앱을 만드는 것이 훨씬 중요 합니다.


14

넌 ..

Microsoft SLP 서비스 InishTech의 Software Potential 은 응용 프로그램 기능에 영향을 미치지 않으면 서 코드를 보호 할 수있는 기능을 제공합니다.

업데이트 : (공개 : 나는 Eazfuscator.NET에서 일합니다) Microsoft SLP Services Software의 잠재력을 다르게 만드는 것은 코드를 가상화하는 기능이므로 확실히 할 수 있습니다 . 질문이 처음 제기 된 지 몇 년이 지났다. 오늘날 다음과 같은 유사한 방식으로 작동하는 더 많은 제품이 있습니다.


2
내 친구의 가격을 Microsoft의 라이선스 소프트웨어를 구입하는 것은 정상 ISV 너무 비용이 많이 드는
Priyank Bolia

나는 그것이 아주 잘 작동하지만, 크래커 쉽게 IL 분사 프로그램의 흐름을 변경할 수 있도록 만, 방법이 아닌 전체 어셈블리 또는 프로젝트 내부의 코드를 암호화를 시도했습니다
모흐센 아프신

@ogggre 공급 업체 링크를 추가하는 경우 실제로 게시물에서 연결을 공개해야합니다. 또한 (SLPS의 현재 버전 내가 작업 : D)을 지원 제네릭을 수행합니다. 당연히 모든 솔루션에는 평가 자만이 사람들에게 적절하게 맥락을 파악할 수있는 개별적인 장단점이 있습니다
Ruben Bartelink

@MohsenAfshin 나는 당신이 무슨 말을하는지 이해하지 못합니다-요점은 IL의 추가 / 제거 / 변경이 라이센스 위반을 나타내는 방법을 보호해야한다는 것입니다. 가상화는 공짜가 될 수 없기 때문에 제안한대로 '마 법적으로 모든 것을 보호'하는 것은 이치에 맞지 않습니다. 요점으로 돌아 가기 : SP의 보호의 목표는 민감한 방식에 따라 선택한 방법에 대한 IL 변경을 방지하는 입니다. )
Ruben Bartelink

1
@RubenBartelink 동의합니다. 불행히도이 스레드는 여러 페이지의 내용으로 너무 큽니다. 처음에는 새로운 답변을 추가하고 싶었지만 StackOverflow는 기존 답변을 확장하는 것이 좋습니다. 그래서 나는했다. 내 작은 정보가 유용하길 바랍니다. SLPS의 일반적인 지원 및 수정 사항에 대한 업데이트에 감사드립니다.
ogggre

10

.NET Reflector 는 기본적으로 ".NET 코드"를 의미하는 "관리 코드"만 열 수 있습니다. 따라서 COM DLL 파일, 네이티브 C ++, 클래식 Visual Basic 6.0 을 분해하는 데 사용할 수 없습니다. 코드 등 . 컴파일 된 .NET 코드의 구조는 매우 편리하고 이식 가능하며 검색 가능하고 검증 가능합니다. .NET Reflector는 이것은 컴파일 된 어셈블리를 들여다 볼 수 있지만 디 컴파일러 및 디스어셈블러는 결코 .NET에만 국한되지 않으며 컴파일러가있는 한 주변에 있습니다.

obfuscators를 사용하여 코드를 읽기 어렵게 만들 수 있지만 .NET에서 읽을 수 없도록 코드를 디 컴파일하지 못하게 할 수는 없습니다. 관리 코드 응용 프로그램을 기본 코드 응용 프로그램에 "링크"한다고 주장 하는 소수의 제품 (보통 비싼 제품 )이 있지만 실제로 작동하더라도 결정된 사람은 항상 방법을 찾을 수 있습니다.

그러나 난독 화에 관해서는 지불 한 것을 얻습니다. 따라서 코드가 매우 독점적이므로 코드를 보호하기 위해 많은 시간을 투자해야한다면, 훌륭한 난 독자에 돈을 투자 할 의향이 있습니다.

그러나 15 년 동안 코드를 작성해 본 경험을 통해 소스 코드를 과도하게 보호하는 것은 시간 낭비이며 거의 이점이 없음을 깨달았습니다. 문서, 주석 등을 지원하지 않고 원본 소스 코드를 읽으려고하면 이해하기가 매우 어려울 수 있습니다. 디 컴파일러가 제공하는 의미없는 변수 이름과 현대의 난 독자가 만드는 스파게티 코드를 추가하면 사람들이 지적 재산을 훔치는 것에 대해 너무 걱정할 필요가 없습니다.


9

정말 가치가 있습니까? 충분한 보호로 모든 보호 메커니즘이 손상 될 수 있습니다. 시장, 제품 가격, 고객 수 등을 고려하십시오.

좀 더 안정적인 것을 원한다면 하드웨어 키의 길을 따라 가십시오. 그러나 그것은 사용자에게 다소 번거롭고 더 비쌉니다. 소프트웨어 솔루션은 아마도 시간과 자원을 낭비하는 것이며 아마도 그들이 제공 할 수있는 유일한 것은 '보안'이라는 잘못된 의미입니다.

더 많은 아이디어가 없습니다 (완벽한 아이디어가 없기 때문에 완벽한 것은 없습니다).

  • 중복 방지
  • 언어를 바꾸고 Skype 의 저자가 사용했던 멋진 비법을 사용하십시오
  • 라이센스 서버

크래커는 일반적인 기술에 대한 경험이 많고 몇 발짝 앞서 있기 때문에 너무 많은 시간을 낭비하지 마십시오. 많은 리소스를 사용하지 않으려면 프로그래밍 언어를 변경하십시오 (Skype 방식).


하드웨어 잠금 장치의 소프트웨어 부분을 공격 할 수 있다는 것을 잊지 마십시오.
Magnus Hoff

그렇습니다. 실제로 유일한 옵션은 응용 프로그램을 하드웨어로 부분적으로 구현하는 것입니다 (예 : 소프트웨어 -VHDL 응용 프로그램의 이상한 혼합). 이것은 또한 깨지기 쉬울 것입니다.
Anonymous

공개 / 개인 키 전략을 구현하는 동글은 어떻습니까? 동글의 개인 키만 응용 프로그램을 해독하고 실행할 수 있습니다.
mmcdole

이것이 하드웨어 키가 일반적으로하는 일입니다. 그러나 동글을 공격하거나 복제하거나 동글과 대화하는 소프트웨어 (우회, 비활성화 등)를 수행 할 수 있습니다.
익명

1
제 경우에는 그만한 가치가있었습니다. Partial Key Verification을 구현하고 기존 제품의 등록 키 체계를 변경 한 후 판매가 크게 증가했습니다. 모든 소프트웨어가 깨질 수 있습니다. 문제는 캐주얼 소프트웨어 해적의 기준을 높이는 것입니다.
Adrian Grigore

9

사람들이 코드를 실행할 수있게하려면 (그렇지 않으면 왜 처음에 코드를 작성 했습니까?) CPU가 코드를 실행할 수 있어야합니다. 코드 를 실행 하려면 CPU가 이해할 수 있어야합니다 합니다.

CPU는 멍청하고 인간은 그렇지 않기 때문에 인간도 코드를 이해할 수 있습니다.

사용자가 코드를 얻지 못하게하는 유일한 방법은 코드를 제공하지 마십시오.

이것은 두 가지 방법으로 달성 할 수있다 : 소프트웨어를 서비스로 입니다 (SaaS는), 당신은에 소프트웨어를 실행 하여 서버에만 사용자가 원격으로 액세스 할 수 있습니다. 예를 들어 Stack Overflow가 사용하는 모델입니다. Stack Overflow는 코드를 난독 화하지 않지만 디 컴파일 할 수는 없습니다.

다른 방법은 어플라이언스 모델입니다. 사용자에게 코드를 제공하는 대신 코드가 포함 된 컴퓨터를 제공합니다. 게임 콘솔, 대부분의 휴대 전화 및 TiVo가 사용 하는 모델입니다 . 전체 실행 경로를 "소유"한 경우에만 작동합니다. 자체 CPU, 컴퓨터를 작성하고 운영 체제 및 CLI 구현을 작성해야합니다 . 그런 다음에 코드를 보호 할 수 있습니다. 그러나 아주 작은 실수 라도 모든 보호 기능을 쓸모 없게 만들 수 있습니다. Microsoft, Apple, Sony, 음악 산업 및 영화 산업이이를 입증 할 수 있습니다.

또는 아무것도 할 수 없으므로 코드가 저작권법에 의해 자동으로 보호됩니다.


8

불행히도, 당신은 이것으로부터 도망 치지 않을 것입니다. 가장 좋은 방법은 C로 코드를 작성하고 P / Invoke 하는 것입니다.

작은 catch-22가 있습니다. 누군가 응용 프로그램을 CIL로 디 컴파일 하고 모든 확인 / 활성화 코드 (예 : C 라이브러리 호출)를 종료 할 수 있습니다. C로 작성된 응용 프로그램은보다 영구적 인 해커에 의해 리버스 엔지니어링됩니다 (요즘 게임 속도가 얼마나 빠른지 살펴보십시오). 아무것도 당신의 응용 프로그램을 보호하지 않습니다.

결국 그것은 집처럼 많이 작동하고, 너무 많은 노력 (스파게티 코드가 도움이 될 것입니다)과 공격자가 옆집 이웃 (경쟁 :)으로 이동하도록 충분히 보호하십시오. Windows Vista를 보면 10 가지 방법으로 크랙해야합니다.

EXE 파일을 암호화하고 사용자가 파일을 사용할 수있을 때 해독하는 패키지가 있지만 다시 한 번 의심의 여지가없는 일반적인 솔루션을 사용하고 있습니다.

활성화 및 등록 메커니즘은 '평균 조 :'를 우회 할 정도로 기술에 정통하지 않은 사람들을 대상으로합니다. 크래커를 신경 쓰지 마십시오. 손에 너무 많은 시간이 있습니다.


1
등록 코드를 dll로 아웃소싱하는 것을 정말로 귀찮게하는 경우 DLL이 모든 새 버전의 소프트웨어와 달라야합니다. 그렇지 않으면 사람들이 소프트웨어를 쉽게 해독 할 수 있습니다. 그들이해야 할 일은 DLL을 한 번 깨뜨리고 모든 이후 버전에 사용하는 것입니다. 최종 사용자조차도 오래된 크랙 된 DLL을 찾으면이 작업을 수행 할 수 있으며 관리 코드에 등록 메커니즘을 배치하는 것보다 훨씬 나쁩니다.
Adrian Grigore

8

보호를 구매하는 것 외에도 귀하 (또는 개발자)는 복사 방지를 배울 수 있습니다.

이들은 아이디어입니다 :

처음에는 콘솔에 자신을 쓰는 프로그램을 작성하십시오. 그것은 유명한 문제입니다. 이 작업의 기본 목적은 자체 참조 코드 작성을 연습하는 것입니다.

둘째, 다른 메소드의 CIL 에 의존 할 수있는 방식으로 일부 코드를 다시 작성하는 기술을 개발해야합니다 .

.NET 에서는 아직 가상 머신을 작성할 수 있습니다 . 그리고 거기에 코드를 넣으십시오. 궁극적으로 가상 머신은 코드를 실행하는 다른 가상 머신을 실행합니다. 성능을 너무 느리게하지 않기 위해 드물게 불리는 함수의 일부입니다.

일부 로직을 C ++ / CLI로 다시 작성하고 관리 코드를 관리되지 않는 코드와 혼합하십시오. 분해가 단단해집니다. 이 경우 x64 바이너리도 제공하는 것을 잊지 마십시오 .


자세히 설명 할 수 없었습니다.
Priyank Bolia

7

예. 그건 진실이야. 코드가 난독 처리되지 않은 경우 .NET 코드는 리버스 엔지니어링이 매우 쉽습니다.

난독 화는 소프트웨어를 리버스 엔지니어링하려는 사람들에게 성가신 계층을 추가합니다. 어떤 버전을 사용 하느냐에 따라 보호 수준이 다릅니다.

Visual Studio에는 Dotfuscator 버전이 포함되어 있습니다 . 번들 버전이므로 가장 강력한 난독 화를 얻지 못합니다. 기능 목록을 살펴보면 누락 된 내용과 코드를보다 안전하게 만들기 위해 응용 프로그램이 수행하는 작업을 정확하게 확인할 수 있습니다.

몇 가지 다른 무료 또는 오픈 소스 .NET 난독 처리기가 있습니다 (그러나 품질이나 사용하는 다양한 방법에 대해서는 언급 할 수 없습니다).

결국 완벽한 것은 없습니다. 누군가 당신의 소프트웨어가 어떻게 작동하는지 정말로보고 싶다면 그렇게 할 것입니다.


11
"소프트웨어가 어떻게 작동하는지 실제로보고 싶다면 그렇게 할 것"이 아닙니다. 관심이 있다면 보지 않고도 추측 할 수 있습니다. 99.9 % 이상의 소프트웨어에는 매직 픽시 더스트 알고리즘이 없습니다. 프로그래밍의 어려운 부분은 특별한 비밀 기술이 아닙니다. 모든 부품을 정렬하고 작동시키는 것입니다.
Ken

9
@ 켄-hhh! 대부분의 경우 우리가 매직 픽시 더스트 알고리즘을 사용하지 않는다는 사실을 다른 사람들에게 알릴 수 없습니다.
Justin Niessner

9
저스틴 : 사랑은 마법 알고리즘으로 간주됩니까? 사랑은 프로그램을 특별 하게 만듭니다 . 나는 당신이 사랑을 분해 할 수 있다고 생각하지 않습니다.
Ken

Babel.NET은 더 이상 무료가 아닙니다. 가장 일반적인 난 독기 (무료 및 상용) 목록은 여기에서 찾을 수 있습니다 .
InputOutput으로

6

제품이 깨지는 것을 완전히 보호 할 수는 없지만 보안 수준을 최대화 / 강화하고 초보자와 중간 크래커가 깨지기에는 너무 어렵게 만들 수 있습니다.

그러나 크랙 할 수없는 것은 없다는 것을 명심하십시오. 서버 측의 소프트웨어 만 잘 보호되고 크랙 할 수 없습니다. 어쨌든 응용 프로그램의 보안 수준을 향상시키기 위해 일부 크래커가 "모두가 아닌"응용 프로그램이 크래킹되는 것을 방지하는 몇 가지 간단한 단계를 수행 할 수 있습니다. 이 단계는 크래커를 불쾌하게 만들고 필사적으로 만듭니다.

  • 소스 코드를 난독 처리하면 분명히 소스 코드가 혼란스럽고 읽을 수 없게 보일 것입니다.
  • 2 시간, 24 시간, 하루, 주 등 또는 사용자가 수행 한 모든 작업 후와 같이 애플리케이션 내부에서 여러 가지 임의의 검사 루틴을 트리거하십시오.
  • 릴리스 된 응용 프로그램의 MD5 체크섬을 서버에 저장 하고 현재 파일 MD5 체크섬을 서버 측의 실제 파일로 확인하여 무작위로 트리거 할 수있는 루틴을 구현하십시오. MD5 체크섬이 변경된 경우이 복사본이 불법 복제되었음을 의미합니다. 이제 차단하거나 업데이트를 해제하여 차단 등을 할 수 있습니다.
  • 일부 코드 (함수, 클래스 또는 특정 루틴)가 실제로 수정 또는 변경 또는 제거되었는지 확인할 수있는 루틴을 작성하십시오. 그것을 코드 무결성 검사라고 부릅니다.
  • 알 수없는 무료 패커를 사용하여 응용 프로그램을 포장하십시오. 또는 돈이 있다면 Thamida 또는 .NET Reactor 와 같은 상용 솔루션을 찾으십시오 . 이러한 응용 프로그램은 정기적으로 업데이트되고 크래커가 응용 프로그램의 압축을 풀면 해당 회사에서 새 업데이트를 얻을 수 있으며 새 업데이트를 받으면 프로그램을 포장하고 새 업데이트를 릴리스하면됩니다.
  • 정기적으로 업데이트를 릴리스하고 고객이 최신 업데이트를 다운로드하도록하십시오.
  • 마지막으로 응용 프로그램을 매우 저렴하게 만드십시오. 너무 비싸지 마십시오. 저를 믿으십시오. 고객이 더 행복해질 것이며 크래커는 응용 프로그램을 떠날 것입니다. 매우 저렴한 응용 프로그램을 해독하는 데 시간이 가치가 없기 때문입니다.

그것들은 초보자와 중간 크래커가 응용 프로그램을 크래킹하는 것을 방지하는 간단한 방법입니다. 응용 프로그램을 보호 할 더 많은 아이디어가 있다면 구현하기를 부끄러워하지 마십시오. 크래커의 삶을 어렵게 만들고 좌절감을 느끼게되고 결국에는 시간이 가치가 없기 때문에 응용 프로그램을 떠나게됩니다.

마지막으로 양질의 응용 프로그램을 코딩하는 데 시간을 투자해야합니다. 복잡한 보안 계층을 코딩하는 데 시간을 낭비하지 마십시오. 좋은 크래커가 응용 프로그램을 크래킹하려는 경우 수행 한 작업에 관계없이 수행합니다.

이제 크래커를위한 장난감을 만들어보세요.


5

거기에 도롱뇽 은 .NET 프레임 워크없이 응용 프로그램을 배포 할 수 있습니다 Remotesoft에서 네이티브 .NET 컴파일러 및 링커입니다. 나는 그것이 그 주장에 얼마나 잘 부합하는지 모른다.


대답은 매우 쉽습니다. 대부분의 답변이 난독 화에 대해 이야기하는 것은 유감입니다. 난독 화는 가장 먼저 (리플렉터와 같은) 코드를 중지하는 데 좋습니다. 그것은 나쁘지 않습니다. 물론 SAAS 응용 프로그램을 작성하는 것 외에도 어셈블리 코드를 이해하는 실제 해커를 막을 수있는 것은 없습니다. 그러나 Salamander, .NET Reactor와 같은 다른 도구가 있습니다. 그 도구 중 가장 좋은 도구는 아직 판단 할 수 없습니다.
Philm

5

마이크로 소프트가 해결책을 제시 할 수 있다면 우리는 불법 복제 된 Windows 버전을 갖지 않을 것이므로 그다지 안전한 것은 없습니다. 다음은 Stack Overflow와 비슷한 질문이며 자신을 보호하는 방법을 구현할 수 있습니다. 다른 버전을 출시하는 경우 다른 버전에 대해 다른 기술을 채택하여 첫 번째 버전이 깨질 때까지 두 번째 버전이 대신 할 수 있습니다.


5

.NET 반응기

최신 정보

Jared는 de4dot 이 디 컴파일 할 수 있다고 주장했습니다.

.NET Reactor는 .NET 어셈블리를 CIL로 이해할 수없고 기존 도구로는 디 컴파일 할 수없는 관리되지 않는 프로세스로 변환하여 민감한 지적 재산을 완벽하게 보호합니다. 해커는 이해할 수없는 형태의 소스에 액세스 할 수 없습니다.

강력하고 유연한 .NET Reactor 라이센스 기능을 사용하면 하드웨어 및 소프트웨어 잠금을 사용하여 라이센스 조건을 시행하고 수익원을 보호 할 수 있습니다. 라이센스 관리자는 몇 초 만에 평가판 또는 영구 라이센스를 구축 할 수 있습니다. 예제와 함께 완전히 문서화 된 소프트웨어 개발 키트 (SDK)를 사용하면 코드에서 직접 라이센싱 시스템을 호출하여 라이센싱 시스템에 대한 사용자 지정 확장을 만들 수 있습니다.


3
나는 그 사람들에게 약간의 질문으로 연락을 시도했지만 그들의 제품에 대해 가지고 있었지만 대답하지 않았습니다. 당신은 그들의 제품을 시도 했습니까. 나는 똑똑한 조립으로 갔고 그들의 제품과 지원은 매우 좋습니다. 그러나 이미 질문에서 말했듯이 난독 화는 한 가지 방법이지만 완전한 증거는 아닙니다.
Priyank Bolia

1
이전에 제품에 문제가 있었고 groups.google.se/group/net-reactor-users의 고해상도 아이콘에 대한 질문을 했는데 답장과 수정 사항이 있었지만 지금은 어려운 것처럼 보입니다. 잡아. 나쁜-그것은 훌륭한 제품이고 나는 아직도 그것을 사용하고 있습니다
loraderon

2
"기존 도구를 디 컴파일 할 수없는"경우, de4dot 기능 페이지에서 지원되는 난독 화기 / 패커로 표시되는 이유는 무엇입니까? : bitbucket.org/0xd4d/de4dot
Jared Thirsk

아마도 이전 진술이므로 웹 페이지를 업데이트하지 않았기 때문일 수 있습니다. 더 이상 난독 처리 도구를 사용하지 않습니다.
loraderon

de4dot는 매우 강력한 도구입니다. 나는 여러 난 독자에 대해 시도해 보았고 훌륭한 일을합니다. 그러나 .NET Reactor (v6.0) 보호 파일을 처리 할 수 ​​없었습니다. 아마 de4dot이 최신 상태가 아닐 수 있습니다.
InputOutput으로

4

한 가지 아이디어가 있습니다. 모든 소프트웨어 인스턴스에 연결해야하는 서버를 회사에서 호스팅 할 수 있습니다. 단순히 연결하고 등록 키를 확인하는 것만으로는 충분하지 않습니다. 확인 만 제거하면됩니다. 키 확인 외에도 서버가 클라이언트가 스스로 수행 할 수없는 중요한 작업을 수행해야하므로 제거 할 수 없습니다. 이것은 물론 서버 측에서 많은 양의 처리를 의미하지만 소프트웨어를 훔치기가 어려워지고 키 구성이 양호하다고 가정하면 (소유권 확인 등) 키도 어렵습니다. 훔치다. 소프트웨어를 사용하려면 사용자가 인터넷에 연결되어 있어야하기 때문에이 방법은 원하는 것보다 더 침습적 일 수 있습니다.


5
서버가 다운되었거나 사용자가 항상 인터넷에 액세스 할 수없는 경우 앱을 사용하기 위해 인터넷 서버로 자주 왕복하는 방식으로 고객을 실망시키는 방법은 무엇입니까?
Priyank Bolia

나는 완전히 동의합니다. 그렇기 때문에 마지막 행에서 "이것이 원하는 것보다 더 침습적입니다 ..."라고 말한 이유입니다. 방금 고객에게 만족을주는 최선의 방법이 아니라 기술적으로 실현 가능한 것으로 생각 된 최고의 솔루션을 OP에 제공했습니다. :
rmeador

게임 개발 회사 인 Ubisoft는 2010 년 1 분기 (이 답변이 작성된 후 몇 개월)에이를 시도했으며 서버 측 구성 요소의로드가 너무 커서 게임을 플레이 할 수 없었습니다. SW에 대한 전반적인 인상 : "설치가 번거롭고, 오프라인, 침입 및 신뢰할 수없는 상태로 사용될 수 없습니다 ." 따라서 서버 측 처리 방법이 결정되면 실제로 요구에 맞게 확장 할 수 있는지 확인하십시오.
Piskvor

3

클라이언트에서 실행중인 모든 것은 디 컴파일 및 크랙 될 수 있습니다. 난독 화는 더 어렵게 만듭니다. 나는 당신의 응용 프로그램을 모르지만 시간의 99 %는 노력의 가치가 있다고 생각하지 않습니다.


3

애플리케이션을 완전히 보호 할 수 없습니다. 죄송합니다.



2

사용자의 99 % 이상이 실행 방법을 확인하기 위해 실행 파일을 검사하는 데 관심이 없음을 명심하십시오.

너무 많은 사람들이 귀찮게 노력할 것이고 대부분의 난독 화가 해결 될 수 있다는 것을 감안할 때, 당신의 시간과 노력의 가치가 있습니까?

더 많은 사람들이 제품을 사용하도록 제품을 개선하는 데 시간을 투자하는 것이 좋습니다.


2

경고를 추가하는 것 : 난독 처리를 사용하려는 경우 모든 것이 여전히 작동하는지 확인하십시오! 난독 화는 클래스 이름 및 메소드 이름과 같은 것을 변경할 수 있습니다. 따라서 리플렉션을 사용하여 (플러그 아키텍처와 같은) 특정 메소드 및 / 또는 클래스를 호출하면 난독 처리 후 애플리케이션이 실패 할 수 있습니다. 또한 스택 추적은 오류를 추적하는 데 쓸모가 없을 수 있습니다.


2

.NET으로 작성되고 CIL로 컴파일 된 경우 반영 될 수 있습니다. 보안이 문제가되고 난독 화를 피하려면 관리되지 않는 언어를 사용하여 응용 프로그램을 작성하는 것이 좋습니다.


2

응용 프로그램이 변경되지 않도록하는 방법 및 등록 메커니즘을 리버스 엔지니어링 할 수없는 방법

둘 다 똑같은 간단한 대답을 가지고 있습니다. 고객과 같이 신뢰할 수없는 당사자에게 객체 코드를 전달하지 마십시오. 컴퓨터에서 응용 프로그램을 호스트 할 수 있는지 여부는 해당 작업에 따라 다릅니다.

웹 응용 프로그램 이 아닌 경우 응용 프로그램 서버 (또는 Windows의 경우 원격 데스크톱 연결)에 X 전달을 사용하여 SSH 로그인을 허용 할 수 있습니다 .

괴상한 사람들에게 객체 코드를 주면 프로그램이 재미있을 것이라고 생각 하면 금 갈 것 입니다 . 주위에 방법이 없습니다.

당신이 나를 믿지 않는다면, 깨지지 않고 해적판되지 않은 유명한 응용 프로그램을 지적하십시오.

하드웨어 키를 사용하면 생산 비용이 높아지고 사용자가 싫어할 것입니다. 소프트웨어 제조업체가 당신을 믿지 않기 때문에 27 가지 USB 제품을 연결하고 분리하는 것은 정말 나쁜 일입니다.

EXE를 암호화하고 사용자가 그것을 사용할 수있을 때 해독하는 패키지가 있습니다

물론 "can-I-use-it"테스트를 크랙하여 항상 true를 반환하는 방법이 있습니다.

불쾌한 트릭은 프로그램의 다른 곳에서 테스트를 수행하는 opcode의 바이트 값을 더러운 방법으로 사용하여 값이 맞지 않는 한 높은 확률로 프로그램 충돌을 일으킬 수 있습니다. 그래도 특정 아키텍처에 연결됩니다.


충돌 지점은 디버깅하기 쉽지 않으며 .NET의 코드를 재정 의하여 해당 검사를 무시합니다. 또한 .NET에서 opcode를 어떻게 변경합니까?
Priyank Bolia 09

오. 나는 C 트릭을 염두에 두었다. 예를 들어, 유효성 검사 함수의 주소를 가져 와서 해당 char 배열에 첫 번째 10 바이트를 더하십시오 (함수 포인터 캐스트). 함수 f를 선택하고 [f의 주소에서 이전 합계를 뺀] fptr에 저장하십시오. 항상 f를 * (fptr + 해당 합계)로 호출하십시오. 사전 계산 "그 합계"
Jonas Kölker

2

좋은 응용 프로그램을 만들고 간단한 보호 시스템을 코딩하십시오. 어떤 보호를 선택하든 문제가되지 않습니다. 반대로 ... 너무 많은 시간과 돈을 낭비하지 마십시오.


2

.NET의 경우 Windows Forms 응용 프로그램 (또는 클라이언트에 Portable Executable 파일이있는 응용 프로그램)을 배포하는 경우 크랙 될 수 있습니다.

.NET을 사용하고 소스 코드를 가져올 가능성을 최소화하려면 Windows Forms 응용 프로그램 대신 웹 서버에 ASP.NET 응용 프로그램 으로 배포하는 것이 좋습니다.


2

솔직히, 때때로 우리는 코드를 난독 화해야합니다 (예를 들어, 라이센스 클래스 등록 등). 이 경우 프로젝트는 무료가 아닙니다. IMO, 당신은 좋은 난 독자를 지불해야합니다.

Dotfuscator 는 코드를 숨기고 디 컴파일을 시도 할 때 .NET Reflector 에 오류가 표시됩니다.


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