吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2281|回复: 9
收起左侧

[Android 求助] 有没有大佬给看下这段Java代码

[复制链接]
梦迪丶 发表于 2019-12-3 17:49
看蒙圈了,刚学习入门,想试着找一个协议的加密,这段代码看蒙圈了,有大佬给解释下么,感谢。

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
...

应该是多重加密了。

[Asm] 纯文本查看 复制代码
C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtNDM2ZC00NGYxLTk1ZDAtNzhhNWI3OThlZjIwHnZlcnNpb24fNB5wbGF0Zm9ybR9hbmRyb2lkHmVjHzE=.&#142;ü_&#172;&#137;&#154;áo@&#135;&#194;<X&#131;1e*|e2&#129;&#151;&#190;<&#184;;P&#216;&#159;&#198;ú&#132;&#132;8&#152;oa&#131;ù&#140;4&#190;ú>IDo&#134;¨muD&#229;&#244;&#230;í"!èg&#255;b&#132;&#255;^&#169;&#128;54Xha×&#142;&#228;s&#188;&#133;&#194;è&#141;èD&#172;!′&#196;oˉ&#251;&#138;&#251;&#149;	ìU÷uó&#245;sˉ$í|ú!§3&#241;¥`Zì;0Eáí&v§J&#189;&#230;:&#207;·&#244;&#182;j&#239;°*/e)i&#155;&#142;&#194;&#246;a^r&&#160;&#140;rr&#246;4]áP&#153;/+&#148;é&#152;&#128;^&#189;òK&#196;o~'v&#157;&#196;&#199;
àc4
#e¥1|&#251;ì
ü&#143;&#251;1E%,^'¥)NE2De&#141;óü&#214;ˉ&#129;éBió&#169;&#196;+&#171;&#137;&#139;s×&#188;&#227;y&#145;;!è&#134;à&#135;to&#246;Y&#148;2êó&#140;&#157;¤ùlúf·`&#132;&#152;&#212;:&#239;&#160;/ˉóTh|&#129;íB¤QR:±&#172;μ&#238;°÷3a¨&#229;&#132;xàm&#239;-]&#227;a&#150;#3ef>J&#196;§,¥&#136;!1&#187;?&#245;y&#209;'~_(t&#238;&#191;&#156;O7&#174;×.ú&#148;&#146;@óéy3&#235;ù&#149;.U&#229;8&#197;£&#244;&#235;ú~£w	!31^[U*$K3&#134;$&#196;&#199;&#189;7&#169;&#148;chYot&#196;&#230;&#141;&#191;&#148;&#244;A
.c&#206;pá&#246;&#187;&#251;üG|&#147;&#228;&#157;*1R"&#130;&#152;+&#172;t
 楼主| 梦迪丶 发表于 2019-12-4 17:23
super-star 发表于 2019-12-4 16:04
应该是多重加密了。

[mw_shl_code=asm,true]C67032C5E4F7A6E1D277CBFA5DCAB654.cGFyYW0fMWJkZGY1YzYtN ...

我真是太难了,搞了一天,没有什么头绪。打算先放下了,以后再拿出来搞。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-20 00:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表