.NET 어셈블리 서명:이것이 실제로 내 어셈블리가 변조되는 것을 방지합니까?

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

  •  22-08-2019
  •  | 
  •  

문제

내 앱이 불법적으로 복사되거나 사용되는 것을 방지하는 "잠금" 시스템을 내 앱에 구현하고 있습니다.시스템은 하드웨어 기반 코드의 서명을 확인하고 우리 회사만이 소유한 개인 키로 서명될 것으로 예상합니다.(앱에는 서명을 검증하기 위한 공개 키가 있습니다.)

나는 앱에서 내 잠금 메커니즘을 누구도 변경하지 못하도록 하고 싶기 때문에 내 앱의 어셈블리에 서명하고 싶고 이것이 타당하다고 생각합니다.

  1. CLR에서 어셈블리 서명이 유효하지 않다고 말하는 것을 본 적이 없기 때문에 이 시스템이 실제로 작동하는지 확인하고 싶습니다.그렇습니까?작동하게 하려면 어떻게 해야 합니까?
  2. 공격자가 내 서명에 신경 쓰지 않도록 CLR에 노력을 집중할 수 있습니까?즉, 내가 서명했기 때문에 그 사람이 내 코드를 조작할 수 없다면 CLR도 조작할 수 있을까요?
  3. 일반적으로 이러한 안전 장치 및 보호 기술에 대한 귀하의 경험을 알고 싶습니다.누구든지 다른 것을 제안할 수 있나요?
도움이 되었습니까?

해결책

어셈블리 서명은 응용 프로그램/어셈블리가 어셈블리를 참조 할 수 있도록 설계되었으며 원래 참조 한 어셈블리를 얻을 수 있습니다. 누군가가 원한다면, 이론적으로 전체 앱을 디 컴파일하고 서명없이 다시 컴파일 할 수 있습니다. (예 : 그들은 다시 컴파일 할 수있었습니다 참조 조립 서명되지 않은 버전의 참조 된 어셈블리).

클라이언트 (EXE)는 이제 서명되지 않은 (또는 '다시 서명 된') DLL을 참조하기 때문에 원하는대로 코드를 수정할 수 있습니다.

분해 및 재 컴파일 프로세스를 더욱 어렵게 만들려면 관리 된 코드 및 기본 코드를 모두 포함하는 혼합 모드 C ++/CLI 어셈블리를 만들 수 있습니다. 그러나 그렇습니다 ... 궁극적으로 사람들은 당신의 모든 바이너리를 가지고 있으며 충분한 노력으로 당신이 생각하는 라이센스 시스템을 반올림 할 수 있습니다.

다른 팁

서명 된 어셈블리에 대한 특정 오해가 있습니다. Mackenir가 지적했듯이 어셈블리 서명은 어셈블리가 조작되는 것을 막기 위해 사용되는 안전한 메커니즘이 아닙니다. CodeProject의 다음 기사는 주제를 꽤 잘 처리합니다.

http://www.codeproject.com/kb/security/strongnameexplained.aspx

코드에 서명하면 변조 감지만 가능하며 방지할 수는 없습니다.자신이 무엇을 하고 있는지 아는 사람은 귀하의 서명을 제거하고 필요한 경우 자신의 서명을 추가할 수 있습니다.

실제로 대부분의 복사 방지 계획은 시간 낭비이고 전복될 수 있으며 유료 고객을 짜증나게 하는 경향이 있습니다.궁극적으로 누군가가 자신이 제어하는 ​​하드웨어에서 코드를 수정하고 실행하는 것을 막을 수는 없습니다.구매 부서에 가서 수표를 작성하는 것이 더 쉽고 라이센스 사본이 없다는 사실을 잊기 어려울 정도로 충분히 어렵게 만드십시오.관심을 갖는 사람은 결국 비용을 지불하게 될 것이고, 그렇지 않은 사람은 결코 비용을 지불하지 않을 것입니다.

또한 대부분의 사람들이 당신의 계획을 깨뜨리는 것을 귀찮게 하지 않거나 그것을 할 수 있는 기술이 없다고 생각하더라도 그것은 중요하지 않습니다.한 사람이 귀하의 복사 방지 계획을 파괴하면 이를 수행할 기술이 없는 사람들을 위해 토렌트 사이트에서 사용할 수 있도록 할 수 있으며 게임은 끝나게 됩니다.

당신이 사용할 수있는 한 가지 기술은 변조를 방지하는 것입니다. 어셈블리의 공개 키를 사용하여 응용 프로그램/알고리즘 매개 변수와 같은 소프트웨어의 필수 부분을 암호화하는 것입니다. 공개 키가 변경되면 암호 해독이 작동하지 않고 앱이 충돌합니다.

다음과 같은 일부 난독 자 암호화 오염기 문자열 암호화 기능과 함께이 기술을 사용하십시오. 어셈블리의 공개 키를 사용하여 모든 문자열을 암호화합니다. 공개 키가 변경되거나 제거되면 암호 해독이 실패하고 앱이 시작되지 않습니다.

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