版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014476720/article/details/83275639
修改后的:
修改前的,进入需要等待
上图是根据全局搜索关键词“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 进行覆盖原来的就行了