SDK 만들어 보신분 계실까요?

회사에서 만든 라이브러리에 라이선스 기능을 넣으려고 합니다.
프레임웍은 .net8 로 만들어져 있습니다.

난독화는 되어 있지만 public 메소드나 프로퍼티 이름은 공개가 되어
모듈 참조하고 어느정도 유추해서 호출하면 돌아는 갈수 있습니다.

아예 승인 되지 않은 프로그램은 모듈을 로딩도 못하게 막는게 목표인데

대충… 생각해본 방법은

모듈의 중요 클래스에 static 생성자를 만들고
그 생성자에서 같은 경로에 a.lic 파일을 읽어서
해당 값이 정상이면 통과, 아니면 프로그램 종료.

.net은 DllMain이 없다보니 위와 같은 방법 말고는
생각이 나지 않았습니다.

좀 더 깔끔한 기술이 없을까요?

개인적으로는 경제적인가 아닌가의 문제가 있을 뿐, 결국 디스어셈블과 리버스 엔지니어링을 막을 방법은 없다고 보는게 타당하다고 생각합니다.

대신, 무단 사용 사례를 짚어낼 목적으로, 우회가 불가능한 핵심적인 로직들을 서버를 경유하도록 바꿀 수 있는 부분이 있는지 살펴보시고, 통신이 이루어질 때 로그를 수집하면서 원격지의 IP를 모니터링하도록 하는 방법을 사용하신다면 사후 추적을 통해 라이선스 위반 사실에 대한 내용 증명을 발송하는 것은 가능할 것 같습니다.

기술적으로는 말씀하신것처럼 쓰지 않을 수 없는 핵심적인 클래스에 static 생성자를 추가하여 관련 로직을 넣어두는 것이 유일한 방법이 될 것 같습니다만, 작정하고 달려들어 디스어셈블과 리버스 엔지니어링을 하고자 하는 경우는 막기 어렵다고 봅니다.

4개의 좋아요

그리고 소프트웨어 카피 단위로 계약을 만드는 것 외에, AGPL (Affero GPL) 같은 전파력이 강한 오픈 소스 라이선스와 함께 듀얼 라이선스 모델을 운영하는 것도 합리적일 수 있습니다. 이 방법으로 소프트웨어에 대한 권리를 보호하면서도 수익화를 달성하는 사례가 많이 있습니다.

1개의 좋아요

감사합니다.
리버싱이야 못막는거고… (더미다…?)
쉽게 쓰지만 못하게 해도 일단은 될거 같습니다.

제 생각이 혹시 틀렸나? 싶기도 했고
다른 좋은 방법이 없나 싶었었는데
말씀하신거 보니 맞는 방법 같네요.

2개의 좋아요

넵. 그리고 로그 수집도 같이 넣어두시는 것을 추천드립니다. 어차피 리버싱이나 디스어셈블링으로 뚫린다고 가정하고 대비책을 세우시는게 회사 방침에 부합할것이란 생각이 듭니다.

2개의 좋아요

참고로 C# 9.0에 DllMain과 유사한 ModuleInitializer가 추가됐습니다.

.NET Framework: 964. C# 9.0 - (13) 모듈 이니셜라이저(Module initializers) (sysnet.pe.kr)

7개의 좋아요

와! 딱 찾고 있었는데 감사합니다!!

1개의 좋아요