前言

最近学到uml设计,而最新的startUML好像因为卖给别的团队收费了。然后搜了一下破解,貌似也不难。


正文

时序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。

准备工作

官网下载uml
nodjs

不过因为我博客就用到nodejs了所以不用再安装了


干活

原理好像是可以被反编译,然后改变逻辑。

安装完nodejs之后也就是要用到npm,用cmd或者powershell打开都行

1
2
3
node -v
npm -v
#依次打印一下,有显示版本号就行,没有就重启下

能显示版本就可以安装asar了

1
npm install -g asar

然后cd到staruml的路径去解包
这边官方安装默认是在C:\Program Files\StarUML\resources\这么一个情况。

所以我们只需要在powershell或者cmd【但是因为我有git bash之类的所以就没用windows这些】
cd 到这个路径下就行

路劲切换后,使用asar extract app.asar app进行解包到文件夹。

注意如果出现一些错误可能是权限不够
比如

1
2
3
4
5
6
C:\Program Files\StarUML\resources>asar extract app.asar app
internal/fs/utils.js:314
throw err;
^

Error: EPERM: operation not permitted, mkdir 'app'

权限不够就把这个文件拖出去,放到别的地方解包修改在打包拿回去覆盖。

因为前面的路径不一就不管了,反正找到app\src\engine\license-manager.js的这个文件,用记事本或者notepad之类的打开。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
checkLicenseValidity () {
if (packageJSON.config.setappBuild) {
setStatus(this, true)
} else {
this.validate().then(() => {
setStatus(this, true)
}, () => {
//修改下面那句的false改成true,最后一句注释掉
setStatus(this, true)
//UnregisteredDialog.showDialog()
})
}
}

/**
* Check the license key in server and store it as license.key file in local
*
* @param {string} licenseKey
*/
register (licenseKey) {
return new Promise((resolve, reject) => {
$.post(app.config.validation_url, {licenseKey: licenseKey})
.done(data => {
if (data.product === packageJSON.config.product_id) {
var file = path.join(app.getUserPath(), '/license.key')
fs.writeFileSync(file, JSON.stringify(data, 2))
licenseInfo = data
setStatus(this, true)
resolve(data)
} else {
setStatus(this, false)
reject('unmatched') /* License is for old version */
}
})
.fail(err => {
setStatus(this, true)
//下面的注释掉
//if (err.status === 499) { /* License key not exists */
//reject('invalid')
//} else {
// reject()
//}
})
})
}

修改完之后保存
然后重新打包

1
asar pack app app.asar

生成后,在这个文件夹看看app.asar的修改时间是不是最近的,如果是基本就没啥问题了。

然后黏贴覆盖掉C:\Program Files\StarUML\resources\app.asar这个原文件。

替换原始 app.asar之后,重新打开 StarUML,不提示需要注册和没有 Unregistered 标识则表示破解成功。


新旧ui对比


知识点

  • 角色(Actor)
  • 对象(Object)
  • 生命线(Lifeline)
  • 控制焦点(Focus of Control)
  • 消息(Message)
类型 名称 说明
Alt 抉择 包含一个片段列表,这些片段包含备选消息序列。可以在每个片段中都设置一个临界来指示该片段可以运行的条件。else的临界指示其他任何临界都不为true时应运行的片段。如果所有临界都为false并且没有else,则不执行任何片段
Opt 选项 包含一个可能发生或可能不发生的序列。可以在临界中指定序列发生的条件
Loop 循环 片段重复一定次数。可以在临界中指示片段重复的条件。Loop组合片段具有Min和Max属性,它们指示片段可以重复的最小和最大次数。默认值是无限制
Break 中断 如果执行此片段,则放弃序列的其余部分。可以使用临界来指示发生中断的条件
Par 并行 并行处理。片段中的事件可以交错
Critical 关键 用在Par或Seq片段中,指示此片段中的消息不得与其他消息交错
Seq 弱顺序 有两个或更多操作数片段。涉及同一生命线的消息必须按片段的顺序发生。如果消息涉及的生命线不同,则来自不同片段的消息可能会并行交错
Strict 强顺序 有两个或更多操作数片段。这些片段必须按给定顺序发生
Consider 考虑 指定此片段描述的消息列表。其他消息可发生在运行的系统中,但对此描述来说意义不大
Ignore 忽略 指定此片段未描述的消息列表。这些消息可发生在运行的系统中,但对此描述来说意义不大。在Message属性中键入该列表
Assert 断言 操作数片段指定唯一有效的序列。通常用在Consider或Ignore片段中
Neg 否定 此片段中显示的序列不得发生。通常用在Consider或Ignore片段中

精髓我感觉还是制作成类视图,然后绘制时序图,比如这个项目如何启动,有哪些功能,什么条件触发之类的。


总结

新版的文件尾缀都是mdj了,老版的好像才是uml。
此外就是一些功能和属性上的变动,新旧存在一定差异。

题外话,好像可以找到最原始的时候团队没出售这个项目的免费版。虽然那个好像很老了,最新更改时间可能都是2005年的了。但是使用的话倒是无所谓。
而且绘制时序图也不一定要用到这个软件,估计还有类似的。