Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当浏览器连接Charles的代理访问互联网时,Charles可以监控浏览器发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。
在日常的抓包过程中可谓是必不可少的利器。同时Charles又是很人性的,虽然是收费软件,但即使不购买也能长期使用,并且功能上不会缺斤短两。唯一要付出的代价是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。秉着研究目的来学习它的注册逻辑。
一、找到注册逻辑
惯例,从注册按钮事件开始开始。

可以看到bRegister的监听事件,继续跟进HgWa

注意这里有一个明显的关键性判断: kKPk.lcJx(paramActionEvent, str)) != null,在之前的文章分析过,如果直接删掉这个判断的话会导致异常,所以需要进一步跟进kKPk类。这个类代码较多,就不全贴了,只挑重点的代码进行分析。
首先,从调用上看,该方法返回了null值,但是KcPF = paramString1又有一个赋值的操作。

接着,我们来整理几个重点的方法来看。例如有个布尔型的值lcJx(),我们直接让它返回true就可了。然后下面的String类型JZlU()方法,根据一个值来判断License的类型。我们不管那么多,直接了当的将方法返回值改成我们自己的string。
二、解决编译问题
修改完成后,接下来就是重新编译一下java文件,这是如果直接编译会发现报了一堆的错误,例如找不到LicenseType、乱码、LicenseException异常捕获错误等等。
举例来说:解决乱码
// 要去掉中间的,直接改为[]
paramString1.replaceAll("[�����������������������]", " ");
我们把这些错误解决后,就会得到修改后的class文件。
三、替换jar中的原始class文件
使用jar命令更新jar包,这里只需要注意package路径就好。GPSz类是在package com.xk72.charles的下面,所以需要本地创建一个一样的路径,否则不能正常更新到对应的jar目录。
四、试验
替换到原始的jar文件,打开charles,完美运行。

jar包下载
链接: https://pan.baidu.com/s/19QUxQkbRT-0wTdXEf-dR2A
密码: dqnb
