位置: IT常识 - 正文

小米开放平台逆向工程(小米开发回稳定)

编辑:rootadmin
前言 最近在调研 小米开放平台 API 的能力,发现能力支持的实在有点少,没办法只能另辟蹊径去逆向 Consule UI 的能力。 逆向工程最重要解决的就是“认证”。有没有办法自动登录鉴权,或者使用一个长久可靠、可续期的 token,直接决定了该 Consule UI 是否可逆向。 逆向工程-认证 ... 前言

推荐整理分享小米开放平台逆向工程(小米开发回稳定),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:小米开放平台干什么的,miui开放平台,小米开发者平台官网,小米开放平台逆向工程,小米 开放平台,小米开放平台逆战怎么玩,小米开放平台逆向工程,小米开放平台逆战怎么玩,内容如对您有帮助,希望把文章链接给更多的朋友!

最近在调研 小米开放平台 API 的能力,发现能力支持的实在有点少,没办法只能另辟蹊径去逆向 Consule UI 的能力。

逆向工程最重要解决的就是“认证”。有没有办法自动登录鉴权,或者使用一个长久可靠、可续期的 token,直接决定了该 Consule UI 是否可逆向。

逆向工程-认证首先,抓到小米开放平台登录接口:/pass/serviceLoginAuth2curl 'https://account.xiaomi.com/pass/serviceLoginAuth2' \ -H 'Accept: application/json, text/plain, */*' \ -H 'Accept-Language: zh-CN,zh;q=0.9' \ -H 'Cache-Control: no-cache' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \ -H 'Cookie: deviceId=wb_855aaa14-cb23-48ff-b828-708c627c48eb; pass_ua=web; pExpireTime=0; passInfo=login-end; JSESSIONID=aaa0jIoVQRTDN9uNTktqy; uLocale=zh_CN' \ -H 'EUI: S6ApR6Vvom5JQTG2gxT3xfAuoMfXOpav/MdbTMcfQCVZVEqvzxSbBBCugod8JFANCLI0qafUfXANofq3TkjkUWu5xhbqrFOa/uwPi3jmmWEo3Kl7dbtQW2FyHaeOfypuAcyZpAhbPnxG9e4+sV9fQB/MvkQRIgn+7PUAWlf9rfU=.dXNlcg==' \ -H 'Origin: https://account.xiaomi.com' \ -H 'Pragma: no-cache' \ -H 'Referer: https://account.xiaomi.com/fe/service/login/password?_locale=zh_CN&sid=mideveloper&qs=%253Fcallback%253Dhttps%25253A%25252F%25252Fdev.mi.com%25252Fsts%25253Fsign%25253DNUzuBPDqs94TS1jFRue%2525252BFtqq%2525252BrA%2525253D%252526followup%25253Dhttps%2525253A%2525252F%2525252Fdev.mi.com%2525252Fhome%2526sid%253Dmideveloper%2526_locale%253Dzh_CN&callback=https%3A%2F%2Fdev.mi.com%2Fsts%3Fsign%3DNUzuBPDqs94TS1jFRue%252BFtqq%252BrA%253D%26followup%3Dhttps%253A%252F%252Fdev.mi.com%252Fhome&_sign=5OL5w4GfqMJ2CWGnfv7yBBxpc7A%3D&serviceParam=%7B%22checkSafePhone%22%3Afalse%2C%22checkSafeAddress%22%3Afalse%2C%22lsrp_score%22%3A0.0%7D&showActiveX=false&theme=&needTheme=false&bizDeviceType=' \ -H 'Sec-Fetch-Dest: empty' \ -H 'Sec-Fetch-Mode: cors' \ -H 'Sec-Fetch-Site: same-origin' \ -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36' \ -H 'X-Requested-With: XMLHttpRequest' \ -H 'sec-ch-ua: "Chromium";v="106", "Google Chrome";v="106", "Not;A=Brand";v="99"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ --data-raw 'bizDeviceType=&needTheme=false&theme=&showActiveX=false&serviceParam=%7B%22checkSafePhone%22%3Afalse%2C%22checkSafeAddress%22%3Afalse%2C%22lsrp_score%22%3A0.0%7D&callback=https%3A%2F%2Fdev.mi.com%2Fsts%3Fsign%3DNUzuBPDqs94TS1jFRue%252BFtqq%252BrA%253D%26followup%3Dhttps%253A%252F%252Fdev.mi.com%252Fhome&qs=%253Fcallback%253Dhttps%25253A%25252F%25252Fdev.mi.com%25252Fsts%25253Fsign%25253DNUzuBPDqs94TS1jFRue%2525252BFtqq%2525252BrA%2525253D%252526followup%25253Dhttps%2525253A%2525252F%2525252Fdev.mi.com%2525252Fhome%2526sid%253Dmideveloper%2526_locale%253Dzh_CN&sid=mideveloper&_sign=5OL5w4GfqMJ2CWGnfv7yBBxpc7A%3D&user=xxxx&hash=xxxx&_json=true&policyName=miaccount&captCode=' \ --compressed小米开放平台逆向工程(小米开发回稳定)

