首页/安卓逆向/ 北京时间APP登陆全过程分析RSA+Sign算法分析

北京时间APP登陆全过程分析RSA+Sign算法分析

作者:神奇   分类:安卓逆向   时间:2018-04-30 19:10:58  标签:


图片看不到的话,下载word文档观看吧
App名字:北京时间
加固情况:未加固
分析工具:jeb2.x 雷电模拟器FD
过程
1、 FD抓登陆包 输入账号 1615457734@qq.com  密码 123456789 连抓2次
2、 提示邮箱未注册。切换到FD看一下提交表单
3、 通过对比发现,变动的数据
Password:对js有经验的人,可以大致锁定为RSA加密
u_time:时间戳(10位)
u_salt:(像MD5的某个数据段)
u_sign:(32位MD5+u_salt)
完整表单如下:
http://api.btime.com/user/login?protocol=1&mobile=1615457734@qq.com&password=LL8W1uMphsVTIPMClnsHQlAN/dWipeuP/5MHr/%2B/waGTYPRGrWgpvDiTIWcQ2AlXAHyJTwENVw84%0AFRK7xBh07/kdwbHe47L/wPdQoGhHgLaizZLh4QGte6GkYDYk72jhHwtnFsQG4OpusLs1LJ9dd9bq%0AOpkEuaPzXkDQCNw3258%3D%0A&imgcode=&vcode=&os_ver=22&u_time=1499840971&sid=&pro=&src=lx_android&token=4a74dc97f321360008dc126afea827e4&carrier=&push_id=3a466e763b20cf13a5567e962a0d60ae&os_type=Android&net=WIFI&os=android_x86-userdebug%205.1.1%20LMY48Z%20eng.denglibo.20170213.214219%20test-keys&u_salt=d2c032de&u_sign=bc06e9ba4231ff9eeac94f26dbcbe281d2c032de
4、 其实可以明显看出来u_sign和u_salt是有关系的。所以,我们可以先搞定这2个
搜索 u_salt或者u_sign,都可以定位到以下代码,其中2处高亮,分别是salt和sign的算法(先分析salt,再分析sign)
        private static Map a(aa arg10) {
       HashMap v4_1;
       if(arg10 == null) {
           Map v4 = null;
       }
       else {
           TreeMap v3 = new TreeMap();
           if(arg10.d() != null&& ((arg10.d() instanceof q))) {
                ab v1 = arg10.d();
                int v2;
                for(v2 = 0; v2 <((q)v1).a(); ++v2) {
                   v3.put(URLDecoder.decode(((q)v1).a(v2)), URLDecoder.decode(((q)v1).b(v2)));
                }
           }
           if(arg10.a() != null) {
                for(v2 = 0; v2 <arg10.a().m(); ++v2) {
                    v3.put(arg10.a().a(v2),arg10.a().b(v2));
                }
           }
           Stringv6 = f.a();
            v3.put("u_salt", v6);
           StringBuilder v5 = new StringBuilder();
           Iterator v8 = v3.entrySet().iterator();
           while(v8.hasNext()) {
                Object v0 = v8.next();
               v5.append(((Map$Entry)v0).getKey());
                v5.append("=");
               v5.append(((Map$Entry)v0).getValue());
                v5.append("&");
           }
           if(v5.length() > 0) {
                v5.deleteCharAt(v5.length() -1);
           }
           v5.append("&");
           v5.append(com.btime.account.a.d);
           v4_1 = new HashMap();
           ((Map)v4_1).put("u_sign",f.a(v5.toString()) + v6);
            ((Map)v4_1).put("u_salt",v6);
        }
       return ((Map)v4_1);
    }
String v6 = f.a();
v3.put("u_salt", v6);
u_salt=v6=f.a();进入f.a(下面是整个f的结构。注意看高亮部分)
String v1 = f.a(String.valueOf(Math.random()));
Math.random() 取随机时间戳,然后调用a,仔细下去看,就发现,a是转换为utf8之后,在调用下一个a温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code