StartUml破解流程
大致流程
#安装压缩工具
cnpm i -g asar
#拷贝一个副本,以防万一
cp app.asar app.asar.bak
#创建一个目录,准备放解压出来的源代码
mkdir code
#解压代码到code目录
asar extract app.asar code
#修改js代码,看下面部分
#删除文件
rm app.asar
#压缩代码,创建app.asar文件
asar pack code app.asar
修改代码
文件: \src\engine\license-manager.js
- 修改validate函数,注释97行-100行,和第123行
- 修改checkLicenseValidity函数
代码如下:
/**
* 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)
// 1. 注释掉
/* if (licenseInfo.product !== packageJSON.config.product_id) {
app.toast.error(`License key is for old version (${licenseInfo.product})`)
reject(`License key is not for ${packageJSON.config.product_id}`)
} else { */
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)
}
})
}
// 2. 注释掉
// }
}
} catch (err) {
reject(err)
}
})
}
checkLicenseValidity () {
this.validate().then(() => {
setStatus(this, true)
}, () => {
// setStatus(this, false)
// UnregisteredDialog.showDialog()
// 3. 上面两行注释掉,修改为以下
setStatus(this, true)
})
}