前言
收费是不可能收费的,这辈子都不能收费的!
破解
由于Charles
是使用java
这种弱语言编写的,即使加了各种混淆,但是也难逃被破解的命运!
官网上下载的只能免费使用30天
首先使用jadx-gui
打开,搜索关键字符串This is a 30 day trial version
,很容易便可以看到验证逻辑。
也就是我们只需使kKPk.IcJx()
的返回true
即可完成破解,这是本文的重点,也是写作的目的。
总的来说有两种方式:
第一种使用jbe
工具,修改字节码
第二种利用javassist
修改字节码
方法一
这种方法一般来说比较的暴力,直接修改字节码,一般来说如果程序本身不做校验,那么此方法是可行的,大不了干脆把校验的部分也给去除。哈哈没错,就是这么刚!
jbe
这个工具官网上只有源码和未打包的bin
目录,可以在本地自己编一个java
项目,也可以在csdn
上下载别人打包好的jar
包
首先我们需要在linux
下解压charles.jar
包,找到kKPk.class
文件,然后使用jbe
打开,找到关键函数,这里你需要了解一下java
的字节码。
然后做如下的修改
为什么要改成这样?你完全可以自己写一个简单的java
函数,然后使用jbe
进行查看。
之后将修改之后的kKPk.class
文件替换jar
包中的kKPk.class
,为了验证是否修改成功,再次使用jadx-gui
打开修改之后的charles.jar
然后再次运行便可以去除了使用30
天的提示,如果你想个性化一点还可以修改kKPk.JZIU()
的方法,使其返回你的ID
,我这里便不做了。
方法二
这里使用IDEA
编写代码并且需要导入javassist.jar
包
核心代码如下:
public static void patchClass(String jarPath) throws Exception {
ClassPool classPool = ClassPool.getDefault();
classPool.insertClassPath(jarPath);
CtClass ctClass = classPool.get("com.xk72.charles.kKPk");
//修改return true
CtMethod ctMethod = ctClass.getDeclaredMethod("lcJx", null);
ctMethod.setBody("{return true;}");
ctMethod = ctClass.getDeclaredMethod("JZlU", null);
ctMethod.setBody("{return \"Cracke by BadRer!!\";}");
//更新class文件
ctClass.writeFile();
//修改原有的方法名
// ctMethod.setName("a");
}
我们可以在项目中看到kKPk.class
文件,之后我们可以使用jar uvf charles.jar com/xk72/charles/kKPk.class
将修改之后的class
文件打入jar
包中,同样在此使用jadx-gui
查看
最后将charles.jar
替换即可
所以破解其实很简单。。。
总结
最后建议使用第二种方法会更加的方便,毕竟不是每个人都对
java
的字节码很熟悉。