1. 程式人生 > >Charles4.2.7破解練習

Charles4.2.7破解練習

修改後的:

修改前的,進入需要等待

上圖是根據全域性搜尋關鍵詞“This is a 30 day trial version”找到,由這個方法showRegistrationStatus得知主要是註冊了就不會顯示免費三十天,可見kKPk.lcJx()是控制是否註冊了的關鍵點

具體詳情可以看這裡(http://www.520monkey.com/archives/1295),我都是參考其思路重新進行一遍練習,只不過其文章講述的是4.1.4的,我練習的是4.2.7的,只是有些方法名不一樣而已

修改前:

修改後:

 


public class CrackCharles {


    public static void main(String[] agrs) throws Exception {
        String packages = "com.xk72.charles";
        String jarPath = "E:\\jar\\charles.jar";
        String jarDir = "E:\\jar\\";
        ClassPool pool = ClassPool.getDefault();
        pool.insertClassPath(jarPath);
        CtClass cc = pool.get(packages + ".kKPk");
        try {
            //以下是修改class檔案的方法返回
            CtMethod fMethod = cc.getDeclaredMethod("lcJx", null);
            fMethod.setBody("{return true;}");
            fMethod = cc.getDeclaredMethod("JZlU", null);
            fMethod.setBody("{return \"Cracke by kawa!!\";}");
            //以下是生成新的class檔案,kKPk.class檔案的目錄要跟jar包裡面的一樣
            String classPath = packages.replace(".", "/");
            File dirFile = new File(jarDir + classPath + "/kKPk.class");
            if (!dirFile.getParentFile().exists()) {
                dirFile.getParentFile().mkdirs();
            }
            FileOutputStream outputStream = new FileOutputStream(dirFile);
            outputStream.write(cc.toBytecode());
            //以下是進行覆蓋替換的命令
            String cmd = "jar uvf charles.jar "+classPath+"/kKPk.class";
            System.out.println("cmd:" + cmd);
        } catch (Exception e) {
            System.out.println("e:" + e.toString());
        }
    }
}

我是在Android studio 操作的,引入的包有

implementation 'org.javassist:javassist:3.20.0-GA'

本來想在程式碼上直接執行命令的,當時不知道為啥就是執行不成功,然後想想還是直接列印命令直接在cmd執行算了

之後直接將生成的charles.jar  去 C:\Program Files\Charles\lib 進行覆蓋原來的就行了