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檔案即可。