starUML破解方法(Windows10 & MAC)
阿新 • • 發佈:2019-02-01
最近StarUML由2.0更新到3.0。原來的破解方法,修改license驗證函式的方式不能用了。安裝位置都變了,已經找不到LicenseManagerDomain.js
這個檔案了。那該怎麼辦?老司機告訴大家解決辦法。
StarUML是用nodejs寫的。確切的說是用Electron前端框架寫的。新版本中所有的starUML原始碼是通過asar工具打包而成。確切的程式碼位置在“%LOCALAPPDATA%\Programs\StarURML\resources\app.asar”
我們可以通過asar工具解壓修改達到破解目的。具體操作如下:
1. 安裝asar
cnpm install -g asar
2. 解壓app.asar
asar extract app.asar app
3. 修改原始碼
通過命令列將程式解壓到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)
這樣無論你註冊與否都驗證成功。
4. 重新打包替換原來的app.asar
asar pack app app.asar