0x00前言

最近大家都在抢茅台酒,我也来凑凑热闹,我也好想抢到一瓶~,上次也发过一个酒仙APP的分析帖子了 上次分析贴;这次正好又碰到了一个小米有品的登录接口,碰到有好几个加密的数据,这次我们继续本着技术学习的方向去研究一下。

0x01整理

这就是登录时发送的登录数据接口传递的参数,其中我们看到加密数据包括:HASH、envKey、env、_sign 这四项,我们逐一进行查找

0x02 定位

首先第一步就是接口的定位,我们可以通过搜索接口名称(serviceLoginAuth2)或者搜索它传递的参数名称进行查找,这得看搜索的结果来决定用哪种好了; 这里我直接搜索名称serviceLoginAuth2

这里一共3条结果,明显最后1条并不是,因为多了几个字符,然而前面2条是一样的,我们随便点进去,然后进行引用跟踪

我们直接选择最后一条,进去查看

这条函数简直是非常的清晰,我们可以看到几乎这里做的操作跟接口传的参数都差不多都有,这里我把代码复制到vscode里面进行重命名修改,以便方便阅读。

0x02证实

接下来就要证实它是不是确实调用这个接口,我们有请frida登场(frida:“低调,低调”)。接下来编写hook代码~

因为这个APP正好使用了阿里的json,所以我就直接调用它的方法来格式化输出整个类的属性,就非常方便!后面我们开启HOOK输入账号密码登录一下~

0x03 分析

成功拿到数据了,证明该方法确实被触发,我们整理一下代码:

这里我们直接把刚刚复制的代码全部重命名,然后设置固定的值,这样方便我们进行阅读。

这里我们慢慢的进行按需分析,我们目前就想知道HASH、envKey、env、_sign这四项参数,首先第一项HASH,我们看到VSCODE上的第17行代码

经过手动MD5签名对比了一下确实如此,由此得知HASH = 大写MD5(密码)。

接下来我们发现代码中并未出现envKey,env以及_sign。

至于_sign我也不想卖关子了。。其实我也是经过各种查找无果,发现居然这是服务器返回的包里面包含的,天呐~

所以我们得知经过了几小时的不懈努力的无脑搜关键字,最终知道_sign是在服务器的接口内返回,由此得知

HASH = MD5(密码)

_SIGN = 服务器接口返回

0x04 深入虎穴

最终我们还需要查找env以及envKey,我们从当前的方法看不出有直接赋值,但是我们发现。它是通过新建easyPut一个类,把参数都传进去;所以我们发现它还把easyPut传到了一个addEnvToParams方法里面(第23行代码)

所以我们只能切换到jadx界面,跟进addEnvToParams看看在作何操作~

我们发现了一个醒目的字眼,envKey,它也同样是调用easyPutOpt方法进行插入,我们看到在它上面也进行了一次插入,名字是个变量,我们跟进去看看

终于,我们看到了env和envkey是这样赋值的,但这并没有结束,因为我们知道,它传入了一个string数组进去处理。 所以即使我们知道了env和envKey的加密方法,但还需要知道传进去的字符串数组,也就是hashedEnvFactors 是从何而赋值的。

0x05 env算法分析

我们暂且不管hashedEnvFactors从何而来,先看看env的算法

我们看到,它是调用PassportEnvEncryptUtils.encrypt(strArr);直接返回的encrypt,并且直接取出encrypt里的content(对应env)和encryptedKey(对应envKey)得到的结果。所以直接跟进encrypt方法里面查看

第一层跟进

第二层跟进

发现一个常量,去看下是什么值

发现值:"0102030405060708",继续返回跟进

最终我们看到它是进行的一个ASE算法,整个结果其实也是相当简单的了,我们把代码抠出来VSCODE分析下。

首先参数1则是我们第一层看到它,他是把hashedEnvFactors 数组用:分割连接起来了,所以我们写死他。

而参数2就是第三层看到的DEFAULT_IV,我们也写死

所以它的传参应该是这样的;接着我们可以看到,它new了自己封装的一个ASE的EncryptResultWithIv类,然后赋值参数2给iv,估计就是加密的KEY。

关键在于它又调用了这行代码,generateSymmetricKey(),我们进去看一下~

好像也并不是很关键0.0,就是随机初始化了一个ASE然后返回它的key。那么我们继续阅读刚刚的代码,因为它连接的有一点长,我们把他格式处理一下。

因为这里的计算感觉有点绕,前3行代码图片已经打出注释了,我们看下第接下来一行就是赋值跟env结果的关键代码,它又跑去执行了一个aesEncrypt方法,并且我们看到传入的正是hashedEnvFactors以及随机证书的KEY以及刚刚看到的0102030405060708的IV进行调用的,所以我们还需要跟进aesEncrypt查看一下都是怎么处理的。

这里我们看到它以随机生成的证书作为构造类定义,然后在传入要加密的

hashedEnvFactors以及IV,我们在进去看看。

