分析okhttp3-retrofit2-截流某音通信数据

admin 2024年10月17日23:06:00评论33 views字数 3279阅读10分55秒阅读模式

免责声明

分析okhttp3-retrofit2-截流某音通信数据

文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业和非法用途,否则由此产生的一切后果与作者无关。若有侵权,请在公众号【爬虫逆向小林哥】联系作者

分析okhttp3-retrofit2-截流某音通信数据

01

前言

好久没发文了,之前有发过通过hook方式降级douyin-quic协议进行抓包。今天分享从okhttp3-retrofit2通信框架拦截douyin通信的请求和响应。

02

效果

评论

分析okhttp3-retrofit2-截流某音通信数据 

        橱窗         

分析okhttp3-retrofit2-截流某音通信数据

03

知识点

分析okhttp3-retrofit2-截流某音通信数据

okhttp

OkHttp是一个高效的HTTP客户端,是目前Android使用最广泛的网络框架

特点:支持http1、http2、quic、websocket;无缝支持gzip数据压缩,减少数据流量(抖音的有些post-data就是gzip发包的);连接池复用底层TCP;

private void testOkHttp() throws IOException {//Step1final OkHttpClient client = new OkHttpClient();//Step2final Request request = new Request.Builder().url("https://www.google.com.hk").build();//Step3Call call = client.newCall(request);//step4 发送网络请求,获取数据,进行后续处理call.enqueue(new Callback() {    @Override    public void onFailure(Call call, IOException e) {    }    @Override    public void onResponse(Call call, Response response) throws IOException {        Log.i(TAG,response.toString());        Log.i(TAG,response.body().string());    }});}

如果需要加代理的话,通过builder添加:

// 设置代理服务器,这里以HTTP代理为例final String proxyHost = "your_proxy_host";final int proxyPort = your_proxy_port;Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, proxyPort));// 设置代理builder.proxy(proxy);

说到代理,这里给大家推荐款IP代理商:青果网络 !!!

最近笔者也在使用这家代理,主要是给的优惠足够大  哈哈哈

青果的国内短效代理,提供动态和短效的IP资源,其基于拨号VPS构建的高品质代理服务器,部署全国200+城市与地区,IP日流水超600万,更有6小时不限量测试时长;使用后的感觉整体ip稳定性、业务成功率和性价比都挺不错的。

评估下来个人感受有一下几大优势:

第一:极速响应

第二:支持短时间大量提取IP(应对短期需要切换大量IP的爬虫任务)、

第三:提供代理请求统计分析(方便用于监控用量)。

第四:支持负载均衡(平均分配请求负载,防止单个服务器过载)

分析okhttp3-retrofit2-截流某音通信数据

感兴趣老板可以点击文尾阅读原文查看!!!

切回正片!!!

retrofit

Retrofit将您的HTTP API转换为Java接口;Retrofit 是一个 RESTful 的 HTTP网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装;

准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装。App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。

在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用户的需求对结果进行解析。所以,网络请求的本质仍旧是OkHttp完成的,retrofit只是帮使用者来进行工作简化的,比如配置网络,处理数据等工作,提高这一系列操作的复用性。

  Retrofit retrofit = new Retrofit.Builder()                .baseUrl("http://fanyi.youdao.com/") //设置网络请求的Url地址                .addConverterFactory(GsonConverterFactory.create()) //设置数据解析器                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())                .build();// 创建 网络请求接口 的实例GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);//对 发送请求 进行封装Call<Reception> call = request.getCall("");// 异步请求call.enqueue(new Callback<Reception>() {    //请求成功时回调    @Override    public void onResponse(Call<Reception> call, Response<Reception> response) {        //请求处理,输出结果        response.body().show();    }    //请求失败时候的回调    @Override    public void onFailure(Call<Reception> call, Throwable throwable) {        System.out.println("连接失败");    }});  //同步请求try {    Response<Reception> response = call.execute();    response.body().show();} catch (IOException e) {    e.printStackTrace();}

03

分析过程

打开douyin-apk,找到retrofit2

分析okhttp3-retrofit2-截流某音通信数据

目录下封装了client、request、response,以及一个SsCall接口

SsCall接口有个execute方法,然后返回值Response类型

分析okhttp3-retrofit2-截流某音通信数据

整个流程就是一个实现Client接口的类调用newSsCall 会返回一个实现SsCall的类,类中通过execute调用实现Call的类返回Httpresponse

分析okhttp3-retrofit2-截流某音通信数据

查下这个SsCall的实现,进第一个查找用例

分析okhttp3-retrofit2-截流某音通信数据

这里拿到retrofit2封装的Response的body

分析okhttp3-retrofit2-截流某音通信数据

我们hook下Response

分析okhttp3-retrofit2-截流某音通信数据

分析okhttp3-retrofit2-截流某音通信数据

hook到了

分析okhttp3-retrofit2-截流某音通信数据

参数:

str是请求的url  i=200应该是状态码  list是个object  typedInput也是object

从名字上可以看出list是headers的切片,最重要的是这里的typedInput

往上回溯找到实参位置

分析okhttp3-retrofit2-截流某音通信数据

进去

分析okhttp3-retrofit2-截流某音通信数据

分析okhttp3-retrofit2-截流某音通信数据

直接hook这个getBytes即可

因此我们上面hook函数改为:

分析okhttp3-retrofit2-截流某音通信数据

分析okhttp3-retrofit2-截流某音通信数据

我们日志文件里面以及有了字节,我们转为str看下

分析okhttp3-retrofit2-截流某音通信数据

然后就拿到了文本

分析okhttp3-retrofit2-截流某音通信数据

在frida利用JavaString将字节转为string

let JavaString = Java.use("java.lang.String")let _TypedByteArray = Java.cast(typedInput, TypedByteArray)let results = JavaString.$new(_TypedByteArray.getBytes());

好了分析完毕!

其实在分析过程中找到了一个Cronet的开关,这个函数hook->return false,同样可以降级抓包

hook代码星球见,星球好久没更新要被骂了

04

算法还原

分析okhttp3-retrofit2-截流某音通信数据

分析okhttp3-retrofit2-截流某音通信数据

分析okhttp3-retrofit2-截流某音通信数据

添加好友回复:交流群

戳  “阅读原文" 了解青果网络~

原文始发于微信公众号(爬虫逆向小林哥):分析okhttp3-retrofit2-截流某音通信数据

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月17日23:06:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分析okhttp3-retrofit2-截流某音通信数据https://cn-sec.com/archives/3280333.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息