7点微信公众号:请点这里。7点测试网QQ总群:277957570。

7点测试网

 找回密码
 注册7点

QQ登录

只需一步,快速开始

查看: 763|回复: 0
打印 上一主题 下一主题

BTrace系列之:破解案例

[复制链接]
跳转到指定楼层
1#
发表于 2013-12-3 14:46:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

破解案例


破解思路:使用BTrace可以轻松的对Java软件达到破解的目的。

1.捕捉某些征兆:大家都知道共享软件在未授权的情况下使用,软件开发者未了使得更多的客户购买使用,会强制使用一些手段包括对软件功能进行限制,对软件使用失效进行限制,对软件进行不友好的标注,那么这些就是我们要捕捉的征兆,可是凡是有利就有弊,软件开发者对用种种限制或提示,以此来提醒或者逼迫使用者进行购买使用,确实在某种程度上可以增加软件的销售量,但是也正是因为这些征兆使用软件破解成为一种可能。这些征兆也成为一些不法分子的破解共享软件的入口。

2.使用BTrace进行跟踪:捕捉好征兆后就可以使用BTrace利器对于这些征兆进行捕捉了,主要是通过BTrace将这些征兆的判断逻辑捕获到。
3.修改判断逻辑进行破解:相对来说这一步骤较为简单了,通过步骤2找到了判断逻辑位置,通过对相应的位置进行反编译,然后进行修改即可。或者是使用ASM进行字节码修改。

使用反编译的情况是,字节码没有进过严重混淆,有些共享软件开发者会使用一些工具对字节码进行混淆,不同的工具混淆程度也不一样,同样字典也不一样,但是可以确定的一件事就是反编译的难度加大了,同样导致修改判断逻辑难度加大。

实际案例


下面就根据上述的思路进行某共享软件的破解。

某软件在未购买软件的情况下使用,会有2小时后自动退出的问题,导致严重影响了客户体验。而且或有不友好的提示。对于我们来说2小时的自动退出就是一个不错的征兆,那么退出自然是通过System.exit(0)来实现的,并且在退出前还有一些提示,那么这样就可以在跟踪到多处System.exit(0)之后,在根据提示信息来进行区分,到底哪些才是我们真正想要的征兆。

使用BTrace脚本:
  1. /* BTrace Script Template */  
  2. import com.sun.btrace.annotations.*;   
  3. import static com.sun.btrace.BTraceUtils.*;   
  4.   
  5. @BTrace  
  6. public class TracingScript {   
  7.     /* put your code here */  
  8.     @OnMethod(clazz="+java.lang.Object", method="/.*/", location=@Location(value=Kind.CALL, clazz="java.lang.System", method="exit"))   
  9.     public static void trace(@ProbeClassName String className, @ProbeMethodName String methodName)   
  10.     {   
  11.         println("*****************************************");   
  12.         print(className);   
  13.         println(Strings.strcat(".", methodName));   
  14. }  
复制代码

输出:

XXX.XXX.A.G.B

反编译该class


  1. static void B(String paramString)   
  2.     {   
  3.         if (N)   
  4.             return;   
  5.         N = true;   
  6.         SwingUtilities.invokeLater(new Runnable(paramString)   
  7.         {   
  8.             public void run()   
  9.             {   
  10.                 JOptionPane.showMessageDialog(null, C.this  
  11.                         + ", System will exit.");   
  12.                 System.exit(0);   
  13.             }   
  14.         });   
  15.     }  
复制代码


发现是这个方法调用的System.exit(0),接下来就很简单了,只要将该class修改后替换原来的class文件即可。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
您需要登录后才可以回帖 登录 | 注册7点

本版积分规则

QQ|Archiver|手机版|小黑屋|7点测试网 ( 京ICP备09084002号

GMT+8, 2018-5-20 14:20 , Processed in 0.200026 second(s), 21 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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