本站总访问量
文章目录
  1. 1. 检测token的逻辑
  2. 2. 分享token的逻辑

扣吧先给大家拜年了!祝大家猴年大吉,身体健康,万事如意!

OK,正文开始。以下内容仅做学习和交流,请勿转载,请勿做其他用途

春节前的一阵子是不是被吱口令搞烦了?

如下图:

zhicode

吱口令如下:

1
#吱,口,令#复制这条消息,打开你的支付寳即可添加我为朋友WcvLnp650c

我们来分析一下吱口令的逻辑,在com.alipay.android.phone.wallet.sharetoken下有后台服务ShareTokenService,是吱口令的核心逻辑。

这个后台服务对外提供4个API,分别是:

1
2
3
4
public abstract void checkToken();
public abstract String getVerifiedToken(String arg1);
public abstract void shareToken(String arg1, String arg2, String arg3, String arg4);
public abstract void shareToken(String arg1, String arg2, String arg3, String arg4, ShareTokenService$ShareTokenChannel

其中checkToken用于检测token,而shareToken用于分享token。我们分别对其进行分析。

检测token的逻辑

当页面状态变化时,会拉起ShareTokenCheckReceiver,这个Receiver会调用ShareTokenService的checkToken(),执行以下逻辑:

1)从系统剪切板中读取内容
2)从内容中提取token,用的是CRC32算法
3)检测当前MD5(UserId)是否和xml中的一致
4)把token和客户端数据组装成JSON串,发送到服务器端做校验
5)拉取数据,启动ToeknDecodeActivity页面

第二步中的从内容中提取token,token的长度默认是8位,判断逻辑是这样的:

1
如果字符串最后2位等于字符串前8位的CRC32,则前8位就是token,后2位是校验位

所以,无论吱口令的【token+校验位】前面或者后面添加多少奇葩字符,都不会影响吱口令的识别,除非支付宝升级客户端把checkToken的逻辑换掉

举个例子:
扌考贝这个 xiao xi,打開知-fu&宝,
送我富强福7ptkyKacrmv794M,
算出来token=Kacrmv79,校验位=4M

有兴趣的同学可以写个APP读取剪切板数据,提取token,精准识别吱口令:)

分享token的逻辑

入口A,用于添加好友:

在GenerateZhiCodeActivity会通过RpcService调用ZhiCodeRpc.getZhiCode()到服务器端获取token,随后调用ShareTokenService的shareToken,携带参数启动SendSharedTokenActivity页面

入口B,用于邀请朋友赐福:
ShareFactoryPresenter会调用blessingRpcService.genCode到服务器端获取token,随后调用ShareTokenService的shareToken,携带参数启动SendSharedTokenActivity页面

另外,支付宝传输协议使用的是protobuf,把远程调用封装了一层proxy,叫RpcService,客户端通过以下方式,可以便捷的调用服务器端CGI。

1
(RpcService)context.getRpcProxy(xxxRpc.class).xxxmethod(arg)

吱口令的分析到此为止,欢迎留言交流。有空再更一篇“支付宝咻一咻的秘密”:)

文章目录
  1. 1. 检测token的逻辑
  2. 2. 分享token的逻辑