抖音分析 - 篇一
前言
这篇文章没什么技术性,非常简单。
android 抖音最新版本v8.1.1抓包请求的api是v2版本,返回的json被稍微加密了,虽然能看出一些内容,但是中文几乎全部被加密,本来想研究apk的,奈何我当年没好好学,很菜,所以我就想到其他版本,就好像写爬虫pc复杂转移动端那样转其他版本,我找到一个v1版的api且能正常使用的版本1.6.6,该api返回的json内容很干净
所需工具:
jadx、jeb
一、分析
1.1 参数分析
抓个包,别找错了请求url。。。我之前就找错了,有一条请求包很大,其实是你附近的视频列表
这里的url和请求
url:https://aweme-eagle.snssdk.com/aweme/v1/feed/
params:
1 | { |
ok,简要分析了下各个参数大概是干嘛的,等我多抓几次包,看看哪些是不变的,或者哪些可以去除,骚等一会
…
第二次抓包与第一次对比变化的参数如下:
_rticket、ts、as、cp
as、iid、**_rticket、ts** 是刚需,cp 可有可无,以及其他基本不变的参数也是基本都需要的,否则会返回类似这玩意儿的结果
1 | {'status_code': 2154, |
所以,我们现在需要找到 as、cp 这俩参数加密的地方
1.2 JEB分析
打开jeb3.0,拽入apk
1 | 正在处理artifact... |
dnmd,等一万年
加载完
先搜索iid,我在上面说了这个不变即可,但我还是要让各位搞明白这个是啥
一会就找到了
在Mac上jeb3.0反编译是按tab,
可以看到iid其实是叫 install_id,所以我猜测这个保持不变即可
接着搜索**”as”,记得把分大小写和环绕搜索**勾上
在多次搜索->反编译分析->搜索之后,找到一个可疑的类
反编译
我觉得这个对新手不太友好,所以我决定换jadx反编译,然后贴出关键部分代码:
1 | // 首先是通过UserInfo类的getUserInfo方法获取用户的信息...吧 |
管它呢,先hook到getUserInfo返回的东西再说…emmm,当我点进UserInfo类后陷入了沉思
OK,关于native下一篇再讲,先看看还有没有其他办法,毕竟刚刚的判断让我觉得还有希望;还是先hook到userinfo再说,既然本篇没法hook getUserInfo方法,那我们就直接hook当前方法。
getUserInfo
第一个参数很明显是个时间,int类型
第二参数是我们这个方法的参数调用toString方法后,String类型
第三个参数也可以通过这个方法的参数算出来,String[]类型
开始动手
1 | Java.perform(function() { |
输出如图
应该很眼熟,就是请求的参数,然后那个getServerTime()返回的是时间戳,接着模拟调用一下getUserInfo。我已经成功获取到userInfo,所以我直接贴上所有代码
1 | Java.perform(function() { |
运行结果
1 | [*] Running CTF |
接着就是上面java代码的后半段
1 | // 首先是字符串userInfo |
然后我改了改hook代码……
1 | Java.perform(function() { |
output
1 | [cls_b.a] UserInfo: a19560291bd66dd68b0061d85db4b69963e1 |
这样就能通过frida获取参数as、cp,但是就这种程度是不能用python写生成这俩参数的方法,所以我会在下一篇文章写出so的分析
END
Code:https://github.com/ZCKun/douyin
WeChat Official Account:the2h0Ng