我们搜索加密参数 unique_code 很容易定位到加密的地方 其中,还有一个3des加密也在同一个类下面,而这个3des就是data的算法,分析过程和之前分析证书的时候一致,iv向量在so里面,密钥在这个类里面有定义,就不详细说了,Java层很简单的东西

请输入图片描述
请输入图片描述

如上图所示 非常简单,一个new 的实例化,然后调用其类下gen方法,传进去一个时间戳getcode后的

2022-07-12T12:43:08.png

getcode其实就是一个取"26"进制的一个操作吧hhhh,但是它反编译出来的Java明显是有问题的,我们还原一下代码

请输入图片描述

紧接着,我们找到加密所调用的所有方法

请输入图片描述

把它们改写到一起,放服务器上供我们使用API调用

https://taisuii.cn/dow/server.jar
下载jar包,然后运行

java -jar server.jar

请输入图片描述

最后 贴上算法,3des那个就不整了,随便找个加密库传密钥和IV就能搞定

package com.example.demo;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

public class Test {
    public static void main(String[] args) {
        long time = 1657375086688L;
        String getCode = getCode(time);
        time = (time / 1000) / 30;
        System.out.println(_gen(getCode.getBytes(),time));
    }
    
    private static String _gen(byte[] bArr, long j) {
        byte[] bArr2 = new byte[8];
        long r10 = j;
        for (int i = 7; i >= 0; i--) {
            bArr2[i] = (byte) (255 & r10);
            r10 >>>= '\b';
        }
        byte[] _hmacSHA1Encrypt = _hmacSHA1Encrypt(bArr, bArr2);
        int i2 = _hmacSHA1Encrypt[19] & 15;
        return String.format("%06d", Integer.valueOf(((_hmacSHA1Encrypt[i2 + 3] & 255) | ((((_hmacSHA1Encrypt[i2] & Byte.MAX_VALUE) << 24) | ((_hmacSHA1Encrypt[i2 + 1] & 255) << 16)) | ((_hmacSHA1Encrypt[i2 + 2] & 255) << 8))) % 1000000));
    }

    private static byte[] _hmacSHA1Encrypt(byte[] bArr, byte[] bArr2) {
        try {
            Mac mac = Mac.getInstance("HMACSHA1");
            mac.init(new SecretKeySpec(bArr, "HMACSHA1"));
            return mac.doFinal(bArr2);
        } catch (Exception e) {
            throw new RuntimeException("hmacSHA1加密失败", e);
        }
    }

    public static String getCode(long j) {
        int i = 0;
        String str = "";
        long r5 = j;
        while (true) {
            String str2 = str;
            if (r5 > 0) {
                i = (int) (r5 % 26);
                r5 = (r5 - ((int) (r5 % 26))) / 26;
                char[] charArray = "ZFCDGHQABNOPIEJRSTUVMWXKLY".toCharArray();
                str = str2 + charArray[i];
            } else {
                return str2;
            }
        }

    }
}