Charles4.2.7破解練習
阿新 • • 發佈:2018-11-22
修改後的:
修改前的,進入需要等待
上圖是根據全域性搜尋關鍵詞“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 進行覆蓋原來的就行了