@paynev
2019-06-19T05:42:06.000000Z
字数 1586
阅读 761
技巧
StarUML是用nodejs写的。确切的说是用Electron前端框架写的。新版本中所有的starUML源代码是通过asar工具打包而成。确切的代码位置在%LOCALAPPDATA%\Programs\StarURML\resources\app.asar
我们可以通过asar工具解压修改达到破解目的。
打开Node.js官网
找到合适的版本下载,我这里选的是长期支持版
命令行里输入:
sudo npm install -g asar
注意: 如果提示-bash: npm: command not found,则需要手动添加环境变量 终端输入export
PATH=/usr/local/bin:$PATH即可
简单来说,主要以下几个步骤:
提取Contents/Resources/
中的app.asar
解压app.asar
修改解压出来的app/src/engine/license-manager.js
中的checkLicenseValidity
函数,将setStatus(this,false)
改成setStatus(this,true)
,并注释UnregisteredDialog.showDialog()
重新打包,放回即可
下载的StarUML,右键显示包内容
进入Contents/Resources/
把app.asar
复制出来
asar extract app.asar app
我们全文搜索一下status
,可以找到一个setStatus(...)
的方法。我修改了一下让它总是设置为true
function setStatus (licenseManager, newStat) {
if (status !== newStat) {
status = newStat
licenseManager.emit('statusChanged', 'true') // status修改为'true',注意要带单引号
}
}
查找getLicenseInfo()
函数
getLicenseInfo () {
return licenseInfo
}
// 改为
getLicenseInfo () {
licenseInfo = {
name: "PayneV",
product: "PayneV product",
licenseType: "PS",
quantity: "PayneV Quantity",
timestamp: "1529049036",
licenseKey: "It's Cracked!!",
crackedAuthor: "PayneV"
};
return licenseInfo
}
找到checkLicenseValidity
函数
将false
改成true
,并注释或删掉下面一行
checkLicenseValidity () {
this.valIDAte().then(() => {
setStatus(this, true)
}, () => {
// 原来的代码,如果失败就会将状态设置成false
// setStatus(this, false)
// UnregisteredDialog.showDialog()
// 修改后的代码
setStatus(this, true)
})
}
asar pack app app.asar
done!
著作权归原作者所有,个人只是整理总结。