转载地址:http://blog.csdn.net/endlu/article/details/52175787

原文地址: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。本着不麻烦别人的初衷,尝试着自己动手破解。于是就这样踏上了一条不归路。

开门见山

​ 先放出快速破解的方法给想快速解决的朋友。

  1. 下载破解好的charles.jar 文件。百度云链接: https://pan.baidu.com/s/1qY9x70S 密码: b46n
  2. 在应用程序中右键Charles,选择“显示包内容”。
  3. 依次打开目录:Contents -> Java
  4. 用下载的charles.jar替换目录中的charles.jar。
  5. 重启Charles即可。

自己动手

方法来源

​ 想到破解时,首先是先google了一下,看是否有注册机或分享的注册码等,毕竟是比较出名的软件。结果是注册机的信息几乎没有,注册码和自己破解的方法倒是得到了很多信息。但是都是针对3.x版本,因为4.0才刚刚发布。

​ 尝试了几个注册码,均无效,果断放弃,开始了解自己动手破解。看了几篇论坛的帖子,都是像本文上面一样,提供了一个Charles.jar去替换。版本的原因,依然有效的希望不大,还是抱着希望试了试,fail。

​ 既然方法是替换这个jar,那么关于授权部分的代码肯定是在这里被前任修改了,只不过现在有变化而已。我工作使用的主语言就是java,思考一下,觉得自己反编译看看逻辑应该问题不大,既然有人成功过,现在也还是很有希望的。于是开始动手。

工具

  1. jdk
  2. class反编译软件

    ​jdk编译代码,打jar包。反编译软件随意,看网友推荐jadx,不知是我用的不对还是怎么,并未成功,我直接用的IDEA,class文件直接拖进去即可。

步骤

  1. 首先将charles.jar解压,观察内部类结构。虽然名字都扰码变成了A.class之类的,但是com/xk72/charles中一眼就能看到有个License.class,如果我的英文没烂到这个词都认错了,肯定和它有关系,打开瞧瞧。

  2. 变量和方法名都变了,看不出太多的信息,但是其中一个方法巨多的位运算,更加对我的猜想自信了。但是这个类有这么多不知用途的方法,具体的逻辑有看不出来,怎么办呢?反正今天闲,一个一个的看其他的class,看看都哪里调用了这个类的方法,对返回值是怎么判断的。如果能找到,应该有突破。

  3. 看了上百个class后,得到信息如下:

    • com/xk72/charles/gui/frames/下有个RegisterFrame,判断为填写注册吗的界面,打开后发现同目录的f.class为那个注册按钮的事件监听器。打开f.class.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      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.
      ...
      ...
      }
      }

      可以看出注册码的验证逻辑都落在了License.a(var4, var2)这个方法上。只要修改了这个方法,使它永远返回null,就可以绕过真正的验证逻辑。

    • 在第一步找到的Lisense.class的135行找到该方法如下:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      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;
      }

      将整个License.class内容复制到一个新文件License.java中。将上述方法改为:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      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;
      }

      于是就实现了永远返回null。但是原本的逻辑中,如果验证成功了会对b这个变量赋值。然过后,再调用b的时候可能会有问题报错。于是继续补洞,看看b都在哪里被用到了。

  4. 就按照如上的方式,逐步找到了其他调用授权信息的地方。根据判断逻辑改写License.java中的几方法。修改的内容如下:

    1
    2
    3
    private License$LicenseType f;
    改为
    private int f;
    1
    2
    3
    4
    5
    6
    7
    8
    public static boolean a() {
    License var0 = b;
    return b.c;
    }
    改为
    public static boolean a() {
    return true;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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;
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    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;
    }
    }

    第246行:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    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));
    }

    将所有的LicenseException替换为SerialException。

    删除三个import:

    1
    2
    3
    import com.xk72.charles.License$LicenseType;
    import com.xk72.charles.LicenseException;
    import com.xk72.charles.p;
  5. 做完以上步骤,就可以使用javac单独编译License.java类了。

    1
    javac -source 1.7 -target 1.7 -d . License.java

    会在目录下产生com/xk72/charles/目录,目录中就是编译好的License.class了。

  6. 利用jar命令将篡改过的class,打入charles.jar内。

    1
    jar -uvf charles.jar com/xk72/charles/License.class
  7. 大功告成。用新的charles.jar替换原有的,重启charles。等待惊喜吧!

  8. 防止修改过程造成困扰,附上我的License.java,作为参考。License.java

