天天看點

BTrace系列之四:破解案例

BTrace系列之四:破解案例

破解案例

破解思路:使用BTrace可以輕松的對Java軟體達到破解的目的。

1.捕捉某些征兆:大家都知道共享軟體在未授權的情況下使用,軟體開發者未了使得更多的客戶購買使用,會強制使用一些手段包括對軟體功能進行限制,對軟體使用失效進行限制,對軟體進行不友好的标注,那麼這些就是我們要捕捉的征兆,可是凡是有利就有弊,軟體開發者對用種種限制或提示,以此來提醒或者逼迫使用者進行購買使用,确實在某種程度上可以增加軟體的銷售量,但是也正是因為這些征兆使用軟體破解成為一種可能。這些征兆也成為一些不法分子的破解共享軟體的入口。

2.使用BTrace進行跟蹤:捕捉好征兆後就可以使用BTrace利器對于這些征兆進行捕捉了,主要是通過BTrace将這些征兆的判斷邏輯捕獲到。

3.修改判斷邏輯進行破解:相對來說這一步驟較為簡單了,通過步驟2找到了判斷邏輯位置,通過對相應的位置進行反編譯,然後進行修改即可。或者是使用ASM進行位元組碼修改。

使用反編譯的情況是,位元組碼沒有進過嚴重混淆,有些共享軟體開發者會使用一些工具對位元組碼進行混淆,不同的工具混淆程度也不一樣,同樣字典也不一樣,但是可以确定的一件事就是反編譯的難度加大了,同樣導緻修改判斷邏輯難度加大。

實際案例

下面就根據上述的思路進行某共享軟體的破解。

某軟體在未購買軟體的情況下使用,會有2小時後自動退出的問題,導緻嚴重影響了客戶體驗。而且或有不友好的提示。對于我們來說2小時的自動退出就是一個不錯的征兆,那麼退出自然是通過System.exit(0)來實作的,并且在退出前還有一些提示,那麼這樣就可以在跟蹤到多處System.exit(0)之後,在根據提示資訊來進行區分,到底哪些才是我們真正想要的征兆。

使用BTrace腳本:

/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class TracingScript {
	/* put your code here */
    @OnMethod(clazz="+java.lang.Object", method="/.*/", [email protected](value=Kind.CALL, clazz="java.lang.System", method="exit"))
    public static void trace(@ProbeClassName String className, @ProbeMethodName String methodName)
    {
        println("*****************************************");
        print(className);
        println(Strings.strcat(".", methodName));
}
           

 輸出:

XXX.XXX.A.G.B

反編譯該class

static void B(String paramString)
    {
        if (N)
            return;
        N = true;
        SwingUtilities.invokeLater(new Runnable(paramString)
        {
            public void run()
            {
                JOptionPane.showMessageDialog(null, C.this
                        + ", System will exit.");
                System.exit(0);
            }
        });
    }
           

發現是這個方法調用的System.exit(0),接下來就很簡單了,隻要将該class修改後替換原來的class檔案即可。