抖音作为一款日活超过1亿的优秀APP,其客户端与服务端的通信方式很值得APP开发者去研究和学习,为了保护其数据,客户端请求数据的接口都进行了加密,未经过加密处理的url,请求的时候不会返回数据,这里以最新的3.0版本为例,分析一下加密算法。

https://api.amemv.com/aweme/v1/feed/?manifest_version_code=310&_rticket=1541061729354&pull_type=2&app_type=normal&iid=48910484145&channel=aweGW&device_type=Redmi+5A&language=zh&type=0&uuid=868661038685020&resolution=720*1280&openudid=7664f169100e4e94&update_version_code=3102&os_api=25&max_cursor=0&filter_warn=0&need_relieve_aweme=0&dpi=320&ac=wifi&device_id=58329658832&os_version=7.1.2&count=6&version_code=310&is_cold_start=0&volume=0.0&app_name=aweme&req_from=&version_name=3.1.0&js_sdk_version=&device_brand=Xiaomi&ssmix=a&device_platform=android&min_cursor=-1&aid=1128&ts=1541061729&as=a1e58b7dd1960b1c1a4355&cp=bc64b9541ca0d2c8e1cDgM&mas=01b9fcc9ce21a0deb29046deb46e30350aacaccc2c868cc68c460c

上面的url用于抖音首页推荐列表数据的请求,可以看到除了一些设备、网络、渠道等相关信息以外,url尾部有as、cp和mas三个参数,这三个参数用于加密url,它们是根据前面的参数计算出来的。我们先看一下Java部分:

