另一种 StarUML 3.x 完美破解的思路——比较暴力
本帖最后由 吾名空白 于 2018-9-15 16:29 编辑我不知道这种算不算重复发帖,但是我觉得这是另一种思路,应该不算重复发帖吧{:1_924:}
# 背景
在昨天,我发布了一篇又长又臭的(https://www.52pojie.cn/thread-796355-1-1.html)
然后今天早上一起床就想到,啊~好麻烦啊!能不能让完美再简单点?
好的,然后我又开始了折腾(真丶生命在于折腾{:1_918:})
# 我的想法
这一次,我要先从`about-dialog.js`开始分析
(`about-dialog.js`路径:解压`app.asar`后`app/src/dialogs/about-dialog.js`)
正所谓:你要什么我就给什么才是最方便的🌚
# 正文
下面开始正式分析破解
## 找出关于中要显示的信息的数据来源
首先我们要找出要在关于中显示的信息来源
`about-dialog.js`中第 45-71 行:
```js
// set license info
if (app.licenseManager.getStatus() === true) {
var info = app.licenseManager.getLicenseInfo()
var licenseTypeName = 'Unknown'
switch (info.licenseType) {
case 'PS':
licenseTypeName = 'Personal'
break
case 'CO':
licenseTypeName = 'Commercial'
break
case 'ED':
licenseTypeName = 'Educational'
break
case 'CR':
licenseTypeName = 'Classroom'
break
}
$license.html('Licensed to ' + info.name)
$licenseType.html(licenseTypeName + ' License')
$quantity.html(info.quantity + ' User(s)')
$crackedAuthor.html('Cracked by ' + info.crackedAuthor)
} else {
$license.html('UNREGISTERED')
}
return dialog
}
```
可以看出,它首先会先调用`license-manager.js`中的`getStatus()`方法判断程序的注册状态。那现在我们去`license-manager.js`看一下`getStatus()`这个方法:
```js
/**
* Get Registration Status
* @Return {string}
*/
getStatus () {
return status
}
```
嗯......很简单的一个方法,我是试过直接在这里设置`"true"`(注意!这里是返回字符串),但是没什么用,我就没改这里了。那么这里到底有什么用呢?大家看它返回的那个变量:`status`,这是我们唯一从这里得到的信息,我们全文搜索一下`status`,可以找到一个`setStatus(...)`的方法。我修改了一下让它总是设置为`true`,代码如下:
```js
function setStatus (licenseManager, newStat) {
if (status !== newStat) {
status = newStat
licenseManager.emit('statusChanged', 'true') // status修改为'true',注意要带单引号
}
}
```
好了,现在我们可以进入那个if语句了🌚。不难看出,接下来需要的数据都在变量`info`里,从这一句
```js
var info = app.licenseManager.getLicenseInfo()
```
可以看出,它调用了`license-manager.js`中的`getLicenseInfo()`方法获取所需数据,我们去看一下`getLicenseInfo()`方法:
```js
getLicenseInfo () {
return licenseInfo
}
```
嗯.....还是那么简洁,但是从昨天的文章我们已经知道这个`licenseInfo`的数据内容格式,他要的数据也是`licenseInfo`的数据。那么,我们直接模拟`licenseInfo`的数据即可:
```js
getLicenseInfo () {
licenseInfo = {
name: "Reborn",
product: "Reborn product",
licenseType: "PS",
quantity: "Reborn Quantity",
timestamp: "1529049036",
licenseKey: "It's Cracked!!",
crackedAuthor: "Reborn"
};
return licenseInfo
}
```
好了,模拟成功,`about-dialog.js`那边应该能获取到`licenseInfo`的数据了。但是,仅仅是这样还不行哦!还有最重要的一点你们别忘了——我们还没破解!
## 破解注册
破解注册很简单,直接修改`license-manager.js`中的`checkLicenseValidity()`这个方法就好了。
修改后的代码如下:
```js
checkLicenseValidity () {
this.validate().then(() => {
setStatus(this, true)
}, () => {
// 原来的代码,如果失败就会将状态设置成false
// setStatus(this, false)
// UnregisteredDialog.showDialog()
//修改后的代码
setStatus(this, true)
})
}
```
## 注册成功!!
完成以上流程后应该就能成功**直接破解**了,**不用输入注册码**,并且这种方法破解后同样能在关于显示你自定义的破解信息!!一样完美~
这种方法和昨天的比起来更简单,但是也更暴力。昨天的比较接近正常的验证流程,这种就有点爆破的味道了。这里给出另一种思路给大家参考,希望对大家有帮助。
各位要是觉得对大家有帮助的话,给点热心,有免费评分的评分走一走,谢谢各位{:301_997:}。
吾名空白 发表于 2018-9-18 21:03
有具体情况吗?比如截图之类的?
npm安装成功了吗?我是 npm install asar -g 就安装好可以用了
我早就安装了 npm 了, 你看看,返回错误:error: unknown option `-v'
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
PS C:\Users\Administrator> npm -v
5.6.0
PS C:\Users\Administrator> npm install asar -g
C:\Users\Administrator\AppData\Roaming\npm\asar -> C:\Users\Administrator\AppData\Roaming\npm\node_modules\asar\bin\asar.js
+ asar@0.14.3
added 1 package and updated 2 packages in 18.779s
PS C:\Users\Administrator> asar -version
error: unknown option `-v'
PS C:\Users\Administrator>
乌懂懂 发表于 2018-9-20 19:47
我早就安装了 npm 了, 你看看,返回错误:error: unknown option `-v'
Windows PowerShell
这个提示的话应该是安装成功了,不然就会报错"xxx command not found"之类的。这个我觉得是你后面带的参数错了,是--version才对(两条杠) 不错的东西思路很好 厉害了~~{:301_1000:} 嘿嘿,前来学习 来个打包好的文件呗 过程很详细,谢谢分享 不错,感谢分享 感谢热心分享 经过测试,十分好用,谢谢分享 有没有打包好的文件?