zoukankan      html  css  js  c++  java
  • 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包,即破解完成。

    效果图:

  • 相关阅读:
    好好的Timer居然有坑?
    你竟然用Integer作为synchronized的锁对象?
    是时候了解Java Socket底层实现了
    带你了解MyBatis一二级缓存
    Java利用反射排序
    用代码移动桌面图标(贪吃蛇)
    servlet上传文件+上传进度显示
    简书导航栏实现
    iPhone手机屏幕尺寸(分辨率)
    iOS深拷贝浅拷贝
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/13223231.html
Copyright © 2011-2022 走看看