studio 3t是一款能够有效让数据库的管理进行更好的可视化工具,又称Robomongo ;
是由MongoDB客户端Studio 3T的开发人员维护和提供的,适用于Windows,MacOS和Linux的跨平台。
环境
前记
似乎翻遍了 Google 也没找到Studio 3t新版的 hack 版; 所以今天试着看了下;
而且, 在不搞点 JAVA 的东西, 别人都不知道我是干 JAVA 的了....
分析
免费版会少很多功能, 菜单也是精简过的; 如下图所示
0.png (182.12 KB, 下载次数: 0)
下载附件
2024-4-24 20:42 上传
通过抓包发现软件在用户登陆后,会发送一个请求接口来获取当前用户的凭证信息
1.png (1.23 MB, 下载次数: 0)
下载附件
2024-4-24 20:42 上传
GET /s3t-api/usage-token
注意看请求 body,可以看到目前 license 状态目前是过期的
"trialStatus": "LICENSE_EXPIRED'
接口返回如下:
{
"certificateChain": [
"xxxx"
],
"serverTokens": {
},
"usageToken": "xxx"
}
返回有一堆加了密的东西, 看着头疼;
我们用 jadx 全局搜索下 classpath [/Applications/Studio 3T.app/Contents/Resources/app/*.jar] 所有的 jar
跟踪一下这个请求的上下文
2.png (291.33 KB, 下载次数: 0)
下载附件
2024-4-24 20:42 上传
定位到了 data-man-mongodb-ent-2024.2.0.jar 这个 jar 包;
分析代码:
yjsj cS = cS();
jsonObject.addProperty("trialStatus", cS.cc);
接着进入 当前类的 cS() 方法,看看 yjsj cS 具体的实现
3.png (229.18 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
295 行可以看到 yjsjVar.cc = n_trVar2.getStatus().ay().name();
然后我们在继续跟进,看看 getStatus() 方法
4.png (98.03 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
定位到这里 t3.common.c.h.n_tr.getStatus() , 稍微有些眉目了;
我们试着改改这个方法.让他直接返回第 433 行的 Your trial license expires in %d days
重写
打开 IDEA 新建一个 JAVA Project;
Studio 3T 用的 JDK 为 17, 我们也用 17;
把 classpath [/Applications/Studio 3T.app/Contents/Resources/app/*.jar] 所有的 jar 添加到我们依赖中
然后把 n_tr 的假码 copy 一份进去;
开始改造:
[ol]
[/ol]
public boolean dy() {
return false;
}
public boolean dK() {
// if (this.cK) {
// return true;
// }
// if (this.cP == null) {
// this.cP = dJ();
// }
// int epochDay = (int) (this.cP.toEpochDay() - t3.utils.j.GnBN.aQn().toEpochDay());
// if (epochDay 35) {
// j(true);
// c((LocalDate) null);
// return true;
// }
return false;
}
public boolean dA() {
return false;
}
public int dG() {
// if (null == this.cP) {
// return 0;
// }
// int epochDay = (int) (this.cP.toEpochDay() - LocalDate.now().toEpochDay());
// if (epochDay >= 1) {
// epochDay++;
// }
// int max = Math.max(0, Math.min(dI(), epochDay));
// if (this.cK) {
// return 0;
// }
return 30;
}
改造完之后编译, 生成 t3.common.c.h.n_tr.class ;
之后压缩软件打开 data-man-mongodb-ent-2024.2.0.jar 替换之
5.png (843.81 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
移除签名认证
然后重启, 发现程序启动不了, 用命令行重启, 发现一下报错;
6.png (613.69 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
看来程序有文件完整检测;
要关闭也很简单, 把 这个 jar 包 META-INO 下的签名信息删掉就可;
7.png (126.99 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
删掉后, 继续重启, 这个时候程序进来了, 但是弹出一个对话框之后就退出去了;
8.png (607.92 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
看来签名没有彻底关闭 ; 我们搜索下关键字 Please re-install
9.png (242.32 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
定位到了 hbwp的 e 方法, 看了下, 这个函数会教研所有jar 的 签名, 如果签名不存在也会报错;
跟之前的处理办法一样, copy 改造;
public static void e(URL url) {
if (cZ) {
return;
}
// 这里删除掉所有签名验证的代码;
cZ = true;
}
然后继续, 编译, 覆盖,重启, 成功拿下
11.png (478.98 KB, 下载次数: 0)
下载附件
2024-4-24 20:43 上传
lastt.png (421.27 KB, 下载次数: 0)
下载附件
2024-4-25 17:05 上传
Release
编译后的 class 文件, 以及脚本已放 Github:
https://github.com/marlkiller/studio_3t_patch
后记
前天找大师算了个命, 说我年底能找到工作 QAQ ..
仅供研究学习使用,请勿用于非法用途
注:若转载请注明来源(本贴地址)与作者信息。