逆向某住会sign与data算法

@(某住会sign与data算法)

某住会sign与data算法

经抓包分析得知,华住会app请求参数中有三个,分别是sign、data、time。time一眼可看出,就是当前时间,精确到秒。sign与data是经过一系列运算后 base64编码。

抓包分析

在这里插入图片描述

在这里插入图片描述
从图中可以看到,请求和响应均不是明文,响应报文从响应头中的content-type application/octet-stream 可以看到是字节流的形式,切换到十六进制模式。

反编译

这里我们用jeb打开,并导出源码,用idea打开
在这里插入图片描述
在这里插入图片描述

寻找data、sign处理逻辑

经过搜索和分析得知,计算data的代码在

public class NewGetString {
    static {
        System.loadLibrary("hzsign");
    }

    public static String a(String arg2, String arg3) {
        Class v0 = NewGetString.class;
        __monitor_enter(v0);
        try {
            arg2 = NewGetString.getNewStr(arg2, arg3).replaceAll("\r\n", "");
        }
        catch(Throwable v2) {
            __monitor_exit(v0);
            throw v2;
        }

        __monitor_exit(v0);
        return arg2;
    }

    private static native String getNewStr(String arg0, String arg1) {
    }
}

是一个本地方法,通过名称我们进入lib/armeabi目录,找到libhzsign.so,稍后我们再用IDA打开来分析。

接下来寻找sign的计算位置。

v0.a("sign", Base64.encodeToString(ab.c(v1.toString()), 2));

进入ab这个类的c方法

public static byte[] c(String arg2) {
        MessageDigest v0;
        try {
            v0 = MessageDigest.getInstance("MD5");
            v0.reset();
            v0.update(arg2.getBytes("UTF-8"));
            goto label_10;
        }
        catch(UnsupportedEncodingException ) {
        label_10:
            return v0.digest();
        }
        catch(NoSuchAlgorithmException ) {
            System.exit(-1);
            goto label_10;
        }
    }

这是一个md5算法。

逆向libhzsign.so

在这里插入图片描述
指令集功能鉴于篇幅 不一一解读。

还原算法

public static String deData(String data) {
        return EncodingUtils.decodeToString(Base64.decodeBase64(data), KEY);
    }
public static String getSign(String unSignData, String time) {
        ...
        return Base64.encodeBase64String(DigestUtils.md5(unSign));
    }
public static String getData(String unSignData) {
        return Base64.encodeBase64String(EncodingUtils.encode(unSignData.getBytes(), KEY));
    }
public static String deResponse(byte[] responseData) throws IOException {
        ...
    }

验证算法正确性

在这里插入图片描述
将抓包取得的data,经过解密,再次加密,与原包完全一致,控制台中已打印出true。
sign值与抓包中的sign也完全吻合。

有对安卓逆向感兴趣的朋友们,可进群:912146030 共同交流、进步。

猜你喜欢

转载自www.cnblogs.com/lily19941214/p/11876662.html