:::tip
主要记录自己在学习逆向分析JetBrains过程中的点点滴滴成长,目前还在记录分析之中,由于有其他项目可能有所微小的耽搁,不知道后会不会烂尾呢😋。
:::

主要思路:

  1. 修改启动选项切换到本地JDK,方便使用jps 等工具

  2. 利用 jpsjinfo <pid> 配和查找 sun.java.command 定位main 函数,确认程序启动入口位置

  3. 通过 启动添加 -verbose 参数分析main 函数所在jar包

  4. 将所需分析Jar包的Class资源转换为.java的源码形式文件这里工具可有两种,独立程序JD-GUI 以及IDEA自带程序 fernflower (据说跟minecraft 有渊源)注:双方结合使用较为妥当,二者反编译能力面对混淆也是非常无力的。

  5. 利用阿里的Java运行时诊断程序arthas 可以dump运行时产生的类或者使用jad 指令及时的查看产生的源码。

注:配置文件在相应的程序名.jar包中 恢复后即可使用。后发现文件混淆过度,无法利用Idea进行动态调试,遂参考网上方案使用BTrace 进行相关跟踪,效果颇为显著。

2020/02/27

第一次记录今天的分析路程,尝试了多种方案,利用BTrace 跟踪JButton的构造方法再栈回溯算是小有突破。

根据这个方向,初步打算解决评估版本过期后经过网络验证以后会强制退出。而退出前会弹出一个基于JOptionPane封装的Dialog,然后会强制退出,由于是多线程问题,无法能够利用静态的方案定位到退出函数,因此以此对话框为基点经过栈回溯,定位相应方法。

1
2
3
4
5
javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:857)
com.intellij.ide.a.d.i.b(i.java:235)
com.intellij.ide.b.a.a(a.java:156)
com.intellij.ide.b.a.a(a.java:105)
com.intellij.ide.b.a.lambda$null$0(a.java:68)

目前在com.intellij.ide.b.a.a 上找到ApplicationManager.getApplication().exit(true, true, false); 一个退出函数,但是暂未确定是响应的退出,以及以何种方式绕过。

2020/02/28

待续…

参考文档:

  1. java应用破解之破解 jeb mips 2.3.3
  2. CLion注册码算法逆向分析实录
  3. 【MyEclipse 2015】 逆向破解实录系列【1】(纯研究)
  4. 【MyEclipse 2015】 逆向破解实录系列【2】(纯研究)
  5. 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录