把这个 cUrl 精简一下:

curl --location --request POST 'https://account.xiaomi.com/pass/serviceLoginAuth2?callback=https://dev.mi.com/sts?sign=NUzuBPDqs94TS1jFRue%2BFtqq%2BrA%3D&qs=%3Fcallback%3Dhttps%253A%252F%252Fdev.mi.com%252Fsts%253Fsign%253DNUzuBPDqs94TS1jFRue%25252BFtqq%25252BrA%25253D%2526followup%253Dhttps%25253A%25252F%25252Fdev.mi.com%25252Fhome%26sid%3Dmideveloper%26_locale%3Dzh_CN&sid=mideveloper&user=xxxx&cc=+86&hash=xxxx&_json=true&captCode=' \--header 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \--header 'EUI: YbSRNpc/gnpq1tgbE9y37EagHk+tgIrYnrJUap0FOYzCsUSBi6p1tbf9kT5G4DJUB7Vya+0q7dnFDTBVYRK8NNgGqt1JMAg6quLUNXLBlsK8KJDo9rGxFczOau8lLo/OH/jtDLLm51XbOWq42gdxVuKaJk9/FmgC+2qh+FOocio=.dXNlcg==' \--header 'Origin: https://account.xiaomi.com' \

然后发现我们需要解决的问题有 user、hash、captCode、EUI。

user:用户名,密文,需要弄清除怎么加密的;hash:密码,密文,需要弄清楚怎么加密的;captCode:验证码,触发时机未知;EUI:Request Header

然后,就去翻小米 js 中加密这些的逻辑,在这个 JS 里面。核心代码是下面这段(有些变量被我重命名了):