Charles4.0最新版破解相关推荐

  1. Charles4.0最新版破解(更新至4.1)

    前言 ​ 现在在OSX下办公,开发中Charles作为非常优秀的一款抓包工具必不可少.之前的3.x版本是公司的资管给输入的注册码,用着非常爽.今天突然提示可以升级为新版本,好奇和欣喜的心情就下载并安装 ...

  2. 如何破解Charles4.0.1------超级简单

    安装好Charles4.0.1之后发现只能试用30天,遇到这样的问题就比较烦人,于是在网上找各种破解方法,输入了N多次regester name和licence key结果都无效: 废话少说     ...

  3. 最新版(2021年1月)知乎x-zse-86 2.0版本加密破解分析 爬虫 破解反爬思路

    一.前言 本文仅用于技术的研究和学习使用 知乎在21年1月20日左右升级了x-zse参数的加密方法. 这是之前1.0版的x-zse-86参数 这是刚刚升级的2.0版本 二.破解思路 (不想看思路可以直 ...

  4. 2018.3.1最新版破解--测试能用(做个记录)

    2018.3.1最新版破解 1.官网下载IDEA 2018.3.1的商业版本点我去下载 2.破解jar下载:JetbrainsIdesCrack-3.4-release-enc.jar点我去下载 3. ...

  5. 使用mac端Charles4.0 抓取App接口(配置篇)

    Charles4.0下载地址,点这里史蒂芬周的博客 具体的安装和破解方法都在博客里有写到,本篇博客基于你已经完成安装了Charles. 首先打开Charles,先进行一些简单的设置: Step 1:打 ...

  6. CentOS 7上安装 MongoDB数据库 4.0.0最新版

    MongoDB简介 MongoDB(来自于英文单词"Humongous",中文含义为"庞大")是可以应用于各种规模的企业.各个行业以及各类应用程序的开源数据库. ...

  7. 光盘版linux6,光盘上的系统 Slax Linux 6.0.6新版

    光盘上的系统 Slax Linux 6.0.6新版 2008年04月19日 06:01作者:刘鑫编辑:刘鑫文章出处:泡泡网原创 分享 SLAX是一个快速而美观的Linux操作系统,它可以在一张CD-R ...

  8. UltraEdit 21.30.1006.0 繁体中文破解版(功能最强的文本编辑器)

    UltraEdit 是一款支持文本,HTML.PHP.Perl.Java 和 JavaScript 等众多流行计算机高级语言的程序编辑器.与Notepad ++相比,UltraEdit支持十六进制编辑 ...

  9. Apache Storm 2.0.0 LowLevel 新版

    Apache Storm 2.0(新版) 作者:jiangzz 电话:15652034180 微信:jiangzz_wx 微信公众账号:jiangzz_wy 百知教育 Storm是什么? Storm是 ...

最新文章

  1. Ajax Toolkit 控件学习系列(13) ——FilteredTextBoxExtender 控制输入
  2. CentOS 6.5 手动rpm包安装gcc、g++
  3. UNP Chapter 11 - 高级名字与地址转换
  4. Kubernetes 集群的零停机服务器更新 | 文末有料!
  5. SQL中varchar和nvarchar有什么区别?
  6. C++多态案例三-电脑组装
  7. 达内php吾爱_2018年达内c++全套视频课程(不加密)
  8. select函数及fd_set介绍
  9. 关于python类_python中类的总结
  10. 图解 继电器模组接线图_中间继电器如何接线_中间继电器接线图图解
  11. mysql 事务 异常_mysql事务级别以及相应的异常现象
  12. 采用ArcGIS 10.6制作漂亮的点阵世界地图,完美!!!
  13. win10系统对计算机要求,Win10系统对电脑配置要求 win10专业版教程
  14. 8个经典智能穿戴设备优选电路方案合辑
  15. react脚手架配置代理
  16. 实习转正述职报告PPT模板
  17. WIN10下msi GE62 1077 无线热点掉线问题处理(更新:取消自动关闭热点
  18. PyTorch 学习笔记:transforms的二十二个方法(transforms用法非常详细)
  19. E. Yet Another Array Counting Problem
  20. DELL R730xd 安装PCIE SSD 后风扇转速增高的解决方案

热门文章

  1. 医学图像分割损失函数Dice
  2. 苹果官方鼠标移动速度慢问题解决(Magic Mouse)
  3. 百度知道api使用经验
  4. Unity3D开发之折线图的制作(三)折线图终结篇之抗锯齿
  5. python读取CSV文件中温度值绘制3D折线图
  6. SEO资源生态系统的原理和思维之我见
  7. 【笔记】《算法设计与分析(第三版)》-王晓东著-第3章-动态规划
  8. Python版冈萨雷斯 V1.0
  9. 【验证技能】数字IC验证VIP开发总结
  10. unity的vr场景怎么做_Unity Editor VR告诉你,建立VR场景很简单