StarUML 3.0.2 破解

最近StarUML由2.0更新到3.0。原來的破解方法,修改license驗證函數的方式不能用了。安裝位置都變了,已經找不到LicenseManagerDomain.js這個文件了。那該怎麼辦?老司機告訴大家解決辦法。

StarUML是用nodejs寫的。確切的說是用Electron前端框架寫的。新版本中所有的starUML源代碼是通過asar工具打包而成。確切的代碼位置在“%LOCALAPPDATA%\Programs\StarURML\resources\app.asar”或者“C:\Program Files\StarUML\resources”
我們可以通過asar工具解壓修改達到破解目的。具體操作如下:

 

  1. 安裝較新的node.js 都會帶npm。
    下載 node.js 鏈接 https://nodejs.org/en/
  2. 添加nodejs環境變量
  3. 打開cmd
node -v //查看node 版本
npm -v //查看npm 版本
  1. 安裝asar
npm install -g asar
  1. 找到StarUML 安裝目錄下 app.asar ,解壓 app.asar。
asar extract app.asar app
  1. 修改源代碼
    通過命令行將程序解壓到app目錄下。真正的驗證license的代碼在app\src\engine\license-manager.js
/**
   * Check license validity
   *
   * @return {Promise}
   */
  validate () {
    return new Promise((resolve, reject) => {
      try {
        // Local check
        var file = this.findLicense()
        if (!file) {
          reject('License key not found')
        } else {
          var data = fs.readFileSync(file, 'utf8')
          licenseInfo = JSON.parse(data)
          var base = SK + licenseInfo.name +
            SK + licenseInfo.product + '-' + licenseInfo.licenseType +
            SK + licenseInfo.quantity +
            SK + licenseInfo.timestamp + SK
          var _key = crypto.createHash('sha1').update(base).digest('hex').toUpperCase()
          if (_key !== licenseInfo.licenseKey) {
            reject('Invalid license key')
          } else {
            // Server check
            $.post(app.config.validation_url, {licenseKey: licenseInfo.licenseKey})
              .done(data => {
                resolve(data)
              })
              .fail(err => {
                if (err && err.status === 499) { /* License key not exists */
                  reject(err)
                } else {
                  // If server is not available, assume that license key is valid
                  resolve(licenseInfo)
                }
              })
          }
        }
      } catch (err) {
        reject(err)
      }
    })
  }

這是個典型的javascirpt Promise。啓動後會調用validate函數檢查license。

checkLicenseValidity () {
    this.validate().then(() => {
      setStatus(this, true)
    }, () => {
      // 原來的代碼,如果失敗就會將狀態設置成false
      // setStatus(this, false) 
      // UnregisteredDialog.showDialog()

      //修改後的代碼
      setStatus(this, true)
    })
  }

參照上面的代碼將reject的callback原代碼註釋掉。換成setStatus(this, true) 這樣無論你註冊與否都驗證成功。

  1. 重新打包替換原來的app.asar
asar pack app app.asar

啓動StarUML, Help -->Enter License Key 提示 you already have a valid liecnse. 就說明成功了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章