逆向怎么玩 - 动态调试jetBrains CLion实录

声明

CLion程序版权为jetBrains所有、注册码授权为jetBrains及其付费用户所有,本篇只从兴趣出发,研究其程序运行原理及注册码生成算法。

  • 不会释出任何完整的源代码.
  • 网上查了下,已有注册机,所以想要key的同学不要找我:p

背景

在上篇:CLion注册码算法逆向分析实录

我们通过结合jdb、jd-gui等工具,静态分析被混淆过的CLion的clion.jar中的class信息,顺利拿到了CLion的注册码算法.

但是,如果能在动态调试中分析代码路径,拿注册码并推算法不是更愉快么?
本篇将从动态调试的角度展开逆向之旅,作为对上篇的一个补充。

本篇用到的关键技术和工具:

  • java -verbose
  • HotSpot™ Serviceability Agent
  • jetBrains intellij IDEA 14.3
  • jetBrains CLion 1.0.4
  • jd-gui 1.2
  • jinfo

动态调试的困难

因为没有源代码,而CLion的class经过混淆,且有很多运行时生成的class,所以无法直接通过简单地使用类似jd-gui之类的工具来得到java文件。

如果仅仅是名称和控制流混淆,其实还是比较简单的情况,不是太变态的情况下,jd-gui可以拿到java代码,如果混淆的很厉害,一般也有字节码可以看,所以需要我们对字节码或混淆代码的阅读感觉比较熟练即可。

如果是上面的相对简单的情况,我们可以有耐心地重建或者修补反编译而来的java代码,以达到调试的目的。

CLion的情况不同,它还有一些运行时生成的类,再加上混淆,使得我们很难仅仅通过反编译来完成动态调试的准备。


获取入口函数所在的类名

办法总比困难多,让我们开始准备动态调试吧!

通过上一篇博文的分析,我们已经熟悉了CLion程序启动的一些代码路径,首先要找到程序的入口函数main,并重建它。怎么找呢?

  • 方法1:通过启动脚本来找

可以通过查看$CLION_HOME/bin下的clion.sh来看启动参数:

133 MAIN_CLASS_NAME="$CL_MAIN_CLASS_NAME"
134 if [ -z "$MAIN_CLASS_NAME" ]; then
      #注意这里
135   MAIN_CLASS_NAME="com.intellij.idea.Main"
136 fi
...
176 LD_LIBRARY_PATH="$IDE_BIN_HOME:$LD_LIBRARY_PATH" "$JDK/bin/java" \
177   $AGENT \
178   "-Xbootclasspath/a:$IDE_HOME/lib/boot.jar" \
179   -cla
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值