StarUML是用nodejs寫的。確切的說是用Electron前端框架寫的。新版本中全部的starUML源代碼是經過asar工具打包而成。確切的代碼位置在「%LOCALAPPDATA%\Programs\StarURML\resources\app.asar」或者「C:\Program Files\StarUML\resources」
咱們能夠經過asar工具解壓修改達到破解目的。具體操做以下:
1. 安裝asarjavascript
cnpm install -g asar
asar extract app.asar app
3. 修改源代碼 前端
經過命令行將程序解壓到app目錄下。真正的驗證license的代碼在app\src\engine\license-manager.js
java
/** * 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) } }) }
checkLicenseValidity () { this.validate().then(() => { setStatus(this, true) }, () => { // 原來的代碼,若是失敗就會將狀態設置成false // setStatus(this, false) // UnregisteredDialog.showDialog() //修改後的代碼 setStatus(this, true) }) }
asar pack app app.asar