function Pt(ttttt) { var e, r; ttttt = ttttt || {}; // 16 位固定字符随机字符串 var iiii = function (t) { for (var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*", r = "", i = 0; i < t; i++) { var n = Math.floor(Math.random() * e.length); r += e.substring(n, n + 1) } return r }(16), s = new Ct({}); s.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYEVrK/4Mahiv0pUJgTybx4J9P5dUT/Y0PuwMbk+gMU+jrZnBiXGv6/hCH1avIhoBcE535F8nJQQN3UavZdFkYidsoXuEnat3+eVTp3FslyhRwIBDF09v4vDhRtxFOT+R7uH7h/mzmyA2/+lfIMWGIrffXprYizbV76+YQKhoqFQIDAQAB"); var h = s.encrypt(window.btoa(iiii)), u = l.a.parse("0102030405060708"), f = l.a.parse(iiii), p = window.btoa(a()(ttttt).join(",")), gggg = {}; return o()(e = a()(ttttt)).call(e, (function (e) { var r = ttttt[e], i = c.a.encrypt(r, f, {iv: u, padding: d.a}); i = i.toString(), gggg[e] = i })), {EUI: n()(r = "".concat(h, ".")).call(r, p), encryptedParams: gggg} }

直接说结论,随机生成 16 位字符串作为密钥,先 Base64 后,再 RSA 加密,publicKey 就是这串:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYEVrK/4Mahiv0pUJgTybx4J9P5dUT/Y0PuwMbk+gMU+jrZnBiXGv6/hCH1avIhoBcE535F8nJQQN3UavZdFkYidsoXuEnat3+eVTp3FslyhRwIBDF09v4vDhRtxFOT+R7uH7h/mzmyA2/+lfIMWGIrffXprYizbV76+YQKhoqFQIDAQAB

加密出来的信息和 "user" 字符串的 Base64 拼接就是 EUI,并传递给服务端;user 是用 AES 加密的,密钥就是随机生成的 16 位字符串,iv 向量是固定的 0102030405060708 , padding 方式是 AES/ECB/PKCS5Padding ; hash 是密码简单 MD5,没有加 salt 操作;captCode 触发时机无法知晓。

逆向工程-鉴权

有了以上信息后,我们就能直接通过 username + password 的方式登录小米开放平台了,返回信息如下:

&&&START&&&{ "qs": "?callback=https%3A%2F%2Fdev.mi.com%2Fsts%3Fsign%3DNUzuBPDqs94TS1jFRue%252BFtqq%252BrA%253D%26followup%3Dhttps%253A%252F%252Fdev.mi.com%252Fhome&sid=mideveloper&_locale=zh_CN", "ssecurity": "MEQ+3bDLm2toC7OuIPia1g==", "code": 0, "passToken": "xxx", "description": "成功", "securityStatus": 0, "nonce": 6417736210287713280, "userId": xxx, "cUserId": "xxx", "result": "ok", "psecurity": "69f4VnfI6mcnMwLl990Aaw==", "captchaUrl": null, "location": "https://dev.mi.com/sts?sign=xxx%20Ftqq%20rA%3D&d=wb_7a366d72-c639-4390-a584-6e4122f1543f&ticket=0&pwd=1&p_ts=1667104077000&fid=0&p_lm=1&auth=kqQrNRt4ljohm2qZoQgkBnh06dJS4UD7yYgG7QXOdXBHP1x9d5WfqCE2q18jd2rGoLLgpuSKEw60oGsYHIpHqzIGxESRIInKhS8DGDfN9bwsYXpLCctCK8D%2BHk7Gb399N1houCp9gqcaZEeDfsWMu1%2BBgs8iPsQcQ8DpL8Peay8%3D&m=1&_group=DEFAULT&tsl=0&p_ca=0&p_ur=CN&p_idc=China&nonce=EzbXp8ocSecBp%2Fdr&_ssign=RP2a7pLwZ%2BygW9aoH%2BK6uvKWf54%3D", "pwd": 1, "child": 0, "desc": "成功"}

然后直接访问返回的 location 地址,在 reponse 的 header 的 set-cookie 信息里面就能找到 serviceToken 的信息,这个就是开放平台的鉴权信息,Consule UI 所有的接口都能用 serviceToken 来访问。

curl 'https://dev.mi.com/uiueapi/myitems/undefined/0' \ -H 'authority: dev.mi.com' \ -H 'cookie: serviceToken=Xv5lATucFWfMVEEue0csFBgx7IPAbtamENHgyJjhFU4qOMuwbpOLB3TX0oDJTmKguEgDrYw2qar0xiEQK1rQvIq3OZ0k7JCF/DXCnMRAr727GzINrcV2qRC6JGxScmMA835wenAdpBRixjxFdTKyPT/zwlUTT4h42NxxxxxWwYJ5d1DeWmvDwIq+so7dsE/ibzDcnPJRhhatIefbBbgyHpsBzTMa7Vgw057finoamZs7hc2q7E/mt+xmavAsLollWm0H7QC7qhsTqvUOSYDJXD2Df7bnadM8I0PM97ME=; userId=xxx' \ -H 'referer: https://dev.mi.com/distribute' \ --compressed
本文链接地址:https://www.jiuchutong.com/zhishi/303681.html 转载请保留说明!

上一篇:SpringBoot自动配置(装配)流程(springboot自动配置的注解)

下一篇:最强MacBook苹果笔记本macos电脑应用Sublime Text 4代码编辑器傻瓜汉化教程(哪一款macbook)

  • 寻找一双合适的鞋(寻找一双合适的鞋子英文)

    寻找一双合适的鞋(寻找一双合适的鞋子英文)

  • a1661是苹果几(苹果型号a1661是苹果几)

    a1661是苹果几(苹果型号a1661是苹果几)

  • 支付宝好友可以视频语音聊天吗(支付宝好友可以看到我的账单吗)

    支付宝好友可以视频语音聊天吗(支付宝好友可以看到我的账单吗)

  • 抖音能投屏到电视吗(抖音能投屏到电视上吗苹果手机)

    抖音能投屏到电视吗(抖音能投屏到电视上吗苹果手机)

  • iphone锁屏突然变虚化(苹果锁屏突然变了)

    iphone锁屏突然变虚化(苹果锁屏突然变了)

  • 华为siri怎么呼叫(华为siri怎么用)

    华为siri怎么呼叫(华为siri怎么用)

  • 荣耀8x屏幕录制不见了(录屏功能怎么打开华为荣耀8x)

    荣耀8x屏幕录制不见了(录屏功能怎么打开华为荣耀8x)

  • 蜂鸟众包身份证上传不了(蜂鸟众包身份证被注册)

    蜂鸟众包身份证上传不了(蜂鸟众包身份证被注册)

  • 笔记本win10改成win7(win10怎么改win7)

    笔记本win10改成win7(win10怎么改win7)

  • hdmi线是干什么用的(hdmi线有啥作用)

    hdmi线是干什么用的(hdmi线有啥作用)

  • 什么是算法的复杂度分析(什么算法的复杂度是nlog2的)

    什么是算法的复杂度分析(什么算法的复杂度是nlog2的)

  • iphone丢失模式还能用吗(iphone丢失模式还是一个红锁是还没人刷机是吧)

    iphone丢失模式还能用吗(iphone丢失模式还是一个红锁是还没人刷机是吧)

  • ipadmini5支不支持快充(ipadmini5支持pd吗)

    ipadmini5支不支持快充(ipadmini5支持pd吗)

  • 苹果手机不断重启是什么原因(苹果手机不断重复开关机)

    苹果手机不断重启是什么原因(苹果手机不断重复开关机)

  • bose耳机充电多久(bose耳机充电多久充满)

    bose耳机充电多久(bose耳机充电多久充满)

  • 超级快充是数据线还是充电头(超级快充数据线原理)

    超级快充是数据线还是充电头(超级快充数据线原理)

  • 小米9原装数据线是多大的(小米9原装数据线3a还是5a)

    小米9原装数据线是多大的(小米9原装数据线3a还是5a)

  • 手机显示hd怎么关掉(手机显示HD怎么回事)

    手机显示hd怎么关掉(手机显示HD怎么回事)

  • nfcvivox9plus有吗(vivox9splus有nfc)

    nfcvivox9plus有吗(vivox9splus有nfc)

  • 爱奇艺会员怎么取消(爱奇艺会员怎么退款)

    爱奇艺会员怎么取消(爱奇艺会员怎么退款)

  • 如何取消华为移动服务(关闭华为移动服务有什么影响)

    如何取消华为移动服务(关闭华为移动服务有什么影响)

  • 微信二维码收款怎么申请(微信二维码收款可以查到对方信息吗)

    微信二维码收款怎么申请(微信二维码收款可以查到对方信息吗)

  • word为什么无法被编辑(word为什么无法编辑)

    word为什么无法被编辑(word为什么无法编辑)

  • 快手能恢复本地作品吗(快手可以恢复)

    快手能恢复本地作品吗(快手可以恢复)

  • 滴滴快车预付车费什么意思(滴滴快车预付车费多久退回)

    滴滴快车预付车费什么意思(滴滴快车预付车费多久退回)

  • 快手直播黄钻是快币吗(快手直播黄钻是谁给的)

    快手直播黄钻是快币吗(快手直播黄钻是谁给的)

  • xr能用动态壁纸吗(xr能不能用动态壁纸)

    xr能用动态壁纸吗(xr能不能用动态壁纸)

  • 华为p30pro有呼吸灯吗(华为p30pro有没有呼吸灯)

    华为p30pro有呼吸灯吗(华为p30pro有没有呼吸灯)

  • 2016年最受欢饮的Linux发行版排行榜曝光(2016年最佳歌曲)

    2016年最受欢饮的Linux发行版排行榜曝光(2016年最佳歌曲)

  • CSS中 设置( 单行、多行 )超出显示省略号(css 单行显示)

    CSS中 设置( 单行、多行 )超出显示省略号(css 单行显示)

  • 【一起学Rust | 框架篇 | Viz框架】轻量级 Web 框架——Viz(rust 入门教程)

    【一起学Rust | 框架篇 | Viz框架】轻量级 Web 框架——Viz(rust 入门教程)

  • python里的π怎么输入(python里%s)

    python里的π怎么输入(python里%s)

  • 增值税发票综合服务平台怎么下载
  • 工程机械租赁增值税税率很多适用错误应该是9不是13
  • 外资企业变内资流程
  • 新税法下广告费和业务宣传费的扣除是怎样?
  • 非居民税收征管方式包括
  • 长期待摊费用可以抵扣吗
  • 1元换购怎么做账
  • 增值税价外费用如何开票
  • 去税务局交的社保能退么
  • 购销合同印花税税率2023
  • 矿产资源税是多少
  • 小规模纳税人实行简易征收办法
  • 金税盘如何红冲已抵扣专票
  • 纳税人提供不动产经营租赁增值税征收管理
  • 在建工程计提减值准备可以转回吗
  • 企业的其他业务成本包括什么
  • 增值税普通发票几个点
  • 过桥资金法律规定
  • 什么情况下需要承担法律责任
  • 香港企业股东分红税
  • 事业单位政府预算
  • 进口关税增值税计算公式
  • 累计折旧 减少
  • 家具有限公司
  • phpstorm怎么用
  • 营改增开始时间
  • 微信支付开发者平台
  • 成本费用损失的区别和联系
  • webpack性能优化 加载
  • ps2021和cs6有什么区别
  • 零申报的申报表怎么填
  • 赔付支出计算公式
  • 分公司和总公司的账务处理
  • opengl开发图形界面
  • 预缴所得税亏损费用金额大会被监测到吗?
  • 报关单填写要求怎么填
  • 劳务报酬个人所得税税率表2023
  • 季度利润表是累计数吗
  • 小规模企业没有进项票能开发票吗
  • 机票改签费可以报销吗
  • 发票红冲要去税务局吗
  • 现金流量表财务费用包括哪些内容
  • 员工自己全额承担社保费用要计提吗
  • sql 获取指定字符位置
  • 公司购买房子如何交税
  • 最新成品油消费政策
  • 所得税费用结转分录
  • 哪些业务可以开专票
  • 上个月的发票可以作废吗
  • 投资收益科目在利润表中怎么填
  • 房屋出租要交的税有哪些
  • 案例分析收到了哪些安全启示
  • 利润表里公允价值变动损益怎么算
  • 航天信息发票全额抵扣
  • 一次性购买多张火车票
  • 库存商品成本差异怎么结转
  • 会计年终决算怎么填写
  • sql server数据库正在恢复
  • mysql5.7.24安装配置教程
  • 64位win7旗舰版右下角音量小喇叭图标不见了怎么找回?
  • win7系统命令激活
  • 迅速修复系统漏洞的方法
  • Win10 Mobile 10572预览版上手体验视频
  • debian启用ssh
  • 如何创建mac系统安装盘
  • linux ifconfig命令详解
  • Win10 TH2正式版偷偷恢复/篡改成对应的预装应用
  • windows开发教程
  • fedora23安装
  • 关于linux操作系统的描述中
  • Vuforia 4.0 beta——Object Recognition (三)
  • shell脚本运行c程序
  • 在JavaScript中声明变量的关键词有
  • easyui 表单提交
  • android 显示图片
  • 烟草局收入怎么样
  • 企业销售旧货增值税税率
  • 开展和组织开展什么区别
  • 武汉税务电话号码
  • 福建地税网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设