MAC App破解之路十一 charles

开始尝试对charles进行破解。

查看程序包中的内容,发现主体是Java写的。【charles.jar】

开始按照惯用的破解思路,找关键点。

1, 先找注册密钥的对话框

 2. 顺藤摸瓜,找到注册按钮的事件

 代码分析:从结果上看,主要看FwRs2的值.    如果为null 则表示注册成功。 不为空则弹出提示框。

所以突破口是: Bvcn.FwRs(String,String) 方法。

3。 Bvcn.FwRs的方法:

 代码分析,只要new Bvcn不抛异常,那么就会返回null, 也就是注册成功。

4. Bvcn的构造函数:

 代码分析: 这里有2个关键方法分别是  boolean FwRs(int)  和 GSXJ(String, String, i=4)

5. 找到这两个方法:

 7, 到这里了,我看到了一个几个密钥: 7055ce2f8cb4f9405f, 5bae9d8cdea32760ae 等。

它是过滤了这些密钥。决定尝试修改代码,让其不过滤这个代码。  也就是修改方法equalsIgnoreCase调用改为equals

 8. 使用jsclasslib工具查看Bvcn.class文件找到GSXJ方法。

 方法的索引是16。

equalsIgnoreCase的索引是178:

 equals方法的索引是177

9,打开010Editor工具,编辑Bvcn.class文件。

 10. 执行命令, 修改原始jar包中Bvcn.class的逻辑

jar -uvf charles.jar -C charles/ com/xk72/charles/Bvcn.class

11. 检查是否逻辑修改成功, JADX工具重新加载jar包看看:

 可以看到已经修改成功了。

12, 替换jar包。

13. 尝试注册:

 14. 很遗憾没有生效:

 15,决定从修改字符串方向尝试破解。 177还原成178. 然后修改原始字符串。 将7改成了8.

16. 再次注册:

 17, 再次失败。 弹出的错误结果和14步一样。

这个失败让我确定了一个事情, 就是异常信息是有红色框内抛出的:

 18. 此时通过反向推理,this.Wczh = 1 就应该离成功不远了。 修改代码:

找到原始代码的位置:

 对应二进制数据位置

大概在1EB0位置。

 因为136是l2i   最终还是要转换为int. 所以直接 iconts_1 即可。 对应编码4. 将136修改为4. 然后将其余的移位操作全部改为0

最终结果如图:

最后修改:

boolean FwRs(long)  方法, 强制返回true

修改前:

 找到方法15, 然后强制返回true。

经过若干次尝试,都失败了, 决定换一种思路,自己实现一个Bvcn文件。

========================================

package com.xk72.charles;

public final class Bvcn {
    private static Bvcn GSXJ = null;
    private String Gwbn;
    private boolean InuZ;
    
    static {
        GSXJ();
    }

    public Bvcn() {
        this.InuZ = true;
        this.Gwbn = "dzq";
    }

    public static String FwRs(String str, String str2) {
        return null;
    }

    public static boolean FwRs() {
        return true;
    }

    public static void GSXJ() {
        GSXJ = new Bvcn();
    }

    public static java.lang.String InuZ() {
        return "dzqhhh";
    }


}

  生成class文件: javac -g:none Bvcn.java

  替换class文件:jar -uvf charles.jar -C charles/ com/xk72/charles/Bvcn.class

  替换charles.jar包,即破解完成。

效果图:

原文地址:https://www.cnblogs.com/dzqdzq/p/13223231.html