Studio 3T 2024.2.0 [JAVA] 逆向分析,跨平台通杀

查看 156|回复 10
作者:Vvvvvoid   
关于(Studio 3t 2024.2.0)
studio 3t是一款能够有效让数据库的管理进行更好的可视化工具,又称Robomongo  ;
是由MongoDB客户端Studio 3T的开发人员维护和提供的,适用于Windows,MacOS和Linux的跨平台。
环境
  • IDEA
  • JDK 17
  • jadx

    前记
    似乎翻遍了 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]
  • 把 423 行的俩个函数 (dy() || dK())  返回值改为 return true; // 这俩个是判断 license 是否过期的
  • 把 426 行的函数 (dA()) 返回值改为 return false; // 这个函数是判断 license 是否禁用
  • 把 432 行的函数 dG() 返回值改为 30; // 这个看起来是使用到期天数
    [/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 ..
    仅供研究学习使用,请勿用于非法用途
    注:若转载请注明来源(本贴地址)与作者信息。

    下载次数, 下载附件

  • 无敌小儿   


    Vvvvvoid 发表于 2024-4-25 15:16
    是的, 混淆过的代码, 太恶心了,不想费劲折腾了


    t3.zip
    (6.27 KB, 下载次数: 1)
    2024-4-25 15:26 上传
    点击文件名下载附件
    下载积分: 吾爱币 -1 CB

    大佬,我照着您的步骤编译了下没有成功,方便了给看一下错在什么地方了,给指点指点
    狂侠先森   

    666 太强大了~支持
    ↗神奇、宝贝↘   

    这玩意儿好用吗?
    songxp03   

    这软件感觉比navicat好使
    Vvvvvoid
    OP
      


    songxp03 发表于 2024-4-24 22:08
    这软件感觉比navicat好使

    mongodb 这种细分领域, 还是这个强
    xixicoco   

    这个软件不错,感谢这么详细的分析
    SGC沉默   

    大师是依据的几千年大数据
    Lty20000423   

    真的太强大了
    tianmenghuan   

    强大   支持 支持  
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部