Studio 3T 2024.2.0 [JAVA] 逆向分析,跨平台通杀
本帖最后由 Vvvvvoid 于 2024-11-16 17:30 编辑## 关于(Studio 3t 2024.2.0)
studio 3t是一款能够有效让数据库的管理进行更好的可视化工具,又称Robomongo;
是由MongoDB客户端Studio 3T的开发人员维护和提供的,适用于Windows,MacOS和Linux的跨平台。
## 环境
- IDEA
- JDK 17
- jadx
## 前记
似乎翻遍了 Google 也没找到Studio 3t新版的 hack 版; 所以今天试着看了下;
而且, 在不搞点 JAVA 的东西, 别人都不知道我是干 JAVA 的了....
## 分析
免费版会少很多功能, 菜单也是精简过的; 如下图所示
通过抓包发现软件在用户登陆后,会发送一个请求接口来获取当前用户的凭证信息
GET /s3t-api/usage-token
注意看请求 body,可以看到目前 license 状态目前是过期的
"trialStatus": "LICENSE_EXPIRED'
接口返回如下:
```json
{
"certificateChain": [
"xxxx"
],
"serverTokens": {
},
"usageToken": "xxx"
}
```
返回有一堆加了密的东西, 看着头疼;
我们用 jadx 全局搜索下 classpath 所有的 jar
跟踪一下这个请求的上下文
定位到了 data-man-mongodb-ent-2024.2.0.jar 这个 jar 包;
分析代码:
```java
yjsj cS = cS();
jsonObject.addProperty("trialStatus", cS.cc);
```
接着进入 当前类的 cS() 方法,看看 yjsj cS 具体的实现
295 行可以看到 yjsjVar.cc = n_trVar2.getStatus().ay().name();
然后我们在继续跟进,看看 getStatus() 方法
定位到这里 t3.common.c.h.n_tr.getStatus() , 稍微有些眉目了;
我们试着改改这个方法.让他直接返回第 433 行的 Your trial license expires in %d days
## 重写
打开 IDEA 新建一个 JAVA Project;
Studio 3T 用的 JDK 为 17, 我们也用 17;
把 classpath 所有的 jar 添加到我们依赖中
然后把 n_tr 的假码 copy 一份进去;
开始改造:
1. 把 423 行的俩个函数 (dy() || dK())返回值改为 return true; // 这俩个是判断 license 是否过期的
2. 把 426 行的函数 (dA()) 返回值改为 return false; // 这个函数是判断 license 是否禁用
3. 把 432 行的函数 dG() 返回值改为 30; // 这个看起来是使用到期天数
```
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 < 0 || 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 替换之
## 移除签名认证
然后重启, 发现程序启动不了, 用命令行重启, 发现一下报错;
看来程序有文件完整检测;
要关闭也很简单, 把 这个 jar 包 META-INO 下的签名信息删掉就可;
删掉后, 继续重启, 这个时候程序进来了, 但是弹出一个对话框之后就退出去了;
看来签名没有彻底关闭 ; 我们搜索下关键字 Please re-install
定位到了 hbwp的 e 方法, 看了下, 这个函数会教研所有jar 的 签名, 如果签名不存在也会报错;
跟之前的处理办法一样, copy 改造;
```java
public static void e(URL url) {
if (cZ) {
return;
}
// 这里删除掉所有签名验证的代码;
cZ = true;
}
```
然后继续, 编译, 覆盖,重启, 成功拿下
## Release
编译后的 class 文件, 以及脚本已放 Github:
https://github.com/marlkiller/studio_3t_patch
## 后记
仅供研究学习使用,请勿用于非法用途
注:若转载请注明来源(本贴地址)与作者信息。
Vvvvvoid 发表于 2024-4-25 15:16
是的, 混淆过的代码, 太恶心了,不想费劲折腾了
大佬,我照着您的步骤编译了下没有成功,方便了给看一下错在什么地方了,给指点指点
Vvvvvoid 发表于 2024-6-5 18:58
有个空指针要处理;
参考:
https://github.com/marlkiller/studio_3t_patch/tree/main/out/2024.2.0/t3
解决了,原来第二次进入能看得到报错的日志,获取体验截止时间的LocalDate报npe, 直接给它设个30天了 666 太强大了~支持 这玩意儿好用吗? 这软件感觉比navicat好使 songxp03 发表于 2024-4-24 22:08
这软件感觉比navicat好使
mongodb 这种细分领域, 还是这个强 这个软件不错,感谢这么详细的分析 大师是依据的几千年大数据 真的太强大了 强大 支持 支持{:1_921:} 大佬iOS 逆向有相关的资料学习吗