其他分享
首页 > 其他分享> > frida-rpc操作抓取抖音

frida-rpc操作抓取抖音

作者:互联网

抖音极速版,版本v2.0.3 pp助手可下载

frida rpc:

常规Hook是被动,Hook的函数/方法要被动等待触发,不能主动调用要Hook的代码 rpc能主动调用要Hook的代码

rpc.exports = {         var sig = "";
              get_hello: function(str){
                Java.perfrom(
                    function(){
                        var some = Java.use('XXXXX')
                        sig = some.get_sig()
                    }

) }

            return sig;
        };

可以使用Python主动调用

get_hello(str)

在说这个之前先把上一节讲的酷安app换另一种方法使用rpc操作打印token,

使用jadx打开酷安app,搜索x-app-token

找到与之相关的as

 

 现在我们可以通过hook AuthUtils这个类来调用getAs即可

hook代码大致像这样

var AuthUtils=Java.use(''com.coolapk.market.util.AuthUtils")

var as=AuthUtils.getAs(appContext,str)

str通过前面我们知道是devive_id  appContext是程序运行的上下文,hook的代码是固定的

于是出现如下的hook代码

import codecs
import os
import frida
import sys

def adbforward():
os.system('adb forward tcp:27042 tcp:27042')
os.system('adb forward tcp:27043 tcp:27043')

def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))

else:
print(message)

hook_code='''
rpc.exports = {
gethello: function(str){
//send('hello');
Java.perform(function(){

//拿到context的上下文。拿到程序中运行的上下文,本身程序的上下文,对其他对app通用
var currentApplication=Java.use('android.app.ActivityThread').currentApplication();
var context=currentApplication.getApplicationContext();

var AuthUtils=Java.use('com.coolapk.market.util.AuthUtils');
var sig=AuthUtils.getAS(context,str);
send (sig);
}
)
}
};
'''


process = frida.get_usb_device().attach('com.coolapk.market')
script = process.create_script(hook_code)
script.on('message', on_message)
print('[*] Running CTF')
script.load()
script.exports.gethello('3b943bad-3b28-3e38-9f59-fec57db00094')

 

 

 

成功,简单而快捷

 

现在我们试着操作抖音app

抖音极速版,版本v2.0.3 pp助手可下载

我们抓包时发现

 

发现as cp mas 是一直在变化的,且少一个参数都无法正确获取的到信息(其他版本发现

('as', 'a111111111111111111111'),
('cp', 'a000000000000000000000'),
('mas', 'null'),这三个写成这样一直不变都可以,由于 猿人学教学视频选择此链接抓取,暂时不管这些,以教学为主,找寻sa,cp,mas的规律,而且目前抖音的接口和之前的教学视频接口有些差异,本次笔记以现在的接口记录

我们使用jadx打开此app,找寻mas

发现很多很多参数,此时有个小技巧,你搜索mas"

这样的话,无关紧要的就很少了

 

 找到如下代码

 

 

 cp和mas都在,差个as

我们仔细观察里面的 函数实现cp是str.substring, mas是EagleEye.byteArrayToHexStr实现的

我们点开AdvanceSetting.ADVANCE_SETTING查找用例,发现这个函数就是as字符

 

 

现在我们看substring

 

 substring是str.substring实现的。此方法的意思是截掉从0开始到i2结束的字符串,将截取下来的值赋值给str(不包括i2)。i2涉及到了位运算

Java中 >> 右移公式 M>>N=M/2^n  左移 M<<N = M*2^n 以上结果取整

也就是i2=str的长度/2

也就是说substring是str字符串的一半,也就是as

再看cp cp=str.substring(i2, length)也就是说cp截取str的后半段

再看mas mas不好理解先不看,反正都是最后一起hook的,不用太过于去分析函数意思

现在看str是什么玩意,三个函数参数都带有str

 

 str是UserInfo.getUserInfo得到的

我们再看UserInfo

 

 

是下面的这个包得来的

根据之前的rpc-hook我们联想到,如果去hook str这个方法,来主动调动整个函数的运行,缺的参数手动补上,不就可以将as cp ,mas全部输出出来了吗

现在有个问题来了,getUserinfo 里面的参数怎么填写。

我们想到用frida hook技术去被动打印里面的参数,来观察参数变化先

像这样

 

 

 

 

 我们先不overload参数,先让他自己报错,看看要填入什么参数,复制即可

 

 

打印报错发现有三个可选择。此时我们仔细观jadx里面的参数大致类型。第一个是个int 第二个是个string,第三个是个数组,第四个是个string

我们看下这三个中哪个和需要的参数一致

发现第三个最接近,我们放进代码里.重新运行代码。滑动抖音app里面的用户作品集,打印的参数是这样的

 

 (由于目前抖音的api接口改版,加密和之前老得教学视频不一样,此次以新的加密做介绍)

v1是个时间戳

v2是个url。url里面变化的有 max_cursor,还有个ts 时间戳 useri_d 如果访问其他的用户,user_id也会变化

v3是个数组。里面的大致意思是代表设备的型号,固定不变,可以自己更换设备型号防止被封设备

v4:不变 一看就是个device_id

这些参数我们知道了,现在就好办了

我们写个hook-rpc函数,来操作sig

标签:mas,app,hook,rpc,抖音,str,frida,cp
来源: https://www.cnblogs.com/wuxianyu/p/14364405.html