对某安卓应用进行分析爬取课表数据制作懒人课表(二)

本章用到的工具有:

  1. AndroidStudio(配合xposed进行分析)
  2. xposed(对JAVA层的应用进行hook)
  3. 任意一款js调试工具,我这边用的是WT-JS
  4. 精易编程助手(只是为了使用里面的一些编码操作,还有一个自带的接口调试工具,用起来比较方便)
  5. HttpAnalyze(抓包)
    上一篇说到了这个课表数据(对某安卓应用进行分析爬取课表数据制作懒人课表(一)),它是一个AES加密。
    那我们需要怎么搞他呢?
    我们 祭出神器:xposed
    xposed怎么配置,这块应该不用多说了
    搜一下一搜一大片
    在这里插入图片描述
    ps:由于夜神模拟器不知道这么个原因,xposed装上去就死机,我这边就直接换成了雷电模拟器。
    编写xposed的东西 我这边就用到了AndroidStudio
    在编写之前。我们要先了解一下在java里面 是怎么实现的aes加密
    java的aes加密,在这边文章里面,实现了一个带iv和key加密的方法:JAVA实现AES加密、解密
    我在上面那个文章中。扣了一个不带iv的加密方式来进行说明
    // 加密
    public static String Encrypt(String sSrc, String sKey) throws Exception {
        if (sKey == null) {
            System.out.print("Key为空null");
            return null;
        }
        // 判断Key是否为16位
        if (sKey.length() != 16) {
            System.out.print("Key长度不是16位");
            return null;
        }
        byte[] raw = sKey.getBytes("utf-8");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
    }

在上面的代码中,我们注意到了一个SecretKeySpec的对象。
这个东西传入了一个key。而这个key就是我们需要的东西。
而这个对象是在javax.crypto里面的,属于java层的东西,那我们就可以对这个对象进行hook,把他构造方法里的第一个参数给掏出来看看是个什么玩意
下面开始编写xposed模块

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
public class HookMain implements IXposedHookLoadPackage {
    public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
        XposedBridge.hookAllConstructors(XposedHelpers.findClass("javax.crypto.spec.SecretKeySpec", lpparam.classLoader), new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                byte[] mKey = (byte[]) param.args[0];
                int mSize = mKey.length;
                byte[] mShit = new byte[mSize];
                System.arraycopy(mKey,0,mShit,0,mSize);
                String mFlag = Base64.encodeToString(mShit,0);
                Log.d("加密","===============================================================");
                Log.d("加密","密钥=>" + mFlag);
                Log.d("加密","方式=>" +param.args[1].toString());
            }
        });
    }
}

最后编译安装到模拟器里,勾选激活然后重新启动即可。
在这里插入图片描述
启动后,直接启动目标应用
然后切换到AndroidStudio里。注意日志框 你会惊讶的注意到,这不是我们写的那个东西吗。没错你hook成功了
在这里插入图片描述
我们给他过滤一下。在上面那个框框里面输入加密俩字把我们那些东西过滤出来。
在这里插入图片描述
哇这么多密钥。到底是哪一个呢。我们不管 全部给删了先
因为我们需要的目标数据。不是这一块的。我们直接登录目标应用
在这里插入图片描述
你发现到,欸 这个密钥怎么长得一模一样。非常可疑
我们去到目标数据那里。抓包然后解一下看看。
由于我们这个雷电模拟器。抓不到https,所以我就采用了另一个抓包工具。叫HttpAnalyze
在这里插入图片描述
直接点击开始。就是这么傻瓜
在目标数据下面 发现四个数据包 我们对着响应数据一个一个看看是个什么情况
在这里插入图片描述
我会用一个比较方便的js调试工具:WT-JS 来进行aes的解密测试
由于我们打开了这个目标数据的时候
AndroidStudio一直在吐密钥
在这里插入图片描述
所以我严重怀疑R8C/jbk8r6+llWUZVPWc7w这个东西就是密钥
我们去试一下
在这里插入图片描述
打开wt-js 然后切换到aes的那块 我们会看到 aes有好几个方式 而且有一个key和iv 我们就先测试 ECB模式,因为ECB模式无需IV
记得密钥方式设置成base64
在这里插入图片描述
欸 成功解出来了.那我们看看这个最多数据的包解出来是不是有想要的数据
在这里插入图片描述
在这里插入图片描述
em???纳闷了 为啥子没有
不慌。如果这里没有的话 那就肯定是在刚开始进来的时候就已经加载完毕了,我们就重新打开这个目标应用进行抓包。反正加密的key已经拿到了
注意:目标应用每次重新启动的key都会变动 要时刻注意AndroidStudio的日志输出
本次重新启动 我的key是oON8uRrq7DkdBhfUtaR44g

在这里插入图片描述
然后我这次是在登录页面开始抓的 我们来看看数据包
在一个getdata的数据包中 发现了一块很像课表的数据
在这里插入图片描述
这块其实也不是我们的课表数据,因为量太少了
我们继续看看
接下来 我在一个monthlyData的表中 看到了一串让我卡到崩溃很长很长的数据。我严重怀疑 课表就放在里面
在这里插入图片描述
由于这数据太大了。我们只能无奈的通过手动去请求一次来获取数据
在这里插入图片描述
它是一个post请求 我们看一下提交的数据
在这里插入图片描述
是加密的。不怕 解出来就好了
在这里插入图片描述
嘶,我觉得这是课表无疑了。
直接请求一次看看
在这里插入图片描述
然后把返回的数据data拿去解密
在这里插入图片描述
成功拿到目标数据。我们来格式化看看
在这里插入图片描述
嗯 很棒
我们改下提交的数据 把他改成六月看看
在这里插入图片描述
懂了 这是一个一个月课表进行获取的
在这里插入图片描述

呼 通过这大费周章的可算把这课表数据提出来了
下一章就是没啥用的懒人课表制作了(ps:手机太卡打开个网页就能看课表。打开软件要卡好一会)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蓝阿姨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值