这里跟进去后发现就是调用encryptWithIv进行ASE签名的,然后在转成BASE64完成env的加密!!

0x06 总结

至此我们已经完成了4项参数的算法~

HASH = 大写MD5(密码)

_SIGN = 来自服务器返回

ENVKEY = BASE64编码(RSA(一个随机证书,公共密钥))

ENV = BASE64编码(ASE(hashedEnvFactors,"0102030405060708"))

这些完全可以直接扣掉它自己定义的ASE类来放到JAVA独立调用的,就不再作演示,由于文章挺长了,下次在讲一讲hashedEnvFactors这10几个字符串的定义来源

android 接口sign,[原创]小米APP登录接口env、envkey、sign、hash算法相关推荐

  1. python获取接口返回值_Python+request 登录接口reponse的返回值token跨py文件的传递《二》...

    主要使用场景: 一般我们在进行接口测试时,依赖登录接口后reponse中的某些返回值,因此需要将login接口单独写一个py文件,另外的py文件均可调用login的reponse返回值使用.共用登录接 ...

  2. mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...

    原创: http://blog.csdn.net/iwanghang 1.先来个Androiod端口的GIF效果图 App图标大家可能没看清,这个是AndroidStudio3.0最新的默认App图标 ...

  3. 淘宝商品详情页接口,淘宝实时销量接口,淘宝商品列表接口,淘宝APP详情接口,H5商品详情接口

    采集淘宝商品列表和商品详情及淘宝实时销量遇到滑块验证码的解决方法(带SKU和商品描述,可高并发),主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题,以后都可以使用以下的方法: 大家 ...

  4. java qq登录接口_java server qq第三方登录接口

    qqUtil类 public class QQUtils { /** * 利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 * @param request * @ ...

  5. java接口自动化实战一(登录接口实现)

    以一个url为例子 public class LoginTest {public static void main(String[] args) throws IOException {String ...

  6. 微信小程序注册/登录接口开发

    文章目录 后端有关说明 前端有关说明 接口设计 小程序注册/登录接口 APP 注册/登录接口 PC Web 端的注册/登录接口 小程序注册/登录序列图 校验 token 后端有关说明 登录和注册的逻辑 ...

  7. 视频教程-微博登录接口开发-PHP

    微博登录接口开发 2009年4月创办 淄博日诺网络科技有限公司 法人总经理 2016年负责 中国传媒大学凤凰学院 网站开发 项目负责人 2017年 参与负责 用友软件理财项目开发 郭孟涛 ¥39.00 ...

  8. 微信第三方登录接口开发

    微信登录接口开发须知 APP登录接口 PC网站登录接口 微信移动网页登录接口(又称微信公众号授权登录) 移动端非微信自带浏览不支持微信登录 微信移动网页登录接口(又称微信公众号授权登录) 先要与开放平 ...

  9. 登录接口解析与接口测试用例

    目录 一.登录接口解析 (1)登录接口文档 (2)登录接口解析 (3)测试用例 二.生成报告 (1)保存json ​​2.生成报告html 一.登录接口解析 (1)登录接口文档 基本信息 Path:/ ...

最新文章

  1. 搜索和搜索形式(SEARCHING and its forms)
  2. VTK:InfoVis之PKMeansClustering
  3. python 去空_Python 内存分配时的小秘密
  4. 如何10分钟入门3D游戏开发?
  5. 中石油训练赛 - Plan B(点双缩点+树形dp)
  6. Selenium自动化测试-3.元素定位(2)
  7. android开发分页查询,Android开发中实现分页效果的简单步骤
  8. centos 安装tmux
  9. 项目组成和开发步骤——VB
  10. Kotlin — 在一个项目中混用 Java 与 Kotlin(混合开发)
  11. java long 1 000_Java-基本数据类型
  12. twrp gui/actions.cpp 中的功能实现 tw_action ,tw_action_param ,第二章
  13. java swing入门教程_java swing基础(菜鸟教程学习)
  14. 使命召唤9怎么样使用计算机,玩家实测COD9 教你如何使用FXAA、TXAA
  15. 消息队列相关使用方式
  16. Object.freeze()
  17. 机器学习模型评估——混淆矩阵
  18. 【前端知识整理】边距塌陷问题 什么是BFC 如何阻止边距塌陷
  19. WPS中excel 把ABCD改成数字
  20. 医学界的动作捕捉系统(二)

热门文章

  1. 爬取王者荣耀皮肤-点券领取
  2. 手把手带你开发一个批量下载资源的谷歌浏览器扩展
  3. matplotlib 给坐标轴上的数字加单位
  4. Nginx的常用配置
  5. 【FaceRevelio】一种用于智能手机的带有前置摄像头的 人脸活跃度检测系统
  6. JavaScript沙箱(环境,黑盒)
  7. 蜗牛学院:这6种心态,容易毁掉你的职场
  8. MFC实现CIE1931
  9. 笔记本加装SSD重装系统win10引导始终指向原系统的问题终极解决方法
  10. 配音赚钱的软件有哪些 ?推荐以下这3个平台