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

一、目标

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

在这里插入图片描述

二、步骤

jadx全局搜索 sign

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

jadx1

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

在这里插入图片描述

这也太明显了,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

在这里插入图片描述

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

在这里插入图片描述

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

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

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

然后切换到 Smali 代码

在这里插入图片描述

啊哈,就是你了,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代码阅读能力

参考: https://www.cnblogs.com/dolphin0520/p/3811445.html[Java内部类详解]

在这里插入图片描述

你左顾右盼做着各种打算,却不知道生活已然过去大半。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号 奋飞安全 ,最新技术干货实时推送

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值