梦迪丶 发表于 2019-12-3 17:49

有没有大佬给看下这段Java代码

看蒙圈了,刚学习入门,想试着找一个协议的加密,这段代码看蒙圈了,有大佬给解释下么,感谢。

public class c {
    public c() {
      super();
    }
    private static a a() {
      Object v0_1;
      a v1 = null;
      try {
            v0_1 = e.a(a.class);
      }
      catch(Exception v0) {
            ThrowableExtension.printStackTrace(((Throwable)v0));
            a v0_2 = v1;
      }
      return ((a)v0_1);
    }
    private static String a(Context arg4, HashMap arg5) {
      int v3 = 16;
      if(arg5 == null) {
            arg5 = new HashMap(v3);
      }
      long v0 = System.currentTimeMillis();
      byte[] v1 = InnoSecureUtils.secureSo(arg4, c.a(arg4, arg5, c.a(arg5, v0), v0), com.jifen.open.biz.login.a.a.a().h());
      String v0_1 = "";
      if(v1 != null) {
            v0_1 = Base64.encodeToString(v1, 2);
      }
      HashMap v1_1 = new HashMap(v3);
      v1_1.put("qdata", v0_1);
      v1_1.put("app_id", com.jifen.open.biz.login.a.a.a().b());
      return n.a(v1_1);
    }
    private static String a(Context arg3, HashMap arg4, String arg5, long arg6) {
      HashMap v0 = new HashMap(16);
      v0.put("app_id", com.jifen.open.biz.login.a.a.a().b());
      v0.put("time", Long.valueOf(arg6));
      v0.put("sign", arg5);
      v0.putAll(c.b(arg3, v0));
      arg4.put("public_params", v0);
      return n.a(arg4);
    }
    private static String a(HashMap arg5, long arg6) {
      ArrayList v0 = new ArrayList(arg5.keySet());
      Collections.sort(((List)v0), new Comparator() {
            public int a(String arg3, String arg4) {
                return arg3.toLowerCase().compareTo(arg4.toLowerCase());
            }
            public int compare(Object arg2, Object arg3) {
                return this.a(((String)arg2), ((String)arg3));
            }
      });
      StringBuilder v1 = new StringBuilder();
      Iterator v2 = ((List)v0).iterator();
      while(v2.hasNext()) {
            Object v0_1 = arg5.get(v2.next());
            if((v0_1 instanceof Boolean)) {
                int v0_2 = ((Boolean)v0_1).booleanValue() ? 1 : 0;
                v1.append(v0_2);
            }
            else {
                v1.append(v0_1);
            }
            v1.append("#");
      }
      v1.append(com.jifen.open.biz.login.a.a.a().b());
      v1.append("#");
      v1.append(com.jifen.open.biz.login.a.a.a().c());
      v1.append("#");
      v1.append(arg6);
      return com.jifen.framework.core.f.c.a(v1.toString());
    }
    public static void a(Context arg3, HashMap arg4, b arg5) {
      c.a(com.jifen.open.biz.login.repository.b.d, null, c.a(arg3, arg4), arg5);
    }
    private static void a(String arg3, String arg4, String arg5, b arg6) {
      a v0 = c.a();
      if(v0 != null) {
            v0.postString(arg3, null, arg5, new b(arg6) {
                public void a() {
                  if(this.a != null) {
                        this.a.a();
                  }
                }
                public void a(Object arg1) {
                  this.a(((String)arg1));
                }
                public void a(String arg4) {
                  Object v0 = n.a(arg4, com.jifen.open.biz.login.repository.a.class);
                  if(v0 == null) {
                        if(this.a != null) {
                            this.a.a(new LoginApiException("网络返回异常,请稍后重试"));
                        }
                  }
                  else if(this.a != null) {
                        this.a.a(v0);
                  }
                }
                public void a(Throwable arg2) {
                  if(this.a != null) {
                        this.a.a(arg2);
                  }
                }
            });
      }
    }
    private static void a(String arg3, String arg4, String arg5, b arg6, Class arg7) {
      a v0 = c.a();
      if(v0 != null) {
            v0.postString(arg3, null, arg5, new b(arg7, arg6) {
                public void a() {
                  if(this.b != null) {
                        this.b.a();
                  }
                }
                public void a(Object arg1) {
                  this.a(((String)arg1));
                }
                public void a(String arg4) {
                  Object v0 = n.a(arg4, new ParameterizedType() {
                        public Type[] getActualTypeArguments() {
                            return new Class[]{this.a.a};
                        }
                        public Type getOwnerType() {
                            return null;
                        }
                        public Type getRawType() {
                            return com.jifen.open.biz.login.repository.a.class;
                        }
                  });
                  if(v0 == null) {
                        if(this.b != null) {
                            this.b.a(new LoginApiException("网络返回异常,请稍后重试"));
                        }
                  }
                  else if(this.b != null) {
                        this.b.a(v0);
                  }
                }
                public void a(Throwable arg2) {
                  if(this.b != null) {
                        this.b.a(arg2);
                  }
                }
            });
      }
    }
    private static HashMap b(Context arg3, HashMap arg4) {
      arg4.put("app_version", d.a() + "");
      arg4.put("app_version_name", d.b());
      arg4.put("os", "android");
      arg4.put("os_version", j.d());
      arg4.put("tk", com.jifen.open.biz.login.e.a.a(arg3));
      arg4.put("deviceCode", j.a(arg3));
      arg4.put("network", r.a(arg3));
      arg4.put("uuid", j.d(arg3));
      return arg4;
    }

Mr_Y 发表于 2019-12-3 18:01

不懂Java,也不想学习Java。C++才是真爱

Light紫星 发表于 2019-12-3 18:11

你把代码复制到eclipse里,引用的地方都加上去,然后跑起来就知道了

梦迪丶 发表于 2019-12-3 18:12

Light紫星 发表于 2019-12-3 18:11
你把代码复制到eclipse里,引用的地方都加上去,然后跑起来就知道了

感谢大哥,我这就去试试,十分感谢,太感谢了。

super-star 发表于 2019-12-3 18:24

本帖最后由 super-star 于 2019-12-3 18:25 编辑

不知道我猜的对不对

设:Map

第1个a方法:
暂时不详

第2个a方法:
拼接参数转base64,这个经过base64加密,我暂称为:暗文。(其实可以解密)
往Map里添加 qdata、app_id

第3个a方法:
参数1:Bundle
参数2:Map
参数3:时间戳
拼接明文参数,这个参数可以在url看到。
往Map里添加 public_params={app_id,time,sign}

第4个a方法:
参数1:Map
参数2:时间戳(或者指定字符串)
给Map的key排序,然后拼接url。如果是boolean类型转换成1:0,其它类型直接拼接(toString),可以理解为拼接Url

第5个a方法:
参数1:Bundle
参数2:Map
参数3:自定义的类,应该是请求回调类
目测是setXX一类的方法

第6个a方法:
参数1:url
参数2:未理解
参数3:请求参数?
参数4:感觉和方法5对应
就是http请求方法

第7个a方法:
感觉和第六个方法差不多

最后一个方法:
获取设备信息


仅供参考!!!

梦迪丶 发表于 2019-12-3 19:14

super-star 发表于 2019-12-3 18:24
不知道我猜的对不对

设:Map


首先真的十分感谢,码这么多字来回答。
方法1,我是一点一点百度,大概意思应该是设定了引用类型,然后有一个异常检测。
方法2. 我没明白设置那个变量为16是几个意思(是数据结构算法吗)
       最终目的是解密,但是还没有搞明白咋回事,解密就更别提了,暂时不敢想。
       qdata、app_id这两个参数在抓包的时候抓到了,是一大堆的字母、++、\这些。
       这部分也是最想看懂的,但是没明白他的加密逻辑。
方法3. 这里看了您的注解大概明白了。
方法4. ArrayList v0 = new ArrayList(arg5.keySet());这里写的是KEY的存放吗,这个keyset不太懂,也没搜索到。
方法5 还不懂,(问题在我,基础还没学好)看了您注解的我在一点一点找。
方法6、方法7。 应该是http的请求,还附带了一些网络异常的提示,大概意思明白了。
获取设备信息这里,TK代表的是啥呀,不是很明白。
最后真的感谢大佬码一堆字给解释,感谢。

super-star 发表于 2019-12-3 19:37

梦迪丶 发表于 2019-12-3 19:14
首先真的十分感谢,码这么多字来回答。
方法1,我是一点一点百度,大概意思应该是设定了引用类型,然后 ...

16表示Map的初始大小,可以忽略不用管。

qdata可以百度:base64解密即可解出

keySet是Map的Key,map数据结构是:{key:value,key:value},就是一个钥匙对着一个值。keySet就是把所有钥匙取出来。

方法5应该是一个设值的方法。猜测但不一定(和最后一个b方法类似都是属于设置一些值)

tk你要看:com.jifen.open.biz.login.e.a.a 这个才知道。

Map你可以参考:https://www.cnblogs.com/sky903700252/p/8798309.html

梦迪丶 发表于 2019-12-3 20:11

super-star 发表于 2019-12-3 19:37
16表示Map的初始大小,可以忽略不用管。

qdata可以百度:base64解密即可解出


POST https://passport-api.1sapp.com/captcha/sms HTTP/1.1
Content-Type: text/plain;charset=utf-8
Content-Length: 818
Host: passport-api.1sapp.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.11.0

{"qdata":"QzY3MDMyQzVFNEY3QTZFMUQyNzdDQkZBNURDQUI2NTQuY0dGeVlXMGZNV0prWkdZMVl6WXRORE0yWkMwME5HWXhMVGsxWkRBdE56aGhOV0kzT1RobFpqSXdIblpsY25OcGIyNGZOQjV3YkdGMFptOXliUjloYm1SeWIybGtIbVZqSHpFPS6O3F8MrImawW9Ah8I8WIO58Cqm8LKBl748uDtQFNifCMbahIQ4mG9hEYP5jDS++j5J0LqGqG0TddDl9Bvm7SIhyBdn/2KE/wxeqYA1NFhoYdeO5HO8hcLIjehErCG0xG+v+xeK+5UJzFUX9x918/VzryTNfPoUIRWnM/GlYFrMDg47HDBFC8HNJnanSr3mOs+39LZq77AqLxADZSlpGpuOwvbiXnImoIxycvY0XeFQmS8rlOmYgF698kvEb34aJ3adxMcK4GM0DSNlpTF8+8wK3I/7uUUlLH9eJ6UpTkWyRGUQjdMG3NavgclCafOpxCuriYtz17zjBnmROyHohuCHEP669lmUMgzK04ydpPls+ma3YIQPEJjUOu+gL6/zAt5opoHNQqRRUjqxG6y17rD3M6oUqOWEFXjgbe+tXeNhliMHDrNlZj5KxKcspYghMbs/9f3RJ35fKHTuvwGcTzeuExTXFi76lAySQAYVCB3TyXmz69mVLlXlOAQCEcWj9OvaDH6jdwkhs7leW1UqJEuzhhwkxMe9N6mUY2jdunTE5o2/AJT0QQcKLmPOC3DBAfa7+9xHppPknSoxAVIigpgrE6x0","app_id":"Miread.brows

这个是我抓的包,但是base64解密解不出来,我试了好多。

super-star 发表于 2019-12-4 16:04

梦迪丶 发表于 2019-12-3 20:11
POST https://passport-api.1sapp.com/captcha/sms HTTP/1.1
Content-Type: text/plain;charset=utf-8
...

应该是多重加密了。

C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtNDM2ZC00NGYxLTk1ZDAtNzhhNWI3OThlZjIwHnZlcnNpb24fNB5wbGF0Zm9ybR9hbmRyb2lkHmVjHzE=.Žü_ ¬‰šáo@‡Â<Xƒ1e*|e2—¾<¸;PØŸÆú„„8˜oaƒùŒ4¾ú>IDo†¨muDåôæí"!ègÿb„ÿ ^©€54Xha׎äs¼…ÂèèD¬!′ÄoˉûŠû•        ìU÷uóõsˉ$í|ú!§3ñ¥`Zì;0E áí&v§J½æ:Ï·ô¶jï°*/e)i›ŽÂöa^r& Œrrö4]áP™/+”阀^½òKÄo~'vÄÇ
àc4
#e¥1|ûì
üû1E%,^'¥)NE2DeóüÖˉéBió©Ä+«‰‹s×¼ãy‘;!è†à‡toöY”2 ê󌝤ùlúf·`„˜Ô:ï /ˉóTh|íB¤QR:±¬μî°÷3a¨å„xàmï-]ãa–#3ef>Jħ,¥ˆ!1»?õyÑ'~_(tî¿œO7®×.ú” ’@óéy3ëù•.Uå8Å£ôëú ~£w        !31^[U*$K3†$Äǽ7©”chYotÄ捿”ôA
.cÎ páö»ûüG|“ä*1R"‚˜+¬t

梦迪丶 发表于 2019-12-4 17:23

super-star 发表于 2019-12-4 16:04
应该是多重加密了。

C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtN ...

我真是太难了,搞了一天,没有什么头绪。打算先放下了,以后再拿出来搞。
页: [1]
查看完整版本: 有没有大佬给看下这段Java代码