吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12437|回复: 258
上一主题 下一主题
收起左侧

[原创] JetBrains 全家桶系列 2024 破解思路....

    [复制链接]
跳转到指定楼层
楼主
Vvvvvoid 发表于 2024-4-29 17:29 回帖奖励
本帖最后由 Vvvvvoid 于 2024-5-4 16:28 编辑

关于(JetBrains 2024)

JetBrains 是一家全球性软件公司,专门为软件开发者和团队打造可以提升工作效率的智能工具。总部位于捷克共和国布拉格,在多个国家/地区设有研发实验室和销售办事处。

环境

  • IDEA
  • JDK 17
  • jadx

逆向分析

这块过程,直接省略吧;
代码各种混淆 跟 加密; 着实看不下去;
就在一筹莫展之际, 突然发现一个可行的破解方案;

这里以 GoLand 为例, 当 系统检测到未授权时,会弹出一个 license 框;
并且这个框在你输入license 之前退不了;

此刻, 我就想, 我们能不能 注入一些代码, 开启一个线程来检测 该 license 窗口, 并且来修改窗口属性呢??

一开始我自己写了一个 class, 代码如下:

class WindowWatcher {
    static {
System.out.println(">>>>>>>     WindowWatcher");
    }
}

然后把编译后的 WindowWatcher.class 随便找了一个 JetBrains 依赖的 JAR 塞进去了;

然后用命令后启动 GoLand;
发现打印的日志并没有我的 WindowWatcher;

不愧是 JetBrains, 想必 是用了自己写的类加载器, classLoader, 而且并不会加载 jar 包里所有的 class;

