보호하다.리버스 엔지니어링의 NET 코드?
난독화는 한 가지 방법이지만, 응용 프로그램의 해적 보호 보안을 침해하는 것으로부터 보호할 수 없습니다.응용 프로그램이 손상되지 않았는지 확인하고 등록 메커니즘을 역설계할 수 없도록 하려면 어떻게 해야 합니까?
또한 C# 애플리케이션을 네이티브 코드로 변환할 수 있으며 Xenocode는 너무 비쌉니다.
C#은 많은 기능을 제공하며 제 코드에 이상적인 언어이므로 전체 코드베이스를 C++로 다시 작성하는 것은 불가능합니다.
보안 인증서는 의 서명된 어셈블리에서 쉽게 제거할 수 있습니다.그물.
그럴수는 없어요.
조금 더 어렵게 만들 수 있는 단계가 있지만, 궁극적으로 로컬 컴퓨터의 모든 실행 파일은 크래킹이 가능합니다.결국 해당 코드는 네이티브 시스템 코드로 변환되어야 하며 실행 가능한 모든 응용 프로그램은 취약합니다.
당신이 원하는 것은 단지 사람들의 수고를 덜 가치가 있게 만들기 위해 균열이 생길 정도로 어렵게 만드는 것입니다.
응용프로그램을 보호하기 위해 제안할 몇 가지 사항:
- 코드를 난독화합니다.Dotfucator에는 무료 버전이 있으며 Visual Studio와 함께 제공됩니다.
- 공용/개인 키 또는 비대칭 암호화를 사용하여 제품 라이센스를 생성합니다.이렇게 하면 사용자만 라이센스 코드를 생성할 수 있습니다.프로그램이 손상되더라도 키 생성 알고리즘을 되돌릴 수 없기 때문에 프로그램에 대한 키 생성기를 릴리스하지 않을 것입니다.
- 타사 포장기를 사용하여 포장합니다.암호화된 Win32 래퍼 응용 프로그램으로 NET 실행 파일.미다는 더 좋은 것 중 하나입니다.이렇게 하면 다른 사용자가 응용프로그램을 에 반영할 수 없습니다.NET Reflector는 후진을 위해 짐을 푸는 것을 어렵게 만듭니다.
- 사용자 지정 패커를 작성합니다.타사 패키지가 너무 비싸면 직접 작성하는 것을 고려해 보십시오.사용자 지정 패키지는 포장을 푸는 방법에 대해 잘 게시되지 않았기 때문에 매우 효과적일 수 있습니다.당신만의 패커를 쓰는 방법 튜토리얼은 당신만의 Win32 패커를 쓰는 것에 대한 많은 좋은 정보를 제공합니다.
그러나 궁극적으로, 사람들이 당신의 애플리케이션을 크래킹하기를 원한다면 그렇게 할 것입니다.응용프로그램을 보호하기 위해 방대한 양의 리소스를 보유하고 있지만 응용프로그램이 공개되기도 전에 문제가 있는 모든 상용 소프트웨어를 보십시오.
숙련된 리버스 엔지니어는 IDA-Pro를 활성화하고 당신이 무엇을 하든지 간에 당신의 애플리케이션을 버터처럼 잘라낼 수 있습니다.포장된 애플리케이션은 포장을 풀 수 있고 난독화는 단지 그것이 공원에서 산책하는 것을 방해할 뿐입니다.복잡한 라이센스 코드에 대한 모든 수고는 단일 바이트 패치로 취소할 수 있습니다.
당신은 단지 사람들이 당신의 소프트웨어를 해적질할 가능성이 매우 높다는 것을 받아들여야 합니다.어떤 사람들은 어떤 일이 있어도 당신의 신청에 절대 돈을 지불하지 않을 것이고, 이 사람들은 당신이 걱정할 필요가 없는 사람들입니다.
그러나 소송을 감수하지 않고 기꺼이 소프트웨어 라이센스를 구입하는 많은 기업과 위험을 감수하고 싶지 않거나 잘못 알고 있거나 불법 복제를 할 만큼 기술에 정통하지 않은 많은 컴퓨터 사용자가 있습니다.이들은 여러분의 진정한 고객이며, 여러분은 그들에게 좋은 사용자 경험을 제공하는 데 여러분의 노력을 집중하고 여러분의 소프트웨어를 침해하는 사람들을 무시해야 합니다.
저는 전에 제 애플리케이션을 불법 복제한 적이 있는데, 저는 그것을 개인적인 모욕으로 받아들였습니다.여기서 저는 소규모 개발자로서 애플리케이션에 심혈을 기울였는데, 이 사람들이 감히 저에게서 해적질을 했다고요?!그들은 내 주머니에서 직접 돈을 훔쳤습니다!
저는 즉시 엄격한 DRM 코드를 한 묶음 추가하고 불법적이거나 깨진 사본을 사용하여 다른 사람을 방해하려고 시도했습니다.저는 당연히 피할 수 없는 것을 막으려고 노력하는 대신에 제 애플리케이션을 더 잘 만들기 위해 노력했어야 했습니다.뿐만 아니라, 저는 제가 추가적으로 적용하고 있는 모든 보호 조치들을 진정한 고객들에게 피해를 주고 있었습니다.
오랜 싸움 끝에 저는 제가 조수와 싸우고 있다는 것을 깨달았고 이 모든 시간이 헛되이 낭비되었습니다.나는 맨본 라이선스 기능을 제외한 모든 전화번호를 빼고는 절대 뒤를 돌아보지 않았습니다.
응용프로그램을 완전히 보호할 수 없습니다(관리되는지 여부에 관계없이).공급업체가 하드웨어까지 제어하는 Playstation 및 iPad와 같은 시스템에 균열이 발생할 수 있다면 앱에 어떤 희망이 있습니까?감사하게도, 당신은 정말 원하지 않습니다.제 생각에, 당신은 누군가가 당신의 제품을 실수로 도용할 수 없을 정도로 당신의 애플리케이션을 보호해야 합니다.
예를 들어 시스템별 라이센스를 사용하는 경우 새 보조 시스템에 라이센스를 설치할 때만 라이센스가 작동하면 안 됩니다.추가 지원 요청을 방지하기 위해 좋은 오류 메시지가 필요하겠지만, 추가 시간을 들여 작업을 너무 힘들게 하지 말고 사용자의 머리를 때리지 마십시오.
또 다른 예는 시간 제한 시행입니다.사용자가 시스템 시계를 롤백할 수 있는 경우와 같은 간단한 문제에 대해서도 걱정하지 마십시오.그렇게 하는 사람은 자신이 사용자의 라이센스를 위반하고 있다는 것을 알고 있으며 사용자가 언제 위반하는지 알고 있는 한 충분히 했습니다.
사용자들은 당신의 라이선스에 관심이 없기 때문에 당신은 이 정도를 해야 합니다.면허증은 필요할 때까지 아무도 신경 쓰지 않는 지어낸 것입니다.아무도 그것들을 읽지 않습니다. 그리고 그들은 읽을 필요가 없습니다.따라서 사용자에게 경계가 어디에 있는지 알려주는 가장 좋은 방법은 응용 프로그램에 대한 기본 제공 동작이 라이센스를 준수하는지 여부입니다.이 첫 번째 경우에는 설치에 실패하거나 두 번째에는 평가판 모드로 설치하는 것을 의미합니다.후자의 경우 구성 파일에서 일반 텍스트 날짜를 확인하는 것을 의미할 수 있습니다.어느 쪽이든 우아하고, 도움이 되고, 공손한 태도로 그것을 다루어야 합니다.
그래서 그것이 무엇을 의미하는지 설명해줍니다.하지만 왜 더 이상 진행하지 않습니까?찾을 수 있는 모든 작은 구멍을 막으면 어떨까요?답은 두 부분으로 나뉩니다.첫째, 누군가가 단순한 방법으로도 의도적으로 라이센스 조항을 위반하는 윤리적 한계를 넘어선다면, 그들은 또한 토렌트 사이트에서 애플리케이션을 빼내는 것과 같이 더 어렵거나 위험한 일을 기꺼이 할 것이며, 신뢰할 수 없는 소스에서 다운로드한 애플리케이션을 실행하는 것과 관련된 어느 정도의 위험이 있습니다.이러한 사용자에게 더 어렵게 만드는 것은 사소한 골칫거리일 뿐이며 지불하는 고객에게 문제를 일으킬 위험이 있습니다.단순하게 유지하면 다른 사용자가 응용프로그램을 파고들어 보다 포괄적인 균열을 발생시키지 못할 수 있습니다.둘째, 결함을 찾는 데 사용할 수 있는 눈이 거의 없습니다. 해커들은 결함을 찾는 데 더 많은 연습을 더 많이 합니다.당신은 작은 결함 하나만 놓치기만 하면 되며, 당신의 앱은 당신이 아무것도 하지 않은 것처럼 해적 사이트에서 동일한 배포를 하게 될 것입니다.당신은 매번 옳아야 합니다. 그들은 딱 한 번만 운이 좋으면 됩니다.따라서 필요한 노력은 매우 높고 성공 가능성은 매우 낮습니다.
궁극적으로, 누군가가 (단순히 사용하는 것이 아니라) 당신의 애플리케이션을 불법 복제하고 싶어하고 그것이 그들의 주요 목표라면, 그들은 그렇게 할 것입니다.그들을 막기 위해 당신이 할 수 있는 일은 아무것도 없습니다.이것이 소프트웨어의 특성입니다. 일단 제품을 구성하는 파일이 사용자의 컴퓨터에 저장되면 사용자는 원하는 대로 사용할 수 있습니다.이는 Java 또는 와 같은 관리 환경에서 특히 유용합니다.NET, 그러나 그것은 확실히 네이티브 코드에도 적용됩니다.시간은 그들의 편이고, 디지털 보안이 깨질 수 있는 충분한 시간이 주어집니다.
사용자가 제품을 불법 복제하는 것을 막을 수 없기 때문에 이 사용자 클래스를 사용하여 사용자의 이익을 도모하는 것이 최선의 방법입니다.그들이 당신을 반대하기보다는 당신을 위해 일하도록 하는 것이 종종 가능합니다.이러한 점을 염두에 두고, 애플리케이션이 무엇이든 거의 완벽하게 작동하고 만료되지 않는 무료 버전을 유지하는 것이 가치가 있을 것입니다.US$1 가격표와 무료의 차이는 고객이 신용카드로 당신을 신뢰할 필요가 없다는 것 외에 다른 이유가 없다면 매우 큽니다.무료 버전의 제품은 해적판 배포를 효과적으로 차단할 뿐만 아니라(같은 가격으로 합법적인 제품이 될 수 있는데 왜 해적판을 위험에 빠뜨릴 수 있는가?), 고객을 극적으로 확장할 수 있는 잠재력을 가지고 있습니다.
그 결과 유료 버전의 가격을 인상해야 할 수도 있습니다. 따라서 2,000명의 사용자가 각각 20달러인 대신 100,000명의 무료 사용자가 있으며, 그 중 500명은 "전문가용" 버전에 99달러를 지불할 의향이 있습니다.이렇게 하면 제품을 잠그는 데 많은 시간을 들였을 때보다 더 많은 돈을 벌 수 있습니다.뿐만 아니라 이러한 무료 사용자를 참여시키고 몇 가지 중요한 방법으로 관계를 활용할 수 있습니다.
하나는 지원입니다.비관론자는 이 기회를 빌어 10만 명의 무료 사용자를 지원하는 데 드는 비용 증가에 대해 불평하겠지만, 대신 놀라운 일이 일어납니다: 당신의 제품은 대부분 자급자족하게 됩니다.이러한 현상은 지원 비용이 들지 않는 대규모 오픈 소스 프로젝트에서 항상 볼 수 있습니다.사용자들이 나서서 그것을 실현할 것입니다.
무료 사용자는 일반적으로 처음부터 정당한 이유로 지원에 대한 기대치를 낮춥니다.당신이 해야 할 일은 무료판을 지역사회 지원을 받을 자격이 있는 것으로 표시하고 그 목적을 위해 사용자가 조정한 온라인 포럼을 개설하는 것입니다.지원 기술 자료는 자체적으로 생성되며 고급 사용자는 사용자를 대신하여 추가적인 지원이 필요한 사용자를 지원합니다.더욱 중요한 것은 이를 통해 버그를 더 빨리 식별하고 수정할 수 있으므로 궁극적으로 제품 품질이 향상되고 총 지원 비용이 절감된다는 것입니다.이전에는 사용자 기반이 충분히 넓지 않았기 때문에 불가능했지만 무료 사용자를 고객으로 취급하면 매우 잘 작동할 수 있습니다.
또 하나는 피드백입니다.포럼을 시청함으로써, 여러분은 결코 다르게 생각해 본 적이 없을 수도 있는 중요한 개선 아이디어들 있습니다.이를 통해 궁극적으로 더 많은 무료 사용자를 유료 사용자로 전환하고 훨씬 더 많은 고객을 끌어들일 수 있는 더욱 매력적인 제품을 만들 수 있습니다.
마지막으로, 당신은 마케팅을 고려할 필요합니다.이 모든 무료 사용자들은 이제 적이 아닌 팬이고, 그들은 그에 따라 행동할 것입니다.뿐만 아니라, 다음 버전을 출시할 때 이 사용자들은 모두 다른 알려지지 않은 메커니즘이 아닌 승인된 배포 채널을 통해 확인하게 됩니다.즉, 다음 버전에서는 더 많은 관심과 지원을 제공하는 고객들과 연결됩니다.
Professional Edition용으로 예약하기에 가장 좋은 기능은 기업 배치 및 관리를 쉽게 하기 위한 도구입니다.크래커는 이것들을 자신의 용도로 해킹할 수 있는 충분한 설득력 있는 이유로 보지 않겠지만, 300개의 라이센스를 구입하여 전사적으로 확장하려는 기업에게는 이것이 필수적인 것입니다.물론, 프로판은 해적판이 될 것입니다. 하지만 다시 한 번 말씀드리지만, 여러분이 무엇을 했든 간에 해적들에게 제품을 팔 수 없을 것이기 때문에, 여러분에게 어떠한 수익도 희생시키지 않을 것입니다.
심리적으로 제품을 이렇게 많이 나눠주는 것은 어려울 수 있지만, 여러분이 그것이 정말로 어떻게 하는 것이 최선의 방법인지 이해할 수 있기를 바랍니다.뿐만 아니라, 장기적으로 가야 할 유일한 방법입니다.저는 누군가가 이런 식으로 하고 싶지 않다고 생각하고 있다는 것을 알고 있습니다.결국, 그들은 수년간 20달러짜리 상품을 팔아서 간신히 살아왔습니다.하지만 그것은 유감스러운 일입니다. 만약 여러분이 이런 식으로 하지 않는다면, 결국 다른 누군가가 할 것이기 때문입니다.그리고 그들의 제품은 당신의 제품만큼 좋을 것이고, 아니면 그들이 그것을 주장하는 것에서 벗어날 수 있을 만큼 충분히 가까울 것입니다.그런데 갑자기 가격이 터무니없어 보이고, 매출이 급격히 떨어지고, 달리 할 수 있는 일이 없습니다.필요한 경우 중간 계층을 추가로 선택할 수 있지만, 도움이 될 것 같지는 않습니다.
제 경험에 따르면, 애플리케이션이나 라이브러리를 크래킹하기 어렵게 만드는 것은 정직한 고객에게 해를 끼치고 부정직한 고객에게는 약간의 지연만 줄 뿐입니다.피할 수 없는 것을 지연시키는 데 많은 노력을 들이지 말고 훌륭하고 낮은 마찰력을 가진 제품을 만드는 데 집중하세요.
많은 사람들과 공유하는 비밀은 비밀이 아닙니다.코드에 비밀 정보가 있는 경우, 암호를 난독화하는 것은 보호가 되지 않습니다. 암호를 한 번만 해독하면 됩니다.고객과 공유하고 싶지 않은 비밀이 있다면 고객과 공유하지 마십시오.코드를 웹 서비스로 작성하고 사용자만 볼 수 있는 자신의 서버에 비밀 코드를 보관합니다.
넓게 말하면, 세 그룹의 사람들이 밖에 있습니다.
소프트웨어를 구입하지 않거나 소프트웨어를 찾지 못하는 사람은 소프트웨어를 전혀 사용하지 않습니다.이 그룹에서 돈을 벌 것이라고 기대하지 마세요.그들은 자신의 기술이나 크래커(여러분의 유용한 정보와 청중의 수에 따라 시간을 우선시하는 경향이 있음)에 의존합니다.더 유용할수록 더 빨리 균열을 이용할 수 있습니다.
사용하는 보호 메커니즘에 관계없이 소프트웨어를 구입(결제)할 합법적인 사용자 그룹입니다.합법적인 사용자가 어떤 경우에도 비용을 지불할 것이므로 정교한 보호 메커니즘을 사용하여 합법적인 사용자의 삶을 어렵게 만들지 마십시오.복잡한 보호 메커니즘으로 인해 사용자 환경이 쉽게 손상될 수 있으므로 이 그룹에 이러한 현상이 발생하지 않도록 해야 합니다.개인적으로, 저는 소프트웨어 비용을 증가시키는 하드웨어 솔루션에 반대합니다.
소프트웨어의 기능이 라이센스 메커니즘에 의해 보호되기 때문에 "비윤리적인" 크래킹에 의존하고 소프트웨어에 대한 비용만 지불하는 소수의 사람들.이 그룹이 사용자의 보호를 피하는 것을 매우 쉽게 만들고 싶지 않을 수도 있습니다.그러나 소프트웨어를 보호하기 위해 들인 모든 노력은 이 사람들의 규모에 따라 보상을 받을 것입니다.이는 전적으로 빌드 중인 소프트웨어 유형에 따라 다릅니다.
말씀하신 바와 같이 소프트웨어를 구매하도록 강요받을 수 있는 소수가 충분히 있다고 생각되는 경우 보호 기능을 구현하십시오.보호 작업에 소요되는 시간과 비교하여 이 소수자로부터 얼마나 많은 돈을 벌 수 있는지, 타사 보호 API/툴에 소요되는 비용을 생각해 보십시오.
독자적인 솔루션을 구현하려면 대칭 알고리즘과 달리 공개 키 암호화를 사용하는 것이 쉬운 해킹을 방지하는 좋은 방법입니다.예를 들어 라이센스에 디지털 서명(일련 번호 또는 라이센스 파일)할 수 있습니다.이 문제를 해결할 수 있는 유일한 방법은 코드를 분해, 변경 및 재컴파일하는 것입니다(시무칼의 답변과 같은 기술을 사용하면 더 어려워질 수 있음).
사람들이 당신의 소프트웨어를 해킹하는 것을 막을 수는 없습니다.
하지만, 여러분은 그들이 여러분의 매출에 덜 타격을 줄 균열을 만들도록 할 수 있습니다.소프트웨어에 대해 유효한 등록 코드를 발급할 수 있는 키 생성기는 소프트웨어에서 등록 인센티브를 제거하는 단순 패치보다 훨씬 못합니다.이는 크랙이 한 소프트웨어 버전에서만 작동하고 다음에 릴리스하는 소프트웨어 업데이트에서는 작동하지 않기 때문입니다.키 생성기는 등록 키 알고리즘을 변경할 때까지 계속 작동합니다. 이는 정직한 고객을 지연시키기 때문에 자주 하고 싶지 않은 작업입니다.
따라서 소프트웨어에 대한 불법 키 생성기를 방지하는 방법을 찾고 있으며 이를 통해 생성되는 긴 등록 코드 때문에 비대칭 암호화를 사용하지 않으려는 경우 부분 키 확인을 검토할 수 있습니다.
부분 키 확인은 각 불법 키 생성기가 소프트웨어의 특정 릴리스에 대해서만 작동하는지 확인합니다.기본적으로 소프트웨어의 각 릴리스는 등록 코드의 일부 자리만 확인하는 코드와 연결되도록 해야 합니다.정확히 어떤 숫자가 무작위인지는 알 수 없으므로 크래커는 소프트웨어의 모든 버전에 사용할 수 있는 키 생성기를 릴리스하려면 소프트웨어의 여러 다른 버전을 역설계하고 이 모든 것을 하나의 키 생성기로 결합해야 합니다.
새 소프트웨어 버전을 정기적으로 릴리스하면 더 이상 작동하지 않는 모든 종류의 소프트웨어 불법 복제 아카이브에 수많은 키 생성기가 분산됩니다.잠재적인 소프트웨어 해적들은 보통 최신 버전을 위한 크랙이나 열쇠를 찾기 때문에, 그들은 그것들 중 몇 가지를 시도하고 결국 포기할 것입니다.
최신 쉐어웨어 게임(C++)에서 부분 키 확인 기능을 사용했는데 매우 효과적이었습니다.우리가 싸울 수 없는 주요 발전기에 대한 많은 문제가 있기 전에.그 후에 많은 균열이 생겼고 게임의 특정 버전에서만 작동하는 몇 개의 키 생성기가 있었지만 모든 버전에서 작동하는 키 생성기는 없었습니다.우리는 정기적으로 게임의 아주 사소한 업데이트를 공개했고 이전에 존재했던 모든 크랙을 쓸모없게 만들었습니다.
오픈 소스가 있는 것 같습니다.부분 키 검증을 위한 NET 프레임워크입니다. 시도해 본 적었습니다.
온라인 업데이트를 사용하여 라이센스가 없는 복사본을 차단합니다.
응용 프로그램의 다른 모듈에서 일련 번호를 확인하고 단일 함수 호출을 사용하여 확인하지 마십시오(크래커가 쉽게 확인을 무시할 수 없음).
시작할 때 일련 번호를 확인하고, 데이터를 저장하면서 확인하고, 매주 금요일 저녁에 수행하고, 사용자가 유휴 상태일 때 수행합니다.
응용 프로그램 파일 체크섬을 확인하고 보안 체크섬을 다른 위치에 저장합니다.
등록 코드를 확인하는 동안 응용 프로그램이 충돌하거나 오작동하지 않도록 주의하십시오.
을 만드는 이 사용자를 위해 것보다 더 합니다.
크래커를 위한 깨지지 않는 바이너리.
넌 할 수 있어요.
Microsoft SLP 서비스 InishTech의 Software Potential은 응용 프로그램의 기능에 영향을 주지 않고 코드를 보호할 수 있는 기능을 제공합니다.
업데이트: (공개: 저는 Eazfulcator에서 일합니다.NET) 만드는 것
Microsoft SLP 서비스 소프트웨어 잠재력은 코드를 가상화하는 기능이 다르므로 당연히 가능합니다.이 질문이 처음 제기된 지 몇 년이 지난 현재 다음과 같은 유사한 기반으로 작동하는 제품이 더 많습니다.
.NET Reflector는 기본적으로 "관리 코드"만 열 수 있습니다.NET 코드".따라서 COM DLL 파일, 네이티브 C++, 클래식 비주얼 베이직 6.0 코드 등을 분해하는 데 사용할 수 없습니다.컴파일된 의 구조입니다.NET 코드는 그것을 매우 편리하고, 휴대할 수 있고, 발견할 수 있고, 검증할 수 있는 등으로 만듭니다.NET Reflector는 이 기능을 사용하여 컴파일된 어셈블리를 들여다 볼 수 있지만 디컴파일러 및 디컴파일러는 에 한정되지 않습니다.NET은 컴파일러가 존재했던 만큼 존재했습니다.
난독화기를 사용하여 코드를 읽기 어렵게 만들 수 있지만, 로 읽을 수 없게 하지 않고는 코드가 압축 해제되는 것을 정확하게 방지할 수 없습니다.NET. 관리되는 코드 응용프로그램을 네이티브 코드 응용프로그램에 "연결"한다고 주장하는 소수의 제품(일반적으로 고가)이 있습니다. 그러나 이러한 제품이 실제로 작동하더라도 확고한 사람은 항상 방법을 찾을 수 있습니다.
하지만 난독화에 관한 한, 당신은 당신이 지불한 것을 얻습니다.그러므로 당신의 코드가 너무 독점적이어서 그것을 보호하기 위해 그렇게 많은 노력을 해야 한다면, 당신은 기꺼이 좋은 난독화기에 돈을 투자해야 합니다.
하지만 15년 정도의 코드 작성 경험을 통해 소스 코드를 과도하게 보호하는 것은 시간 낭비이며 이점이 거의 없다는 것을 깨달았습니다.문서, 주석 등을 뒷받침하지 않고 원본 소스 코드를 읽으려고 시도하는 것은 매우 이해하기 어려울 수 있습니다.거기에 디컴파일러가 생각해내는 무의미한 변수 이름과 현대의 난독화자들이 만드는 스파게티 코드까지 더하면, 여러분은 아마도 사람들이 여러분의 지적 재산을 훔치는 것에 대해 너무 걱정할 필요가 없을 것입니다.
정말 그럴 가치가 있나요?모든 보호 메커니즘은 충분한 각오로 파괴될 수 있습니다.시장, 제품 가격, 고객 수 등을 고려합니다.
좀 더 안정적인 것을 원한다면 하드웨어 키를 사용하는 것이 좋지만, 사용자에게는 오히려 번거롭고 비용이 많이 듭니다.소프트웨어 솔루션은 아마도 시간과 리소스를 낭비하는 것일 것이며, 소프트웨어 솔루션이 제공하는 유일한 것은 '보안'에 대한 잘못된 인식입니다.
더 이상 아이디어가 거의 없습니다(완벽한 아이디어가 없기 때문에 완벽한 아이디어는 없습니다).
그리고 너무 많은 시간을 낭비하지 마세요. 크래커들은 전형적인 기술에 대한 많은 경험을 가지고 있고 여러분보다 몇 단계 앞서 있기 때문입니다.많은 리소스를 사용하지 않으려면 프로그래밍 언어를 변경하십시오(Skype 방식으로).
구매 보호 외에도 사용자(또는 개발자)는 복사 방지 방법을 배울 수 있습니다.
아이디어는 다음과 같습니다.
처음에는 스스로 콘솔에 기록하는 프로그램을 작성합니다.그것은 유명한 문제입니다.이 작업의 주요 목적은 자체 참조 코드 작성 연습입니다.
둘째, 당신은 다른 방법의 CIL에 의존하는 방식으로 일부 코드를 다시 작성하는 기술을 개발해야 합니다.
가상 시스템을 작성할 수 있습니다(아직).NET) 그리고 거기에 코드를 넣습니다.궁극적으로 가상 시스템은 코드를 실행하는 다른 가상 시스템을 실행합니다.이는 성능을 너무 느리게 하지 않기 위해 거의 호출되지 않는 기능의 일부에 대한 것입니다.
일부 논리를 C++/CLI에 다시 쓰고 관리되는 코드와 관리되지 않는 코드를 혼합합니다.이렇게 하면 분해가 경화됩니다.이 경우 x64 바이너리도 제공해야 합니다.
사람들이 코드를 실행할 수 있도록 하려면(사용자가 코드를 실행할 수 없다면 왜 처음에 코드를 작성했습니까?) CPU가 코드를 실행할 수 있어야 합니다.코드를 실행할 수 있으려면 CPU가 코드를 이해할 수 있어야 합니다.
CPU는 멍청하고 인간은 그렇지 않기 때문에, 이것은 인간도 코드를 이해할 수 있다는 것을 의미합니다.
사용자가 코드를 받지 않도록 하는 방법은 단 한 가지뿐입니다. 코드를 사용자에게 제공하지 마십시오.
이는 두 가지 방법으로 달성할 수 있습니다.SaaS(Software as a Service) 즉, 서버에서 소프트웨어를 실행하고 사용자가 원격으로만 액세스할 수 있도록 합니다.예를 들어 스택 오버플로가 사용하는 모델입니다.스택 오버플로가 그들의 코드를 난독화시키지는 않을 것이라고 확신하지만, 당신은 그것을 분해할 수 없습니다.
다른 방법은 어플라이언스 모델입니다. 사용자에게 코드를 제공하는 대신 코드가 들어 있는 컴퓨터를 제공합니다.이것은 대부분의 휴대폰과 TiVo와 같은 게임 콘솔이 사용하는 모델입니다.이는 전체 실행 경로를 "소유"한 경우에만 작동합니다. 즉, 사용자 자신의 CPU, 사용자 컴퓨터, 사용자 운영 체제 및 사용자 CLI 구현을 직접 작성해야 합니다.그런 다음에야 코드를 보호할 수 있습니다. (그러나 아주 작은 실수도 모든 보호를 무용지물로 만들 수 있습니다.)마이크로소프트, 애플, 소니, 음악 산업, 영화 산업이 그것을 증명할 수 있습니다.)
또는 아무것도 할 수 없으며, 이는 코드가 저작권법에 의해 자동으로 보호된다는 것을 의미합니다.
불행하게도, 당신은 이것으로부터 도망치지 않을 것입니다.당신의 최선의 방법은 코드를 C로 작성하고 P/Invoke하는 것입니다.
작은 catch-22가 있습니다. 누군가가 당신의 애플리케이션을 CIL로 압축 해제하고 모든 확인/활성화 코드(예: C 라이브러리로의 호출)를 죽일 수 있습니다.C로 작성된 애플리케이션도 더 지속적인 해커에 의해 리버스 엔지니어링된다는 것을 기억하십시오(요즘 게임이 얼마나 빨리 크래킹되는지 보세요).어떤 것도 프로그램을 보호하지 않습니다.
결국 그것은 당신의 집처럼 작동하고, 그것이 너무 많은 노력을 하도록 충분히 잘 보호하세요. (스파게티 코드는 여기에 도움이 될 것입니다) 그리고 공격자가 당신의 옆집 이웃 (경쟁:)으로 이동합니다.Windows Vista(윈도우 비스타)를 보면 10가지 방법으로 크래킹할 수 있습니다.
EXE 파일을 암호화하고 사용자가 사용할 수 있을 때 암호를 해독하는 패키지가 있지만, 다시 한 번 말하지만, 이 패키지는 의심할 여지 없이 크래킹된 일반 솔루션을 사용하는 것입니다.
활성화 및 등록 메커니즘은 '평균적인 Joe:'를 목표로 합니다. 이를 우회할 수 있는 충분한 기술 지식이 없는 사람들(또는 이 문제에 대해 그들이 우회할 수 있다는 것을 알고 있습니다.크래커에 신경 쓰지 마세요, 그들은 손에 너무 많은 시간을 가지고 있습니다.
네, 사실입니다.NET 코드는 코드가 난독화되지 않으면 역엔지니어링하기가 매우 쉽습니다.
난독화는 소프트웨어를 역설계하려는 사람들에게 짜증을 더합니다.사용하는 버전에 따라 다양한 수준의 보호를 받을 수 있습니다.
Visual Studio에는 Dotfucator 버전이 포함되어 있습니다.번들 버전이기 때문에 가장 강력한 난독화를 얻을 수 없습니다.기능 목록을 보면 누락된 내용과 프로그램이 코드를 보다 안전하게 보호하기 위해 수행하는 작업이 정확히 표시됩니다.
다른 무료 또는 오픈 소스가 몇 가지 있습니다.NET 난독화기(그러나 그들이 사용하는 품질이나 다양한 방법에 대해서는 언급할 수 없습니다):
결국, 완벽한 것은 없습니다.만약 누군가가 당신의 소프트웨어가 어떻게 작동하는지 보고 싶다면, 그렇게 할 것입니다.
흠, 제품에 금이 가는 것을 완벽하게 보호할 수는 없지만, 보안 수준을 최대화/향상시킬 수 있으며, 초보자나 중간 크래커에 의해 금이 가는 것을 약간 어렵게 만들 수 있습니다.
그러나 크래킹이 불가능한 것은 없으며, 서버 측의 소프트웨어만 잘 보호되고 크래킹이 불가능하다는 점을 명심하십시오.어쨌든 응용 프로그램의 보안 수준을 향상시키기 위해 일부 크래커가 응용 프로그램을 크래킹하지 않도록 몇 가지 간단한 단계를 수행할 수 있습니다.이 단계들은 이 크래커들을 미치게 만들 것이고 아마도 필사적일 것입니다.
- 소스 코드를 난독화하면 소스 코드가 엉망이고 읽을 수 없게 됩니다.
- 매 2시간, 24시간, 하루, 일주일 등 또는 사용자가 수행하는 모든 작업 후와 같이 응용프로그램 내에서 여러 임의 검사 루틴을 트리거합니다.
- 릴리스된 응용프로그램의 MD5 체크섬을 서버에 저장하고 현재 파일 MD5 체크섬을 서버 측의 실제 파일로 확인하여 임의로 트리거할 수 있는 루틴을 구현합니다.MD5 체크섬이 변경된 경우 이 복사본이 불법 복제되었음을 의미합니다.이제 차단하거나 업데이트를 해제하여 차단하는 등의 작업을 수행할 수 있습니다.
- 일부 코드(함수, 클래스 또는 특정 루틴)가 실제로 수정 또는 변경되었는지 또는 제거되었는지 확인할 수 있는 루틴을 만드십시오.저는 그것을 (코드 무결성 검사)
- 알 수 없는 무료 패커를 사용하여 응용 프로그램을 포장합니다.아니면, 돈이 있다면 타미다나 같은 상업적인 해결책을 찾아보세요.NET 원자로.이러한 응용 프로그램은 정기적으로 업데이트되고 크래커가 응용 프로그램을 열면 해당 회사로부터 새 업데이트를 받을 수 있으며 새 업데이트를 받으면 프로그램을 포장하고 새 업데이트를 릴리스할 수 있습니다.
- 정기적으로 업데이트를 릴리스하고 고객이 최신 업데이트를 다운로드하도록 합니다.
- 마지막으로 애플리케이션을 매우 저렴하게 만드십시오.너무 비싸게 하지 마세요.저를 믿으세요, 여러분은 더 많은 행복한 고객들을 얻을 것이고 크래커들은 여러분의 애플리케이션을 떠날 것입니다. 왜냐하면 그들의 시간이 매우 싼 애플리케이션을 크래킹할 가치가 없기 때문입니다.
이러한 방법은 초보자와 중간 크래커가 응용 프로그램을 크래킹하지 않도록 하는 간단한 방법입니다.애플리케이션을 보호하기 위한 아이디어가 더 있다면 주저하지 말고 구현하십시오.크래커들의 삶을 힘들게 만들 것이고, 그들은 좌절하게 될 것이고, 결국 그들은 당신의 애플리케이션을 떠날 것입니다. 왜냐하면 그것은 단지 그들의 시간 가치가 없기 때문입니다.
마지막으로, 여러분은 우수하고 품질이 좋은 응용 프로그램을 코딩하는 데 시간을 보내는 것도 고려해야 합니다.복잡한 보안 계층을 코딩하는 데 시간을 낭비하지 마십시오.좋은 크래커가 당신의 애플리케이션을 크래킹하고 싶다면 당신이 무엇을 하든 그/그녀는 할 것입니다.
가서 크래커들을 위한 장난감들을...
여러 개의 세부 비교 시트가 있습니다.NET 난독화 도구:
현지인인 샐러맨더가 있습니다.원격 소프트웨어의 NET 컴파일러 및 링커로, 를 사용하지 않고 애플리케이션을 배포할 수 있습니다.NET 프레임워크.나는 그것이 얼마나 주장에 부응하는지 모릅니다.
마이크로소프트가 해결책을 생각해 낼 수 있다면, 우리는 윈도우 버전을 불법 복제하지 않을 것이기 때문에 어떤 것도 매우 안전하지 않습니다.다음은 스택 오버플로의 몇 가지 유사한 질문이며 이를 보호하는 고유한 방법을 구현할 수 있습니다.다른 버전을 릴리스하는 경우 다른 버전에 대해 다른 기술을 채택할 수 있으므로 첫 번째 버전이 크래킹될 때까지 두 번째 버전이 작업을 인계받을 수 있습니다.
갱신하다
재러드는 디포닷이 디포닷을 분해할 수 있다고 주장한다고 지적했습니다.
.NET Reactor는 를 변환하여 중요한 지적 재산을 완벽하게 보호합니다.NET은 CIL로 이해할 수 없고 기존 도구가 압축 해제할 수 없는 관리되지 않는 프로세스로 조립됩니다.해커는 사용자 소스의 지능적인 형태에 액세스할 수 없습니다.
강력하고 유연한 기능을 제공합니다.NET Reactor 라이센스 기능을 사용하면 하드웨어 및 소프트웨어 잠금을 사용하여 라이센스 조건을 적용하고 수익 스트림을 보호할 수 있습니다.라이센스 관리자는 몇 초 만에 평가판 또는 영구 라이센스를 구축할 수 있습니다.예제와 함께 완전하게 문서화된 SDK(소프트웨어 개발 키트)를 사용하면 라이센스 시스템을 코드에서 직접 호출할 수 있으므로 라이센스 시스템에 대한 사용자 지정 확장을 만들 수 있습니다.
여기 한 가지 아이디어가 있습니다. 소프트웨어의 모든 인스턴스를 연결해야 하는 회사에서 호스팅하는 서버가 있을 수 있습니다.단순히 연결하고 등록 키를 확인하는 것만으로는 충분하지 않습니다. 체크를 제거하기만 하면 됩니다.키 검사 외에도 클라이언트가 직접 수행할 수 없는 중요한 작업을 서버가 수행하도록 해야 하므로 제거할 수 없습니다.이는 물론 서버 측에서 많은 양의 처리가 필요하다는 것을 의미하지만, 소프트웨어를 훔치기 어렵게 만들고, 키 구성표가 좋다고 가정할 경우(소유권 확인 등) 키도 훔치기 어렵게 됩니다.소프트웨어를 사용하려면 사용자가 인터넷에 연결되어 있어야 하기 때문에 이 방법은 사용자가 원하는 것보다 더 침해적일 수 있습니다.
클라이언트에서 실행 중인 모든 항목이 분해되고 균열이 발생할 수 있습니다.난잡함은 단지 그것을 더 어렵게 만들 뿐이죠.저는 당신의 지원서를 모르지만, 99%는 그저 노력할 가치가 없다고 생각합니다.
애플리케이션을 완전히 보호하는 것은 불가능합니다, 죄송합니다.
코드를 난독화합니다!난독화 C# 코드에 예시가 있습니다.
99% 이상의 사용자가 실행 파일이 어떻게 작동하는지 확인하는 데 관심이 없습니다.
시도하는 사람이 거의 없고 대부분의 난독화가 해결될 수 있다는 것을 고려할 때, 당신의 시간과 노력을 들일 가치가 있습니까?
더 많은 사람들이 제품을 사용하기를 원하도록 제품을 개선하는 데 시간을 투자하는 것이 좋습니다.
경고를 덧붙이자면, 만약 당신이 난독화를 사용한다면, 모든 것이 여전히 작동하는지 확인하세요!난독화는 클래스 및 메서드 이름과 같은 것을 변경할 수 있습니다.따라서 플러그인 아키텍처에서처럼 리플렉션을 사용하여 특정 메서드 및/또는 클래스를 호출하면 응용 프로그램이 난독화된 후 실패할 수 있습니다.또한 스택 추적은 오류를 추적하는 데 유용하지 않을 수 있습니다.
에 적혀있으면.NET 및 CIL에 컴파일되어 반영될 수 있습니다.보안이 문제가 되어 난독화를 피할 수 없다면, 자연스럽게 역엔지니어링하기 어려운 비관리 언어를 사용하여 애플리케이션을 작성하는 것이 좋습니다.
응용 프로그램이 손상되지 않도록 하는 방법 및 등록 메커니즘이 역설계되지 않도록 하는 방법.
둘 다 매우 간단한 답을 가지고 있습니다. 즉, 고객과 같이 신뢰할 수 없는 당사자에게 객체 코드를 배포하지 마십시오.컴퓨터에서 응용프로그램을 호스팅할 수 있는지 여부는 응용프로그램이 수행하는 작업에 따라 달라집니다.
웹 응용 프로그램이 아니라면 응용 프로그램 서버(또는 Windows의 경우 원격 데스크톱 연결)로 X 포워딩하는 SSH 로그인을 허용할 수 있습니다.
만약 당신이 괴짜 타입의 사람들에게 오브젝트 코드를 주면, 그들이 당신의 프로그램이 크래킹하는 것이 재미있을 것이라고 생각한다면, 그것은 크래킹될 것입니다.그럴 리가 없어요.
내 말을 못 믿겠으면, 크래킹되지 않고 불법 복제되지 않은 유명한 애플리케이션을 지적하십시오.
하드웨어 키를 사용하면 생산 비용이 더 많이 들고 사용자들은 사용자를 싫어하게 될 것입니다.소프트웨어 제조업체가 당신을 믿지 않기 때문에 바닥에서 기어다니며 27개의 다른 USB 장치를 꽂고 뽑는 것은 정말 나쁜 일입니다.
EXE를 암호화하고 사용자가 EXE를 사용할 수 있을 때 암호를 해독하는 패키지가 있습니다.
물론, 그것을 피하는 방법은 "내가 사용할 수 있는" 테스트를 깨서 그것이 항상 진실로 돌아오도록 하는 것입니다.
잘못된 속임수는 프로그램의 다른 위치에서 테스트를 수행하는 작업 코드의 바이트 값을 사용하여 값이 정확하지 않은 경우 프로그램이 충돌할 확률이 높은 더티한 방식으로 사용하는 것일 수 있습니다.하지만 특정 아키텍처에 연결할 수 있습니다. :-(
좋은 응용 프로그램을 만들고 간단한 보호 시스템을 코딩하면 됩니다.당신이 어떤 보호를 선택하든, 그것은 뒤집어질 것입니다.그러니 너무 많은 시간을 낭비하지 마세요.
에 관한 한.NET에서 Windows Forms 응용 프로그램(또는 클라이언트에 휴대용 실행 파일이 있는 응용 프로그램)을 릴리스하는 경우 응용 프로그램에 균열이 발생할 수 있습니다.
당신이 계속하고 싶다면요.NET에서 소스 코드를 가져올 가능성을 최소화하려면 ASP로 배포하는 것을 고려해야 합니다.웹 서버 전체의 NET 응용 프로그램을 Windows Forms 응용 프로그램으로 만드는 대신 사용합니다.
솔직히, 때때로 우리는 코드를 난독화해야 합니다(예: 라이센스 클래스 등록 등).이 경우 프로젝트는 무료가 아닙니다.IMO, 당신은 좋은 난독제에 돈을 지불해야 합니다.
Dotfucator는 사용자의 코드와 를 숨깁니다.NET Reflector를 압축 해제하려고 하면 오류가 표시됩니다.
언급URL : https://stackoverflow.com/questions/506282/protect-net-code-from-reverse-engineering
'programing' 카테고리의 다른 글
Git의 분기에서 변경 사항을 가져오는 방법 (0) | 2023.05.11 |
---|---|
Mongodb에서 키를 기반으로 중복을 제거하는 방법은 무엇입니까? (0) | 2023.05.11 |
기존 Git 분기 추적을 원격 분기로 설정하시겠습니까? (0) | 2023.05.11 |
두 개의 IEnumberable을 새로운 IEnumberable로 연결하는 방법은 무엇입니까? (0) | 2023.05.11 |
NgModule에서 선언, 제공자 및 가져오기의 차이점은 무엇입니까? (0) | 2023.05.11 |