美文网首页Mac最全的破解版工具
Charles 4.2.5 通用破解文件for Mac and

Charles 4.2.5 通用破解文件for Mac and

作者: h080294 | 来源:发表于2018-04-12 18:53 被阅读9次

Charles已经有一段时间没更新了,因为工作关系几乎每天都要用到它来抓包。

Charles很人性,它虽然是收费软件,但即使不购买也能长期使用,并且功能上不会缺斤短两。唯一要付出的代价是每次使用时间不能超过 30 分钟,并且启动时将会有 10 秒种的延时。秉着研究目的来学习它的注册逻辑。

首先,根据界面的点击事件,跟踪到RegisterFrame类,很明显继承了JDialog:

public class RegisterFrame extends JDialog {
    ...

    public RegisterFrame(Frame var1) {
        super(var1, true);
        this.setTitle("Register Charles");
        ... //省略无用代码
        this.bRegister = new JButton("Register");
        this.bCancel = new JButton("Cancel");
        ...
        this.bCancel.addActionListener(new jumq(this));
        this.bRegister.addActionListener(new oNCJ(this));
       ... //省略无用代码
    }
}

然后,我们在这里看到了bRegister按钮的监听事件,继续跟进oNCJ类:

public final void actionPerformed(ActionEvent var1) {
        String var4 = RegisterFrame.PpPw(this.PpPw).getText().trim();
        String var2 = RegisterFrame.wAkp(this.PpPw).getText().trim();
        if(var4.length() > 0 && var2.length() > 0) {
            String var3;
            if((var3 = Dheu.PpPw(var4, var2)) != null) {
                ExtendedJOptionPane.PpPw(this.PpPw, var3, "Charles Registration", 2);
                return;
            }

            ExtendedJOptionPane.PpPw(this.PpPw, "Thank you for registering. Charles will now close. Please start Charles again to continue.", "Charles Registration", 1);
            CharlesContext var5;
            (var5 = CharlesContext.getInstance()).getConfiguration().getRegistrationConfiguration().setName(var4);
            var5.getConfiguration().getRegistrationConfiguration().setKey(var2);
            var5.exit(0, true);
        }
    }

注意这里有一个明显的关键性判断:Dheu.PpPw(var4, var2)) != null,在之前的文章分析过,如果直接删掉这个判断的话会导致异常,所以需要进一步跟进Dheu类。这个类代码较多,就不全贴了,只挑重点的代码进行分析。

    public static String PpPw(String var0, String var1) {
        Dheu var3;
        try {
            var3 = new Dheu(var0, var1);
        } catch (LicenseException var2) {
            return var2.getMessage();
        }

        wAkp = var3;
        return null;
    }

接下来,根据前面的调用来到这个方法,虽然最终返回了null,但是很明显在中途被wAkp这个家伙给动过什么手脚。在搜索下wAkp相关的调用:

    private static void PpPw(Dheu var0) {
        wAkp = var0;
    }

    public static boolean PpPw() {
        Dheu var0 = wAkp;
        return wAkp.WPsu;
    }

    public static void wAkp() {
        wAkp = new Dheu();
    }

    public static String WPsu() {
        Dheu var0 = wAkp;
        switch(jumq.PpPw[var0.IqPv.ordinal()]) {
        case 1:
            return var0.SWIF;
        case 2:
            return var0.SWIF + " - Site License";
        case 3:
            return var0.SWIF + " - Multi-Site License";
        default:
            return var0.SWIF;
        }
    }

还是挑重点的方法来看,这里有个布尔型的值PpPw(),我们直接让它返回true就可了。然后下面的String类型WPsu()方法,根据一个值来判断License的类型。我们不管那么多,直接了当的将方法返回值改成我们自己的string。

    private String Ifzu() {
        switch(jumq.PpPw[this.IqPv.ordinal()]) {
        case 1:
            return this.SWIF;
        case 2:
            return this.SWIF + " - Site License";
        case 3:
            return this.SWIF + " - Multi-Site License";
        default:
            return this.SWIF;
        }
    }

再往下一点点,有一个几乎一模一样的函数,为了安全,同样把它的返回值也一并改掉。

篡改完成后大概就是这样:

private static void PpPw(Dheu var0) {
        wAkp = var0;
    }

    public static boolean PpPw() {
        Dheu var0 = wAkp;
        return true;
    }

    public static void wAkp() {
        wAkp = new Dheu();
    }

    public static String WPsu() {
        return "破解 by John_Hao";
    }

    public static String PpPw(String var0, String var1) {
        return null;
    }

    private boolean SWIF() {
        return this.WPsu;
    }

    private String Ifzu() {
        return "破解 by John_Hao";
    }

接下来就是重新编译一下java文件,这是如果直接编译会发现报了一堆的错误,例如找不到LicenseType、乱码、LicenseException异常捕获错误等等,

// 要去掉中间的,直接改为[]
paramString1.replaceAll("[�����������������������]", " ");

未报告的异常错误LicenseException,这块要把这些异常干掉

错误: 找不到符号

全部修改好之后,就可以顺便的编译了。需要注意的是我们的目标文件是在com.xk72.charles包下,直接编译会提示找不到符号。解决方法也很简单,用-cp命令指定目录就可以了。

//举例
$ javac -cp /Users/johnhao/Downloads/anti/charles/ /Users/johnhao/Downloads/anti/charles/com/xk72/charles/Dheu.java

最后一步就是将编译好的class文件重新打到jar包中去。同样因为package目录的原因,我们需要创建一个同名的目录等级/com/xk72/charles/来存放修改好后的class文件。

//将class文件打包进jar包中
ar uf charles.jar com/xk72/charles/Dheu.class

覆盖掉原始的jar文件,重新运行Charles,测试成功!分别测试了Mac和Win7 64位


破解文件链接:
https://pan.baidu.com/s/1wl2m9a2hhJwTUJ7sCiKyVg
密码: znpg

关注微信获取更多内容 扫描二维码,加入我的星球

附4.2.5版本更新日志

Version 4.2.5
7 April 2018

Major bug fixes and minor improvements.

Improvements:

Hostname filter added to Structure view
Websockets: added right-click to export all messages as individual files
SSL Proxying support extended to Port Forwarding and non-HTTP SOCKS traffic
Charles no longer prevents sleep on macOS
SOCKS TLS connections now get a host name instead of just an IP address
Many internal improvements to the minutiae of proxying, including reduced usage of chunked responses when they weren't warranted, and improved Expect/Continue behaviour.
Bug fixes:

Map Remote and Map Local bugs fixed that prevents correct https -> http and http -> https mappings
Authentication viewers fixes to display of bearer tokens and similar
HTTP 2 over Reverse Proxy improved
cURL-compatible URL creation fixed for HTTP 2
Windows: some native code loading issues fixed, which prevented Charles from automatically controlling the Windows Proxy

相关文章

网友评论

    本文标题:Charles 4.2.5 通用破解文件for Mac and

    本文链接:https://www.haomeiwen.com/subject/ijsfkftx.html