最近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