StarUML5.X-3.X破解方法

说明

StarUML由2.0更新到3.0。原来的破解方法,修改license验证函数的方式不能用了。本文介绍如何破解5.0-3.0版本。

前言

StarUML官网

StarUML是用nodejs写的。确切的说是用Electron前端框架写的。新版本中所有的starUML源代码是通过asar工具打包而成。确切的代码位置在C:\Program Files\StarUML\resources\app.asar

破解步骤

1.安装asar

1
npm install -g asar

2.解压app.asar

1
asar extract app.asar app

3.修改源代码

真正的验证license的代码在app\src\engine\license-manager.js

 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**

   * 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。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
checkLicenseValidity () {

    this.validate().then(() => {

      setStatus(this, true)

    }, () => {

      // 原来的代码,如果失败就会将状态设置成false

      // setStatus(this, false) 

      // UnregisteredDialog.showDialog()



      //修改后的代码

      setStatus(this, true)

    })

  }

参照上面的代码将reject的callback原代码注释掉。换成setStatus(this, true)这样无论你注册与否都验证成功。

4.重新打包替换原来的app.asar

1
asar pack app app.asar

结束

替换完成之后,再次运行StarUML发现已经激活了!

使用 Hugo 构建
主题 StackJimmy 设计