Charles4.0最新版破解(更新至4.1)
2016-08-10 20:10
555 查看
本文为笔者原创,转载请标明出处: http://endlulu.coding.me/2016/08/09/Charles4-0%E6%9C%80%E6%96%B0%E7%89%88%E7%A0%B4%E8%A7%A3/
前言
现在在OSX下办公,开发中Charles作为非常优秀的一款抓包工具必不可少。之前的3.x版本是公司的资管给输入的注册码,用着非常爽。今天突然提示可以升级为新版本,好奇和欣喜的心情就下载并安装了。万万没有想到,替换旧应用居然不会保留注册信息。Orz。本着不麻烦别人的初衷,尝试着自己动手破解。于是就这样踏上了一条不归路。
开门见山
先放出快速破解的方法给想快速解决的朋友。下载破解好的charles.jar 文件。链接: https://pan.baidu.com/s/1qY9x70S 密码:
b46n
(4.0.1版本已更新,链接: https://pan.baidu.com/s/1sl8cRox 密码: ngzz)
4.1版本更新,感谢博友 黎稀 提供。链接:https://pan.baidu.com/s/1c14trDe 密码: wc6d
在应用程序中右键Charles,选择“显示包内容”。
依次打开目录:Contents -> Java
用下载的charles.jar替换目录中的charles.jar。
重启Charles即可。
自己动手
方法来源
想到破解时,首先是先google了一下,看是否有注册机或分享的注册码等,毕竟是比较出名的软件。结果是注册机的信息几乎没有,注册码和自己破解的方法倒是得到了很多信息。但是都是针对3.x版本,因为4.0才刚刚发布。 尝试了几个注册码,均无效,果断放弃,开始了解自己动手破解。看了几篇论坛的帖子,都是像本文上面一样,提供了一个Charles.jar去替换。版本的原因,依然有效的希望不大,还是抱着希望试了试,fail。
既然方法是替换这个jar,那么关于授权部分的代码肯定是在这里被前任修改了,只不过现在有变化而已。我工作使用的主语言就是java,思考一下,觉得自己反编译看看逻辑应该问题不大,既然有人成功过,现在也还是很有希望的。于是开始动手。
工具
jdkclass反编译软件
jdk编译代码,打jar包。反编译软件随意,看网友推荐jadx,不知是我用的不对还是怎么,并未成功,我直接用的IDEA,class文件直接拖进去即可。
步骤
首先将charles.jar解压,观察内部类结构。虽然名字都扰码变成了A.class之类的,但是com/xk72/charles中一眼就能看到有个License.class,如果我的英文没烂到这个词都认错了,肯定和它有关系,打开瞧瞧。变量和方法名都变了,看不出太多的信息,但是其中一个方法巨多的位运算,更加对我的猜想自信了。但是这个类有这么多不知用途的方法,具体的逻辑有看不出来,怎么办呢?反正今天闲,一个一个的看其他的class,看看都哪里调用了这个类的方法,对返回值是怎么判断的。如果能找到,应该有突破。
看了上百个class后,得到信息如下:
com/xk72/charles/gui/frames/下有个RegisterFrame,判断为填写注册吗的界面,打开后发现同目录的f.class为那个注册按钮的事件监听器。打开f.class.
123456789101112131415 | public final void actionPerformed(ActionEvent var1) { String var4 = RegisterFrame.a(this.a).getText().trim(); String var2 = RegisterFrame.b(this.a).getText().trim(); if(var4.length() > 0 && var2.length() > 0) { String var3; if((var3 = License.a(var4, var2)) != null) { ExtendedJOptionPane.a(this.a, var3, "Charles Registration", 2); return; } ExtendedJOptionPane.a(this.a, "Thank you for registering. ... ... } } |
在第一步找到的Lisense.class的135行找到该方法如下:
1234567891011 | public static String a(String var0, String var1) { License var3; try { var3 = new License(var0, var1); } catch (LicenseException var2) { return var2.getMessage(); } b = var3; return null; } |
123456789101112 | public static String a(String var0, String var1) { if(0 < 1) return null; License var3; try { var3 = new License(var0, var1); } catch (LicenseException var2) { return var2.getMessage(); } b = var3; return null; } |
就按照如上的方式,逐步找到了其他调用授权信息的地方。根据判断逻辑改写License.java中的几方法。修改的内容如下:
123 | private License$LicenseType f;改为private int f; |
12345678 | public static boolean a() { License var0 = b; return b.c;}改为public static boolean a() { return true;} |
123456789101112131415161718192021222324252627 | public static String b() { License var0 = b; switch(p.a[var0.f.ordinal()]) { case 1: return var0.d; case 2: return var0.d + " - Site License"; case 3: return var0.d + " - Multi-Site License"; default: return var0.d; } }改为public static String b() { License var0 = b; switch(var0.f) { case 0: return var0.d; case 1: return var0.d + " - Site License"; case 2: return var0.d + " - Multi-Site License"; default: return var0.d; } } |
12345678910111213141516171819202122232425 | private String d() { switch(p.a[this.f.ordinal()]) { case 1: return this.d; case 2: return this.d + " - Site License"; case 3: return this.d + " - Multi-Site License"; default: return this.d; } }改为private String d() { switch(this.f) { case 0: return this.d; case 1: return this.d + " - Site License"; case 2: return this.d + " - Multi-Site License"; default: return this.d; } } |
123456789101112131415161718192021222324252627 | switch((int)(var6 << 32 >>> 32 >>> 16 & 255L)) { case 1: this.f = License$LicenseType.a; break; case 2: this.f = License$LicenseType.b; break; case 3: this.f = License$LicenseType.c; break; default: throw new LicenseException(this.a(1)); }改为switch((int)(var6 << 32 >>> 32 >>> 16 & 255L)) { case 1: this.f = 0; break; case 2: this.f = 1; break; case 3: this.f = 2; break; default: throw new SerialException(this.a(1)); } |
删除三个import:
123 | import com.xk72.charles.License$LicenseType;import com.xk72.charles.LicenseException;import com.xk72.charles.p; |
1 | javac -source 1.7 -target 1.7 -d . License.java |
利用jar命令将篡改过的class,打入charles.jar内。
1 | jar -uvf charles.jar com/xk72/charles/License.class |
防止修改过程造成困扰,附上我的License.java,作为参考。License.java
结束语
整个的破解过程个人觉得是比较笨拙的,如果有更好的方法,请不吝赐教。 本文为笔者原创,转载请标明出处: http://endlulu.coding.me/2016/08/09/Charles4-0%E6%9C%80%E6%96%B0%E7%89%88%E7%A0%B4%E8%A7%A3/
相关文章推荐
- Charles4.0最新版破解(更新至4.1)
- Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.2(转)
- Charles 最新版(Charles 4.1.4 ) 破解注册
- Charles4.0最新版破解
- Mac下面的SecureCRT(附破解方案) 更新到最新的8.0.2[亲测可用]
- Charles破解网站收藏(持续更新)
- jetbrains idea/webstorm等(注册,激活,破解,码,一起支持正版,最新可用)(2017.3.16更新)
- QQ空间4.0最新上百种使用代码 26日更新
- webstorm 2016(2016.11.25更新)11 12 (注册,激活,破解,码,一起支持正版,最新可用)
- Mac用户抓包软件Charles 4.0 破解 以及 抓取Https链接设置
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.7.1903.0
- webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新)
- 最新版的SSH框整合(Spring 3.1.1 + Struts 2.3.1.2 + BoneCP + Hibernate 4.1)更新增加C3P0和EhCache配置
- Mac下面的SecureCRT(附破解方案) 更新到最新的7.3.2
- Windows8 RTM版激活方法(各种破解方法汇总,持续更新中8.22最新可激活法)
- webstorm 2016(2016.11.25更新)11 12 (注册,激活,破解,码,一起支持正版,最新可用)
- Charles最新版破解注册方法
- webstorm(注册,激活,破解,码,一起支持正版,最新可用)(2016.9.2更新)
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.5.1727.0
- webstorm 2017(2017.01更新)11 12 (注册,激活,破解,码,一起支持正版,最新可用)