大概的计算流程如下:

  1. 把url中的参数提取出来,按顺序存到一个List中;
  2. 获取device_id;
  3. 调用UserInfo.getUserInfo(ts, (String[]) list.toArray(new String[list.size()]), null, device_id)获取一个44位加密后的字符串, 第1个参数是时间戳,第2个参数是第1步的list转换成的数组,第4个参数是第2步获取的device_id;这个方法是在native中实现;
  4. 把第3步计算的字符串前22位赋值给as,后22位赋值给cp;
  5. 调用Lcom/ss/sys/ces/f/a;->a(as.getBytes())[B获取一个27位的byte数组,最终会调到Lcom/ss/sys/ces/a;->e([B)[B,这个方法也是native实现;
  6. 把第5步计算的27位byte数组传入Lcom/ss/android/common/applog/k;->a([B)Ljava/lang/String;,结果为54位的字符串,赋值给mas,k.a()的实现如下图,走最后一个else分支;

可以看到抖音url加密算法的核心部分采用c/c++语言来实现,对native部分的逆向分析比java部分难度更大,而且抖音增加了反调试技术并且对native函数的名字进行了混淆,对代码逻辑进行ollvm混淆,进一步增加了分析的难度;通过分析,我们发现抖音的加密算法在libcms.so中,利用IDA静态分析加上inline hook技术,我们找到了getUserInfo的native实现函数sub_26750(0x26750是函数的相对so文件起始位置的偏移):

Lcom/ss/sys/ces/a;->e([B)[B的native实现函数是sub_2f1c8()

native部分的具体细节这里不在列出,大家可以参考看雪论坛上的两篇文章:

  1. [原创]抖音接口加密签名协议
  2. 抖音签名算法的逆向杂谈

最后,对抖音API加密算法感兴趣的朋友,可以联系我。 其他APP API签名算法分析可以参考下面的文章:

  1. 快手API签名算法
  2. 小红书API签名算法分析

转载于:https://juejin.im/post/5be0306551882516bc47767b

抖音APP接口签名算法分析相关推荐

  1. python爬app视频_python爬取抖音APP视频教程

    本文讲述爬取抖音APP视频数据(本文未完,后面还有很多地方优化总结) 公众号回复:抖音 即可获取源码 1.APP抓包教程,需要用到fiddler fiddler配置和使用查看>>王者荣耀盒 ...

  2. python 抖音文案提取_一篇文章教会你用Python抓取抖音app热点数据!

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

  3. 调试抖音App(教程)

    一.使用MonkeyDev建立空的工程,拖入IPA到目标文件夹中 1)启动Xcode进行编译执行 一起动就crash,说明签名校验已经通过. 1 LLVM Profile Error: Failed ...

  4. 抖音APP缓存提取token

    抖音将部分数据缓存至本地,其中包含了ck(device信息.token.app版本信息等),可以通过安卓程序将数据提取出来用于平时测试.因为该数据是缓存在应用的独立数据目录 安卓默认是不允许app互相 ...

  5. 从抖音app爬取数据

    背景介绍 当下最火的短视频app莫过于抖音了,作为时下短视频平台的龙头,抖音吸引了大量的流量,并产生了与之相应的产业链,所以针对抖音app的爬虫需求也与日俱增,但抖音app的反爬虫策略比较复杂,非静态 ...

  6. appium+mitmdump+夜神模拟器抓取抖音app

    最近项目在搞抖音app,记录一下过程和遇到的坑 第一步 准备环境 1,appium 2,fiddle 3,夜神模拟器 4,Android SDK 详情可以借鉴这篇文章 https://www.cnbl ...

  7. 爬虫进阶教程:抖音APP无水印视频批量下载

    一.前言 本文为两类人准备:技术控和工具控. 如果你是工具控,想简单方便地下载无水印的视频,那么可以使用第三方去水印平台: 抖音短视频解析下载平台 如果你是技术控,想要使用自己写的代码下载视频,那么可 ...

  8. 解决iOS版抖音破解重签名后无法安装

    解决iOS版抖音破解重签名后无法安装 回顾 上篇文章讲到 抖音9.8.1无法安装报错 DuplicateIdentifier 这个里更正下:版本为10.4.0 错误详细信息怎么查看 这里可以通过移动设 ...

  9. python抓取抖音评论_一篇文章教会你用Python抓取抖音app热点数据

    今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...

最新文章

  1. 和老同事的谈话:关于职业生涯以及MDA
  2. cass坡度土方计算案例_南方CASS方格网土方计算心得
  3. Scrapy基础(一) ------学习Scrapy之前所要了解的
  4. LeetCode - Department Highest Salary
  5. greendao引起的NoClassDefFoundError异常解决
  6. 热词统计发现算法3则
  7. postgresql 排序索引
  8. [css] pseudo-class与pseudo-element有什么区别?
  9. 简单的eda实验vga在linux系统中,EDA实验报告-VGA彩条显示.doc
  10. jQuery .tmpl(), .template()学习
  11. Windows 用户怒了!系统漏洞简直泛滥成灾
  12. 对麦克纳姆轮辊子的理解
  13. qt5使用触屏 偶尔没响应_【喂你播】三星6亿像素传感器曝光;苹果承认部分iPhone 11存在触屏缺陷...
  14. matlab傅里叶光学仿真,关于微透镜阵列的傅里叶光学分析
  15. 小学生 计算机编程 教程,小学生C++创意编程(视频教学版)
  16. html方式判断IE版本
  17. 南京市专精特新中小企业申报奖励补助(另附南京专精特新申报条件、材料和申报流程)
  18. 定义一个鸭子的类java_鸭子类型:一切都是为了复用
  19. PHP微信公众号开发——群发消息
  20. Android NDK-EGL 初级

热门文章

  1. 最短路径分析+路书(详细导航信息)
  2. GPU中的SM和warp的关系
  3. 2018年区块链人才趋势:降温、调节、蓄势待发
  4. HTML+CSS宇宙魔方特效
  5. excel怎么更改坐标轴刻度_excel2013怎么设置图表坐标轴刻度?调节图表坐标轴刻度方法介绍...
  6. LISP 圆孔标记_原创,圆孔生成镙丝孔 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  7. 广州优漫动游公司:UI设计中的详情页怎么设计?
  8. VS2017 打包 从与我的应用程序相同的位置下载系统必备组件
  9. 如何在七牛云测试域名失效情况下下载文件[windows]
  10. ubuntu搭建一个简单的http服务器