이는 독일의 한 크래커가 어찌저찌 구한 젯브레인의 루트 인증서와 몇 개의 시드를 통해 디코딩에 성공하여 추출한 정보이므로, 너님의 라이선스 키 또한 이런 구조를 가지고 있다고 보면 된다.

{
    "LicenseId": "네 라이선스 키 중 첫번째 대시(-) 앞에 있는 일종의 식별 ID",
    "LicenseeName": "라이선스 소유자",
    "AssigneeName": "라이선스 제공자 이름(주로 License Server에서 제공)",
    "AssigneeEmail": "라이선스 제공자 이메일(주로 License Server에서 제공)",
    "LicenseRestriction": "라이선스 제약사항 문자열",
    "CheckConcurrentUse": false, // 동시 사용 허용 여부
    "Products": [ // 각 제품 코드와 사용기한
      { "Code": "II",  "PaidUpTo": "2020-12-31" }, // IntelliJ IDEA
      { "Code": "AC",  "PaidUpTo": "2020-12-31" }, // AppCode
      { "Code": "DPN", "PaidUpTo": "2020-12-31" }, // DotTrace
      { "Code": "PS",  "PaidUpTo": "2020-12-31" }, // PhpStorm
      { "Code": "GO",  "PaidUpTo": "2020-12-31" }, // GoLand
      { "Code": "DM",  "PaidUpTo": "2020-12-31" }, // DotMemory
      { "Code": "CL",  "PaidUpTo": "2020-12-31" }, // CLion
      { "Code": "RS0", "PaidUpTo": "2020-12-31" }, // Resharper C++
      { "Code": "RC",  "PaidUpTo": "2020-12-31" }, // DotCover
      { "Code": "RD",  "PaidUpTo": "2020-12-31" }, // Rider
      { "Code": "PC",  "PaidUpTo": "2020-12-31" }, // PyCharm
      { "Code": "RM",  "PaidUpTo": "2020-12-31" }, // RubyMine
      { "Code": "WS",  "PaidUpTo": "2020-12-31" }, // WebStorm
      { "Code": "DB",  "PaidUpTo": "2020-12-31" }, // DataGrip
      { "Code": "DC",  "PaidUpTo": "2020-12-31" }, // DotCover
      { "Code": "RSU", "PaidUpTo": "2020-12-31" }  // Resharper Ultimate
    ],
    "Hash": "내부 해시코드로 추정되며 /0 으로 끝남",
    "GracePeriodDays": 0, // 연장 사용 가능기한 (주로 License Server에서 사용)
    "AutoProlongated": false, // 연장 여부
    "IsAutoProlongated": false // 자동 연장 여부
}

그래서 만약 유출된 키가 보고될 경우 LicenseID 속성 및 라이선스 키 대시(-) 앞 문자열을 나열하면서 This license XXXXXXXX has been cancelled 라는 메시지가 뜰 것이다.
따라서 온라인일 경우 바로 걸리며, 오프라인인 경우 내부 블랙리스트 데이터베이스를 갱신하여 취소된 라이선스 키는 다음 버전에서 사용할 수 없게 된다.

추출한 크래커는 아래의 코멘트를 남겼다.

  • i decoded the license keys, they got a pretty good system going on there not gonna lie its practically impossible to edit or generate a key yourself unless u get your hands on their private key
  • not that its needed thanks them offering trials which can be easily reset with a bit of reversing effort
  • 내가 라이선스 키를 디코드 했는데, 그들은 꽤 좋은 키 체계를 가지고 있어서 거짓말 아니고 저 키를 생성한 개인 키를 추출해 내지 않는 한 키 조작과 생성이 아예 불가능함
  • 아 근데 평가판이 간단한 조작만으로 쉽게 초기화되는 거에 고마워할 필요 없음.

언급한 크래커는 한때 여러 메이저 게임을 뚫었던 팀 이름을 포함한 이메일 주소로 사용하여 해당 팀원의 이메일로 추정되지만, 확실한 건 불명이긴 한데 AIDA64 키 생성기를 오픈소스로 푼 거 보면은 관심있는 사람인 건 확실한 것 같다. 근데 직접적으로 조언은 하지 않았지만, 흐름을 봐서 젯브레인을 크랙할 생각은 없다는 뜻으로 내비칠 수 있다. 내가 봐도 젯브레인 제품의 복돌은 바라지 말 것을 권한다.

사실 라이선스 코드 추출 결과는 이미 인증크랙을 개발한 한 중국인이 javaagent 방식으로 제공했을 때, 디코딩된 라이선스 키만 줘도 인증되도록 해주었던 툴로도 정보를 볼 수 있었는데, 지금 봐도 달라진 건 없다고 봐도 무방할 것이다. (참고로 그 때 당시 체계가 정말로 뚫려서 디코딩 된 라이선스 키로도 인증 가능했었다. 그때가 영구 라이선스 마지막 시대였지.)
이와 별도로 크랙을 만든 다른 중국인은 2020.2 이후 현재 더 이상의 크랙을 제공하지 않을 것이라고는 했지만, 지금 평가판을 대화형으로 반자동 초기화 하는 IDE 확장 툴을 오픈소스로 제공하고 있으며, 2020-3 버전도 잘 된다고 한다.

끗.

첨언하여, 내가 왜 이런 복돌 정보를 올리냐고?
뭐 사실 내가 한번 심심해서 젯브레인 키가 아직도 돌아다니고 있나 Github DMCA 모니터링(Watch) 하고 별다른 게 없길래 구글링 하다가 우연히 발견한 gist 가 있는데, 거기에 위 젯브레인 키를 디코드한 코드의 일부를 공개했음(C# 코드였고). 그걸 보고 딱 떠오른게 바로 JWT 인데, 이걸 한층 보안을 더 강화했다고 보면 되고, 그리고 이런 식으로 암호화, 정보과 시그니처 유효성을 강력하게 검증하여 제품 코드를 관리하면 좋겠다고 생각하여 이번 기회에게 제품 키 체계에 대한 많은 도움이 되어 작성했다 이거다. 이걸 dev.to 로 올리면 제3자가 DMCA 콤플레인 들어올 꺼 뻔해서 작성 안하겠다.

profile
지옥에서 온 개발자

0개의 댓글