吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4819|回复: 11
收起左侧

[Android 原创] 某浪新闻APP之登录验证码下发短信另类分析

[复制链接]
闷骚小贱男 发表于 2021-8-21 14:50
本帖最后由 闷骚小贱男 于 2021-8-21 14:56 编辑

前言

我又来了。今天的主角是某浪新闻APP

工具

  1. fiddler(抓包工具)
  2. Drony(习惯用了,不用去手机设置里面填写代{过}{滤}理地址和端口。。)
  3. jadx-gui(反编译app)
  4. root环境(我这是另类的分析,要用到hook)
  5. e4a(java小白,只能用这个编写xposed模块了)

0x1 抓包

fiddler下关键词sendsms断点(省的浪费人家的短信额度。。。)
分别用2个不同的后机会抓2次包,分析不同的信息。
0.1 fd-1.png
0.1 fd-2.png

mobile GAuth SN-REQID
15600000000 newsapp:1629519735:5be3ae91fd334a78b91d893d0de7853b:46100b5f78fd8ad4163a10da7ce7f9bd9cc24953fadf732795b65544f91b553b 162951973462938c4670a9754
15699999999 newsapp:1629519762:483b210ec35f4e4090ab4ccc8f147ee2:1c7eacc96f5bbe42f6e0ccff425efadef0b82e28a17f71124304bb2bfad6dab4 162951976242538c4670a1271

经测试,协议头不带SN-REQID可以正常发送,但是不带GAuth下发就会失败。
所以接下来分析GAuth的值是怎么得来的

0x2 分析+hook

jadx-gui

搜"GAuth"
打开jadx,分析app,搜索"GAuth",一共3处调用。
0.2 jadx auth.png

(无用功)查看第一处调用

我们先看第一处调用:

 addRequestHeader("GAuth", HttpSignUtils.e("newsapp", serverTime, UUID.randomUUID().toString().replaceAll("\\-", "")));

右键跳到HttpSignUtils.e

HttpSignUtils.e
    public static String e(String str, long j, String str2) {
        if (SNTextUtils.f(str)) {
            str = "newsapp";
        }
        return str + ":" + j + ":" + str2 + ":" + HttpSignHelper.financeSecretKey2(str2, j);
    }
HttpSignHelper.financeSecretKey2
public static native String financeSecretKey2(String str, long j);

竟然是native,需要分析so文件。。那我这能力,我直接就放弃了。。

查看第二处调用

    addRequestHeader("GAuth", HttpSignUtils.e(str, j, replaceAll));
/* 全文是下面这样的 */
    public void addThirdAppSignHeader(String str, long j, boolean z) {
        String replaceAll = UUID.randomUUID().toString().replaceAll("\\-", "");
        if (z) {
            addRequestHeader("GAuth", HttpSignUtils.e(str, j, replaceAll));/* 如果z为true */
        } else {
            addRequestHeader("GAuth", HttpSignUtils.d(str, j, replaceAll));/* 如果z为false */
        }
        addRequestHeader("User-Agent", ApiManager.f().e().p());
        addRequestHeader("DeviceId", ApiManager.f().e().c());
    }

我们可以通过xposed模块hook,把addThirdAppSignHeader的参数z设置为false,让其执行HttpSignUtils.d函数

HttpSignUtils.d

看样子  就是str:j:str2:g(str2 + j,a.get(str))

    public static String d(String str, long j, String str2) {
        if (SNTextUtils.f(str)) {
            str = "newsapp";
        }
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        sb.append(":");
        sb.append(j);
        sb.append(":");
        sb.append(str2);
        sb.append(":");
        sb.append(g((str2 + j).getBytes(), a.get(str).getBytes()));
        return sb.toString();
    }
str j str2
本次为'newsapp' 十位时间戳 randomUUID替换'-'为''
'newsapp' 十位时间戳 UUID.randomUUID().toString().replaceAll("\-", "")

a

这个a.get(str),就是取出hashMap中'newsapp'的值,也就是f()

        a = hashMap;
        hashMap.put("newsapp", f());

这个f()应该也是通过so得出的,技术有限,所以不分析他了。直接从g加密函数入手,hook出明文和秘钥。

g

HmacSHA256加密操作,bArr为明文,bArr2为秘钥

    private static synchronized String g(byte[] bArr, byte[] bArr2) {
                SecretKeySpec secretKeySpec = new SecretKeySpec(bArr2, "HmacSHA256");
                Mac instance = Mac.getInstance("HmacSHA256");
                instance.init(secretKeySpec);
                return a(instance.doFinal(bArr));
    }

易安卓写hook g

XposedHelpers.findAndHookMethod("com.XXX.XXXX.HttpSignUtils", lpparam.classLoader, "g"   , byte[].class , byte[].class , new XC_MethodHook() //g(byte[] bArr, byte[] bArr2) {
{
        @Override
        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {                
                XposedBridge.log("某浪新闻 g【HmacSHA256加密】参数1--->> " + 转换操作.字节到文本((byte[])param.args[0],"utf-8"));
                XposedBridge.log("某浪新闻 g【HmacSHA256加密】参数2--->> " + 转换操作.字节到文本((byte[])param.args[1],"utf-8"));
        }
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                XposedBridge.log("某浪新闻 g【HmacSHA256加密】结果--->> " + (String)param.getResult());
        }
});

拿到明文和秘钥、加密结果
0.3 hook出结果.png
(PS:经过多次测试,秘钥为固定值。所以可以直接编写GAuth值的构造程序)

多次测试

多次测试
(PS:经过测试,uuid的值为任意数均可,不影响)

0X3 易语言模拟

0.5 e.png

0x4 最后的建议

增加人机验证,比如图片验证码或者是滑块验证码等方式,加大破解的难度

免费评分

参与人数 5威望 +1 吾爱币 +23 热心值 +5 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
_小白 + 1 + 1 我很赞同!
tianshu44 + 1 + 1 热心回复!
芽衣 + 1 --------
shiina0831 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Tamluo 发表于 2021-8-23 12:42
萌壹 发表于 2021-8-23 09:34
那分析破解写个用途在哪里?炫耀技术?

提供一个思路嘛,授人以鱼不如授人以渔,不要激动
shiina0831 发表于 2021-8-21 15:19
windfill 发表于 2021-8-21 15:22
QingYi. 发表于 2021-8-21 16:52
小伙子 天天搞验证码 你是要搞事情啊
mountater 发表于 2021-8-21 18:09
学习了但是对于app的数据抓包有用什么好?charler?
Tamluo 发表于 2021-8-22 10:27

你这想的.....不能
zhengxinjun 发表于 2021-8-22 10:41
跟大神学姿势
海蓝浪花 发表于 2021-8-22 10:52
分析的不错
tencentma 发表于 2021-8-22 21:41
=学习了,原来是这么分析的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 11:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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