개인적으로는 경제적인가 아닌가의 문제가 있을 뿐, 결국 디스어셈블과 리버스 엔지니어링을 막을 방법은 없다고 보는게 타당하다고 생각합니다.
대신, 무단 사용 사례를 짚어낼 목적으로, 우회가 불가능한 핵심적인 로직들을 서버를 경유하도록 바꿀 수 있는 부분이 있는지 살펴보시고, 통신이 이루어질 때 로그를 수집하면서 원격지의 IP를 모니터링하도록 하는 방법을 사용하신다면 사후 추적을 통해 라이선스 위반 사실에 대한 내용 증명을 발송하는 것은 가능할 것 같습니다.
기술적으로는 말씀하신것처럼 쓰지 않을 수 없는 핵심적인 클래스에 static 생성자를 추가하여 관련 로직을 넣어두는 것이 유일한 방법이 될 것 같습니다만, 작정하고 달려들어 디스어셈블과 리버스 엔지니어링을 하고자 하는 경우는 막기 어렵다고 봅니다.
그리고 소프트웨어 카피 단위로 계약을 만드는 것 외에, AGPL (Affero GPL) 같은 전파력이 강한 오픈 소스 라이선스와 함께 듀얼 라이선스 모델을 운영하는 것도 합리적일 수 있습니다. 이 방법으로 소프트웨어에 대한 권리를 보호하면서도 수익화를 달성하는 사례가 많이 있습니다.