【安卓逆向】某游戏app sig参数分析

今天要分析的app 叫 dGFwdGFwIDIuMjA= (base64 解码),来一起学习下。

找个视频接口,上来先抓个包,没错今天就是要分析下这个sig参数。

在这里插入图片描述

这个app 在高版本上有加固壳,并且还有frida检测(ps:遇到困难不会放弃,以后慢慢研究),这里只是研究sig参数,所以采用低版本了。

把app 拖到jadx 打开,然后搜索"sign"关键词,找到下面👇🏻

在这里插入图片描述

public static HashMap<String, String> a(HashMap<String, String> hashMap) {
    if (hashMap != null && hashMap.size() > 0) {
        hashMap.put("sign", d(hashMap));
    }
    return hashMap;
}

sign 参数是d(hashMap) 方法计算出来的,跟进去。

在这里插入图片描述

往底部看,sign 又是NativeHttp.getSign(AppGlobal.a, sb.toString().getBytes()); 计算出来的,继续跟进去。

在这里插入图片描述
看关键词native,好吧 加密在so层,用到的so文件叫tap-patch

拿出我们的ida pro 把样本libtap-patch.so 拖进去看看。

在这里插入图片描述
我们先ctrl+F 搜索Java层静态注册的方法名,结果没有找到,所以它肯定是个动态注册的,所以在导出表 直接看 JNI_Onload

然后按F5,查看伪代码。

在这里插入图片描述
这里有很多函数,一个个的点进去看看,先看这个off_6004,跟进去。

然后来到这里看法了熟悉的名字"getSign",这不就是在Java层调用的函数名称吗

再看(Landroid/content/Context;[B)Ljava/lang..... 这一串 不就是 函数smail 语法下的入参参数吗

在这里插入图片描述

往下面有个 sub_18FC+1 跟进去看看sub_18FC 方法。

看到汇编代码,再按F5。

在这里插入图片描述
点击去一个个看,这里有个sub_16E4方法,继续跟进去。

在这里插入图片描述
可以看到,这里好像是定义了一个盐值。

然后经过sub_24D0 方法,点进去。

在这里插入图片描述
熟悉的四个常量,看过md5源码的同学肯定知道 这是做md5加密的初始化操作。

再看下sub_2504方法。

在这里插入图片描述
加密的逻辑大概就是把请求参数进行字典key排序,再拼接 然后尾部加个盐值。

静态分析差不多到此,接下来上frida 去动态分析下。

先frida 调试下Java层:

Java.perform(function (){
    var NativeHttp = Java.use("xmx.tap.http.NativeHttp");
    NativeHttp["getSign"].implementation = function (context, bArr) {
        console.log("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
        console.log('getSign is called');
        console.log('context: ' + context);
        console.log('bArr: ' + bArr);
        var java_string = Java.use("java.lang.String");
        console.log('bArr: ' + java_string.$new(bArr));

        var ret = this.getSign(context, bArr);
        console.log('getSign ret value is ' + ret);
        console.log("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
        return ret;
    };
    }
)

看看效果:

在这里插入图片描述
很明显传递进来的请求url 和 post body 的参数进行拼接,最后返回的就是 32位的MD5加密值。

但是直接把这段字符串 进行md5加密后,却和实际的值不一样,说明so层里面还有操作。

接下来继续frida 调试 sub_16E4sub_2504方法

在这里插入图片描述

我们把hexdump转换下

在这里插入图片描述

在这里插入图片描述

然后我们手动把两段字符串拼接,再用MD5测试下,不出所料,果然和hook 出来的结果对的上去。
我们的猜想得到了验证。

在这里插入图片描述

最后一步当然是 Python 还原了(源代码就不贴了)

在这里插入图片描述

sign计算正确,搜索接口的数据也拿到手了,告辞,早点睡觉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值