所有我们之前找 依赖里的 class 来反编译然后, 添加我们的 static 静态代码


        System.out.println(">>>>>>>     WindowWatcher");
        Thread watcherThread = new Thread(() -> {
            while (watcherFlag) {
                try {
                    // 每隔5秒执行一次遍历
                    Thread.sleep(5000);
                    Window[] windows = Window.getWindows();
                    for (Window window : windows) {
                        if (window instanceof JDialog dialog) {

                            List<JButton> buttons = getButtons(dialog);
                            for (JButton button : buttons) {
                                String text = button.getText();
                                // System.out.println("Button Text: " + text);
                                dialog.setTitle("K'ed by: marlkiller");
                                if (text != null && (text.contains("Quit") || text.contains("Close"))) {
                                    // dialog.setTitle(dialog.getTitle() + " 请点击["+text+"] 按钮");
                                    button.removeActionListener(button.getActionListeners()[0]);
                                    button.setText("<Close>");
                                    button.addActionListener(new ActionListener() {
                                        @Override
                                        public void actionPerformed(ActionEvent e) {
                                            watcherFlag = false;
                                            dialog.setVisible(false);
                                        }
                                    });
                                }
                            }
                        }
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        // 将线程设置为守护线程,随着主线程结束而结束
        watcherThread.setDaemon(true);
        watcherThread.start();

代码逻辑如下:
定时监测所有的窗口,
检测到 Licenses 窗口时 ,清除原始 Quit 按钮按钮的事件,
并且添加一个 close 当前 Dialog 的事件...

之后将class 覆盖, 然后重启app

之后会看到一个效果:

当弹出未授权窗口时, 点几 Quit 按钮, 该窗口就被隐藏了.....
之后我们正常打开项目即可..

大概是考虑到社区版,以及不同产品的兼容性;
所以除了启动窗口的时候, 没看到有别的地方有什么限制;

除此之外, 还有一个破解思路;
用 Agent 来动态修改 字节码文件,
但是目前的 class混淆加密严重,着实不知道 agent 改给哪些clz 挂钩哦

搞了个 shell 脚本,一键替换打包资源

target_app="/Users/voidm/Applications/GoLand.app"
rewrite_file="$(pwd)/../out/production/java_dev/com/jetbrains/ls/responses/License.class"
rewrite_file2="$(pwd)/../out/production/java_dev/com/jetbrains/ls/responses/License\$1.class"

echo "Changing directory to ${target_app}/Contents/lib"
cd "${target_app}/Contents/lib"

# 查找包含目标 Class 的 jar 包
check_jar_for_class() {
    local directory="$1"
    local class_file="$2"
    local found=false

    for jar_file in "$directory"/*.jar; do
        if jar tf "$jar_file" | grep -q "$class_file"; then
            # 返回包含指定类文件的jar包名称
            echo "$(basename "$jar_file")"
            found=true
            return
        fi
    done

    # 如果未找到指定文件,则输出日志并退出
    if ! $found; then
        echo "target class_file not found" >&2
        exit 1
    fi
}

jar_name=$(check_jar_for_class "${target_app}/Contents/lib" "com/jetbrains/ls/responses/License.class")
echo "target_jar is : $jar_name"

jar_file="${target_app}/Contents/lib/${jar_name}"
jar_file_back="${jar_file}_Backup"

# 备份文件
if [ ! -f "$jar_file_back" ]; 
then
    echo "Backing up $jar_file to $jar_file_back"
    cp "$jar_file" "$jar_file_back"
fi

# 解压缩 Jar
echo "Extracting ${jar_name}"
jar -xvf ${jar_name} com/jetbrains/ls/responses/License.class

# 替换文件
cp -f ${rewrite_file} "./com/jetbrains/ls/responses/License.class"
cp -f ${rewrite_file2} "./com/jetbrains/ls/responses/License\$1.class"

# 重新打包
echo "Compressing ${jar_name}"
jar -uvf ${jar_name} "com/jetbrains/ls/responses/License.class"
jar -uvf ${jar_name} "com/jetbrains/ls/responses/License\$1.class"
# 清理临时文件
rm -rf ./com

后记

人啊, 不能太闲; 太闲的时候就会胡闹,比如这个胡闹出来的破解思路.....
找工作真tm难..

仅供研究学习使用,请勿用于非法用途
注:若转载请注明来源(本贴地址)与作者信息。

免费评分

参与人数 108吾爱币 +106 热心值 +102 收起 理由
网瘾少年徐志摩 + 1 + 1 谢谢@Thanks!
xujihua + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
tzz1040 + 1 我很赞同!
happyovo + 1 + 1 大佬强啊
guyuchao3 + 1 + 1 我很赞同!
We. + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lyrong2008 + 1 用心讨论,共获提升!
lookfeiji + 1 + 1 谢谢@Thanks!
spd97 + 1 + 1 我很赞同!
skrskr + 1 + 1 谢谢@Thanks!
天堂的风 + 1 + 1 谢谢@Thanks!
DD_chang + 1 + 1 谢谢@Thanks!
harryczqp + 1 + 1 用心讨论,共获提升!
Memory丶冷眸 + 1 用心讨论,共获提升!
初亦泽 + 3 + 1 这思路真牛!
aidou316 + 1 + 1 用心讨论,共获提升!
404nameless + 1 + 1 我很赞同!
温故而知新 + 1 + 1 谢谢@Thanks!
qingshuiyixin + 1 我很赞同!
YQYuan + 1 + 1 谢谢@Thanks!
Z2523 + 1 用心讨论,共获提升!
wangyongdesign + 1 + 1 谢谢@Thanks!
爱飞的猫 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
136122qwe + 1 + 1 我很赞同!
木旦理 + 1 + 1 热心回复!
xiaohuaiwu + 1 用心讨论,共获提升!
aben2015 + 1 谢谢
Atnil + 1 + 1 谢谢@Thanks!
Zed丶小灰狼 + 1 热心回复!
xylyl + 1 + 1 用心讨论,共获提升!
xinyangtuina + 1 + 1 谢谢@Thanks!
dadao815 + 1 + 1 用心讨论,共获提升!
weidechan + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
kang_alone + 1 + 1 热心回复!
zhenze + 1 热心回复!
ijarod + 1 + 1 谢谢@Thanks!
hhengzui + 1 + 1 我很赞同!
皮皮鲲 + 1 + 1 我很赞同!
爆青筋的茄子 + 1 + 1 我很赞同!
l199965889 + 1 + 1 谢谢@Thanks!
zzzzzy2k + 1 + 1 谢谢@Thanks!
傻傻的小鸟 + 1 + 1 谢谢@Thanks!
打不过就加入 + 1 + 1 谢谢@Thanks!
kuiba + 1 + 1 谢谢@Thanks!
chinabrz + 1 + 1 用心讨论,共获提升!
bugof52pj + 1 谢谢@Thanks!
willgoon + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
corleoneYellow + 1 + 1 我很赞同!
pdcba + 1 + 1 谢谢@Thanks!
飞吧土豆 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
nonomo + 1 + 1 我很赞同!
小可爱~ + 2 + 1 用心讨论,共获提升!
rig + 1 + 1 用心讨论,共获提升!
ijie + 1 + 1 我很赞同!
pod2023 + 1 谢谢@Thanks!
cwxtlsg + 1 + 1 谢谢@Thanks!
xlwllm + 1 + 1 用心讨论,共获提升!
zermx + 1 + 1 我很赞同!6666
照片依旧 + 1 + 1 我很赞同!
熠耀宵行 + 1 用心讨论,共获提升!
yaan + 1 + 1 热心回复!
nekoneko2021 + 1 + 1 谢谢@Thanks!
Issacclark1 + 1 谢谢@Thanks!
jokerkun + 1 + 1 我很赞同!
ue5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
aerofsm + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Lake0570 + 1 + 1 谢谢@Thanks!
mushan2000 + 1 + 1 热心回复!
snakey2k + 1 + 1 谢谢@Thanks!
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Gentia + 1 + 1 用心讨论,共获提升!
cloudy520 + 1 + 1 谢谢@Thanks!
dianfu + 1 + 1 我很赞同!
fm33 + 1 + 1 我很赞同!
zhp_king + 1 我很赞同!
caijicao + 1 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
hualy + 1 我很赞同!
shengruqing + 1 我很赞同!
wwlong7737 + 1 谢谢@Thanks!
44018723 + 1 + 1 用心讨论,共获提升!
qhdsinoocean + 1 + 1 谢谢@Thanks!
chwken + 1 + 1 谢谢@Thanks!
夜莺高歌 + 1 + 1 我很赞同!
常胜将军 + 1 + 1 我很赞同!
supercilious + 1 + 1 鼓励转贴优秀软件安全工具和文档!
vergil0528 + 1 + 1 我很赞同!
5Axi + 1 我很赞同!
center + 1 + 1 用心讨论,共获提升!
s3nake + 1 + 1 我很赞同!
雨落惊鸿, + 1 + 1 谢谢@Thanks!
gwsgws + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lechao + 1 我很赞同!
zengsipei + 1 + 1 热心回复!
孤单魂随风荡 + 1 + 1 我很赞同!
smallmin + 1 + 1 用心讨论,共获提升!
vintager359 + 1 + 1 谢谢@Thanks!
lxgroot + 1 + 1 谢谢@Thanks!
DRZH + 1 + 1 我很赞同!
theStyx + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
wjw465150 发表于 2024-4-30 13:09
帮楼主归纳整理了一下,用破解后的 product-client.jar文件 把官方 lib 目录下的替换掉就行!
链接: https://pan.baidu.com/s/1CT82OBpoa-47RM4H8_hzgA?pwd=jb17 提取码: jb17

免费评分

参与人数 6吾爱币 +8 热心值 +5 收起 理由
Navyzhou + 1 我很赞同!
theStyx + 2 + 1 谢谢@Thanks!
gaoxiaoao + 1 + 1 感谢大佬,造福菜鸟
skywall + 1 + 1 谢谢@Thanks!
小可爱~ + 2 + 1 谢谢@Thanks!
willgoon + 1 + 1 谢谢@Thanks!

查看全部评分

推荐
艾莉希雅 发表于 2024-4-29 20:01
推荐
beichen1031 发表于 2024-4-30 09:41
其实可以通过无限试用来实现,而且不会损坏文件
我一直用iobit advanced syscare,发现 有时 当我运行清理时它会清除idea的试用信息,然后就无限试用了,也没再管过;
推荐
vLove0 发表于 2024-4-29 20:26
思路牛逼,在看雪上有关于jetbrain相关的逆向,
https://bbs.kanxue.com/thread-271578.htm
https://bbs.kanxue.com/thread-271052.htm
可以研究下。现在主流的破解方式是用zhile的ja-netfilter,原理是替换证书校验结果。jetbrain授权机制可以参考其官方代码https://github.com/JetBrains/marketplace-makemecoffee-plugin/blob/master/src/main/java/com/company/license/CheckLicense.java

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
Vvvvvoid + 2 + 1 研究下

查看全部评分

推荐
狂喝不倒 发表于 2024-4-29 19:44
J  B 表示,收到,马上改!
推荐
lplayer 发表于 2024-5-3 17:19
哪位大佬教一下怎么制作License.class, License$1.class文件?编译的时候各种依赖库怎么解决?
推荐
wjw465150 发表于 2024-5-6 21:57
wjw465150 发表于 2024-4-30 13:09
帮楼主归纳整理了一下,用破解后的 product-client.jar文件 把官方 lib 目录下的替换掉就行!
链接: https:/ ...

为了简化群友使用难度,又写了一个java小程序,直接执行就行: "java -jar CrackJetBrains-fat.jar <product-client.jar file path>",放在了网盘供网友自己下载使用! 链接: https://pan.baidu.com/s/1GHOIT49okWDGoIoymmuWhw?pwd=97hf 提取码: 97hf
推荐
 楼主| Vvvvvoid 发表于 2024-4-30 13:53 |楼主
wjw465150 发表于 2024-4-30 13:09
帮楼主归纳整理了一下,用破解后的 product-client.jar文件 把官方 lib 目录下的替换掉就行!
链接: https:/ ...

不同的版本, 依赖的 jar 不太一样
2024.4 跟 2024.4.1 也有很大不同;
可以参考 我的shell 脚本, 动态获取 jar
沙发
anning666 发表于 2024-4-29 17:33
这样也行~~~~楼主牛B,666
3#
WhiteSoul 发表于 2024-4-29 17:46
我靠,还能这么玩
4#
qixiangcn 发表于 2024-4-29 17:48
佩服,楼主威武
5#
只送两个头 发表于 2024-4-29 17:53
怕是会被删
6#
 楼主| Vvvvvoid 发表于 2024-4-29 17:54 |楼主

我加了10分的阅读权限, 是不是加高点 合适
7#
geesehoward 发表于 2024-4-29 17:55
找工作其实不难,找到自己满意的,主要是薪资高的工作难度还是不小的
8#
侃遍天下无二人 发表于 2024-4-29 17:57
JB表示说得好,下次加载前先验证字节码签名
9#
Galaxyou 发表于 2024-4-29 17:57
Vvvvvoid 发表于 2024-4-29 17:54
我加了10分的阅读权限, 是不是加高点 合适

不准加了嗷
10#
kittylang 发表于 2024-4-29 17:59
未曾设想的套路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 00:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表