1. 文件
/com/wisecoders/dbs/dialogs/system/resources/FxRegistrationDialog_zh_CN.properties
中的内容是注册相关操作。完整内容如下所示:
[Plain Text] 纯文本查看 复制代码
activate.text=还行
cancel.text=取消
cancel.tooltip=取消
chooseSeatDialog.header.text=选择要使用的许可证席位
chooseSeatDialog.title.text=选择座位
contactSupport.text=技术支持
customerAreaURL.text=https\://cc.payproglobal.com/Customer/Account/Login
dialog.header.text=购买后,您将收到来自 PayProGlobal.com 或 2Checkout.com 的每封电子邮件的许可证密钥。\n许可证是多行 UTF-8 文本,以 '\#\#\#' 开头和结尾。\n从 dbschema.com 支持/客户帐户管理许可证。
dialog.title.text=注册对话框
failed.text=注册失败。请复制/粘贴许可证密钥,包括第一行和最后一行注释。文本应采用 UTF-8 编码。
如果许可证比 DbSchema 发布日期早一年,则需要续订许可证。
fillFields.content.text=请输入您的姓名和许可证密钥
fillFields.title.text=错误信息
fillFlsFields.content.text=请输入您的姓名、服务器主机和端口
fillFlsFields.title.text=错误信息
flsEnable.text=使
hostField.promptText.text=浮动许可证服务器主机
licenseField.promptText.text=在此处复制许可证密钥多行文本。文本应采用 UTF-8 编码。
licenseKey.text=许可证密钥
licenseLabel.text=许可证密钥
licenseLabel.tooltip=购买后,您将收到来自 PayProGlobal.com 或 2Checkout.com 的每封电子邮件的许可证密钥。\n请在此处复制许可证密钥文本,包括 \#\#\# 行。
loadFromFile.text=从文件加载
manageLicenses.text=客户账户
manyComputers.text=许可证密钥已在 2 台以上的计算机上使用。请在另一台机器上执行 Help / Unregister 操作。
portField.promptText.text=浮动许可证服务器端口
purchase.text=购买许可证
purchase.tooltip=购买许可证或续订
regSucceed.text=注册成功。
register.text=还行
register.tooltip=还行
renew.text=续订您的软件升级和支持所有许可证包括 1 年免费升级到新发布的版本。
1 年后,更新到最新版本需要续订许可证,费用约为 6 美元/月(商业)或 4 美元(个人)。
从网站 Support / Customer Account 管理许可证。
目前,将激活 DbSchema Free。
saveFailed.text=请检查系统权限。DbSchema 无法在当前 OS 用户下保存许可数据。
serverHostLabel.text=主机
serverHostLabel.tooltip=浮动许可证服务器的主机名或 IP。\n许可证服务器是使用命令“license server”启动的 DbSchema CLI。\n有关详细信息,请使用 'license server -h' 。
serverPortLabel.text=港口
serverPortLabel.tooltip=服务器端口,默认为 8080。
serverTab.text=浮动许可证服务器
serverTabHeader.text=使用“license server”命令从 DbSchemaCLI 启动浮动许可证服务器。
trialActive.text=PRO 试用版处于活动状态。
userNameField.promptText.text=输入您的姓名。
userNameLabel.text=用户名
userNameLabel.tooltip=您的姓名,用于将您标识为此许可证密钥的用户
validationFailed.text=无法验证许可证。
2. 根据
activate.text=还行
这个属性配置,搜索下反编译的内容定位到相关class文件
com.wisecoders.dbs.dialogs.system.FxRegistrationDialog
。不得不说下这个翻译挺二把刀的😄

72713088-6015-424d-95b9-e4193053006c.png (88.13 KB, 下载次数: 0)
下载附件
2025-6-22 14:13 上传
3. 那就阅读下 FxRegistrationDialog 这个代码,就找到其他核心关联代码
[Asm] 纯文本查看 复制代码
com.wisecoders.dbs.sys.License
com.wisecoders.dbs.sys.Features
简单说License 就是凭证信息的实体模型,Features是不同的功能特性。
主要分析工作结束,下面是操作了。
操作部分采取了修改替换class和Java agent两种方式。先看下结果吧:

image.png (225.62 KB, 下载次数: 0)
下载附件
2025-6-22 14:32 上传

image.png (286.41 KB, 下载次数: 0)
下载附件
2025-6-22 14:32 上传
还有一些小的瑕疵,还是有续订的提示、还有烦人的升级提示,那都是小菜了。
一、修改Features的class文件
简单粗暴,所有都是全功能😄

image.png (73.72 KB, 下载次数: 0)
下载附件
2025-6-22 14:13 上传
二、使用Java agent进行相关拦截
从其反编译内容来看,FxRegistrationDialog属于 Kotlin 编写的类,所以刚开始还真有点不知道如何下手。

image.png (141.67 KB, 下载次数: 0)
下载附件
2025-6-22 14:21 上传
1.激活按钮触发的方法
这个“还行”按钮😄触发的方法已经知道了,从执行逻辑来看使用的激活方式是
许可证密钥
方式,也就是会调用this.b这个方法。
代码如下:
[Java] 纯文本查看 复制代码
@Action(
b = "flagHasText"
)
@Nullable
public final Task activate() {
if (this.j.isSelected()) {
return this.a();
} else {
this.i.getSelectionModel().select(0);
Keys.g.c();
Keys.h.c();
Keys.i.c();
return this.b();
}
}
2.激活逻辑,又是调用 License.b(),又是各种验证 还挺麻烦。
都可以不管 ,就看这10行就够了,首先会调用License的a()方法,然后调用License的g()方法得到一个Features实例,然后进行switch判断是否有效。因此只要这个方法返回一个有效的Features就行了。

image.png (118.4 KB, 下载次数: 0)
下载附件
2025-6-22 14:27 上传

image.png (171.86 KB, 下载次数: 0)
下载附件
2025-6-22 14:30 上传
[Java] 纯文本查看 复制代码
private final Task b() {
if (!StringUtil.isEmptyTrim(this.b.getText()) && !StringUtil.isEmptyTrim(this.e.getText())) {
License.b();
String var10000 = this.b.getText();
Intrinsics.checkNotNullExpressionValue(var10000, "");
String var2 = var10000;
boolean var3 = false;
CharSequence var4 = (CharSequence)var2;
boolean var5 = false;
int var6 = 0;
int var7 = var4.length() - 1;
boolean var8 = false;
while(var6