A-A+

某电商App Sign签名算法解析 内部类的Hook

2021年03月11日 文章转载 暂无评论 阅读 482 views 次

一、目标

我们来分析另一个电商App的sign签名算法,先打开一个商品页,抓包结果:

charles
1:charles

二、步骤

jadx全局搜索 sign

晕倒,7000多个结果,肯定没法玩。 再尝试下 sign=、 "sign"

jadx1
1:jadx1

这次效果不错,只有几十个结果,而且这个很眼熟,点进去看看:

jadx2
1:jadx2

这也太明显了,getSign 函数名都起的这么霸气。

Hook getSign

var  DispatchParamBuilderCls = Java.use('anet.channel.strategy.dispatch.DispatchParamBuilder');
DispatchParamBuilderCls.getSign.implementation = function(a,b){
    var result = this.getSign(a,b);
    console.log(">>> getSign " + result);
    return result;
}

结果

>>> getSign a4892b56967b2c11a07be8b01581e05db916d60b

可以了,收工……

Hook内部类

还没完, 我们仔细看一下 getSign函数的参数

 public static String getSign(IAmdcSign iAmdcSign, Map<String, String> map)

这个 IAmdcSign 是什么东东?点进去看下:

public interface IAmdcSign {
    String getAppkey();

    String sign(String str);

    boolean useSecurityGuard();
}

它只是一个接口,我们必须要找到这个接口的实现,然后再Hook sign才叫完美。

那就继续搜索 IAmdcSign

jadx3
1:jadx3

这里有个new的操作,双击进去看看

jadx4
1:jadx4

太棒了,这就是 IAmdcSign 的实现类。

不过这里我们犯难了,这个类的类名是什么?总不能是 class anet.channel.SessionCenter.C12541 吧?

我们记住这里的代码行是 142

然后切换到 Smali 代码

jadx5
1:jadx5

啊哈,就是你了,anet/channel/SessionCenter$1

迫不及待的hook之

var signOperCls = Java.use('anet.channel.SessionCenter$1');
signOperCls.sign.implementation = function(a){
    var result = this.sign(a);
    console.log(a);
    console.log(" >>> Sign " + result);
    return result;
}

结果就很完美了:

{"carrier":"联通","clientIsp":"100026","code":1000,"cv":0,"dns":[{"aisles":[{"cto":10000,"heartbeat":0,"port":443,"protocol":"https","retry":1,"rto":10000},{"cto":10000,"heartbeat":0,"port":80,"protocol":"http","retry":1,"rto":10000}],"host":"log.mmstat.com","ips":["101.11.251.76"],"strategies":[],"ttl":300,"version":"0"},{"aisles":[],"host":"fourier.xxx.com","ips":[],"strategies":[],"ttl":300},{"aisles":[],"host":"sjarvis.xxxxx.com","ips":[],"strategies":[],"ttl":300}],"ip":"121.129.37.71","uid":"2200620453058","unit":"center"}
 >>> Sign 0c52785056833613278c4746fe9cfa2cfae482ee

参数干净,下一步 RPC调用之就很简单了。

三、总结

不要太依赖java的反编译,源码级反编译仅供参考,还是需要有一定的Smali代码阅读能力

参考: Java内部类详解

原文链接:http://91fans.com.cn/post/dsbuysignone/

标签:

给我留言