• 使用jeb对某圈进行协议分析


    首先启动应用和burp开始抓包,应用登录界面输入手机号和密码。

    两次登录失败后通过观察数据包发现nonce, codeSign, timestamp这3个字段有变动,timestamp一看就是时间戳所以不用理会,重点分析剩余2个字段。

    打开jeb,拖入apk等待加载完成,搜索需要分析的字段codeSign:

     右键decompile查看Java代码,发现代码中字段和post请求中字段相吻合,应该是我们需要分析的地方。

    可以看到codeSign字段传入了3个参数,最后调用v.a方法,点击v0发现跳转到代码String v0 = UUID.randomUUID().toString().replaceAll("-", ""); 该方法使用UDID方法产生一个随机数并将-替换为空,通过new f("nonce", v0)得知随机数即为nonce字段;v1跳转到JSONObject v1 = this.a(arg12);  是一个JSONObject类型的对象,通过new f("data", v1.toString())调用得知即为data字段;v2跳转到long v2 = System.currentTimeMillis(); 取一个时间戳,为timestamp字段;3个参数分析完接下来分析v.a方法,点击a方法进入:

     返回return r.a(arg5.toString() + arg4 + v.a() + arg6).toUpperCase(); 

    arg5.toString()上面已经分析过为data字段{"params":{"password":"11111111","username":"13113131313"}},arg4为nonce,arg6为timestamp,接下来分析v.a()

    a方法返回v.a(af.b(2131230990), ""); 点进b方法查看:

     猜测应该是和资源文件id有关,左边导航栏进入Resources/Values/public.xml,发现id为16进制,将2131230990转为16进制进行查找,得到的name为forum_key。

     进入String.xml继续搜索得到:

    af.b(2131230990)的值即为94ac5cfb69e87bd7,接着调用了v.a()方法,返回af.a(arg2 + arg3, af.b(2131231233));

    af.b(2131231233)用同样的方法得到值为860f50db3569e448,字符串拼接后得到94ac5cfb69e87bd7860f50db3569e448

    接着查看af.a()

     得到字符串844e9653bd05f0687db78e96bfc5ca49

    回到r.a(arg5.toString() + arg4 + v.a() + arg6).toUpperCase(); 括号里的分析完了,接着分析r.a()发现进行了一次普通MD5计算:

     接着调用toUpperCase(); 将字符串转换为大写,到此codeSign的组成分析完成,即为:

    {"params":{"password":"11111111","username":"13113131313"}}2c8b346fae5b4ddfa84c1245427f5f9b844e9653bd05f0687db78e96bfc5ca491592882640601

    进行MD5计算后得到5B15CD0796CB143BB183ED5D6A3AD4AB

     与数据包中的结果一致。

    使用smali插桩的方式也可以将codeSign的值打印出来,通过分析代码,codeSign的值通过v.a() ->r.a() 最后return v1.toString();

     查看该段代码所在目录package com.quan0715.forum.util; 的class r 下,提取apk中的dex文件,将其反编译为smali代码,该段代码在classes2.dex中,在r.smali文件内搜索

    toString方法:

     move-result-object v0 前面调用函数返回的对象给v0

    在下面插入smali语句,打印v0,也就是codeSign的值,保存文件后拷贝我们需要调用的smali文件到根目录:

    之后将文件夹回编译为dex文件,替换掉apk中的classes2.dex在重签名,安装好修改后的apk,打开monitor,填好过滤信息:

     启动apk进行登录操作并抓包:

    post请求中的codeSign值与log打印的一致为57b391939e01fbb962eb88686185bb2d

  • 相关阅读:
    【刷题】BZOJ 4078 [Wf2014]Metal Processing Plant
    【刷题】BZOJ 4000 [TJOI2015]棋盘
    【刷题】BZOJ 3495 PA2010 Riddle
    【刷题】BZOJ 4977 [Lydsy1708月赛]跳伞求生
    Linux 文件系统 相关
    Ubuntu、Sql Server卸载心得
    CVTE面试总结
    open_clientfd(char* hostname,int port)和open_listenfd(int port)
    将十六进制显示为点分十进制
    Linux 小记录
  • 原文地址:https://www.cnblogs.com/r1char/p/13181508.html
Copyright © 2020-2023  润新知