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

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

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

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

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



답변

당신은 할 수 없습니다.

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

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

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

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

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

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

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

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

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

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

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

a

답변

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

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

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

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

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

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

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

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

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

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

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

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

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

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


답변

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


답변

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


답변

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

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

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

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

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

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


답변

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

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

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

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

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

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

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


답변

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

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

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

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

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

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


댓글 달기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다