Charles4.2.7破解练习

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 进行覆盖原来的就行了

猜你喜欢

转载自blog.csdn.net/u014476720/article/details/83275639