文章旨在学习和记录,若有侵权,请联系删除

文章目录

  • 前言
  • 一、抓包
  • 二、逆向
    • 1. 定位接口
    • 2. 分析请求
    • 3. 模拟请求
      • 1.建立sekiro连接
      • 2.完善Handler
        • 2.1 构造接口请求
        • 2.2 构造回调响应
  • 三、测试
  • 总结

前言

本期主要是结合前面所讲的平头哥和sekiro,进行一个实例演示

通过重打包APP的方式注入sekiroRPC框架,分析推荐接口

若不太了解平头哥和sekiro,可移步往期博文介绍
平头哥:https://blog.csdn.net/m0_51159233/article/details/126694304
sekiro:https://blog.csdn.net/m0_51159233/article/details/126770751

使用的app版本是6.87


一、抓包

直接使用小黄鸟开始抓包,发现目标接口

二、逆向

1. 定位接口

用jadx打开app,全局搜索链接路径 api/sns/v6/homefeed,搜索结果如图


从上图框住的部分来看,根据特征可以看出这是 RxJava+Retrofit+okhttp3的网络请求框架

意味着只要找到queryHomeFeed接口的用例,然后进行Hook以及RPC的注入,就能够通过本地rpc来调用这个接口了

2. 分析请求

右键queryHomeFeed,点击查找用例,只有一个方法调用了,跟进来

可以发现,函数return的这一行就是发起推荐页请求的代码

return ((ExploreService) b.f55128c.a(ExploreService.class)).queryHomeFeed(str10, str11, str12, b, i2, ordinal, format, str13, str14, a, str15, str16, str17, str18, i3);

接下来我们在平头哥框架中实现下这一行代码

3. 模拟请求

1.建立sekiro连接

先新建一个平头哥项目

指定入口类XhsEntry,然后建立sekiro连接

2.完善Handler

2.1 构造接口请求

新建XhsHandler类,接着对上文提到的app发请求的这行代码进行实现

return ((ExploreService) b.f55128c.a(ExploreService.class)).queryHomeFeed(str10, str11, str12, b, i2, ordinal, format, str13, str14, a, str15, str16, str17, str18, i3);

我们来分解一下这行代码

    1 ((ExploreService) b2 .c3 .a(ExploreService.class))4 .queryHomeFeed(str, str2, str3, b, i2, ordinal, format, str4, str5, a, str6, str7, str8, str9, i3);

1 实现类 – b

Class<?> retrofitClass = RposedHelpers.findClass("n.d0.m0.b.b", RatelToolKit.hostClassLoader);

2 获取对象 – c

Object retrofitApiManager = RposedHelpers.getStaticObjectField(retrofitClass, "c");

3.1 构造参数 – ExploreService.class

Class<?> exploreServiceClass = RposedHelpers.findClass("com.xingin.matrix.explorefeed.model.ExploreService", RatelToolKit.hostClassLoader);

3.2 调用 – b.c.a(ExploreService.class)

Object exploreService = RposedHelpers.callMethod(retrofitApiManager, "a", exploreServiceClass);

4.1 构造请求参数
接口用到的参数变量大部分都能与所在方法n.d0.j0.l.g.d.a传进来的参数一致,不过需要处理下对应关系

用平头哥Hook n.d0.j0.l.g.d.a方法,将参数常量直接拿来使用

需要注意的是,第4和第8这两个参数要进行构造

// arg4 --  String b = h.b();
Class<?> hClass = RposedHelpers.findClass("n.d0.j0.l.j.h", RatelToolKit.hostClassLoader);
String traceId = (String) RposedHelpers.callStaticMethod(hClass, "b");// arg8 --  int a = e.b().a("config_personalization", 1)
Class<?> eClass = RposedHelpers.findClass("n.d0.y1.y0.e", RatelToolKit.hostClassLoader);
Object e = RposedHelpers.callStaticMethod(eClass, "b");
Integer personalization = (int) RposedHelpers.callMethod(e, "a", "config_personalization", 1);

4.2 调用/发出retrofit请求

Object rxJavaObsevable = RposedHelpers.callMethod(exploreService, "queryHomeFeed",
str, str2, str3, traceId , i2, ordinal, format, str4, str5, personalization, str6, str7, str8, str9, i3
);

注意替换上n.d0.j0.l.g.d.a方法Hook出的对应参数,以及构造出来的traceIdpersonalization

2.2 构造回调响应

寻找 RxJava+Retrofit+okhttp3框架的回调方法:
1. 在回调接口处跟进返回的Observable类中

2. 搜索 “abstract” 找到 subscribe 方法

3. 跟进 参数类(具有onNext、onError等方法的类)
上图中的x进去

4. 对类s.a.x进行动态代理
并且在onNext方法中注入sekiro

 // 动态代理  --Class<?> ObserverClass = RposedHelpers.findClass("s.a.x", RatelToolKit.hostClassLoader);Object observer = Proxy.newProxyInstance(ObserverClass.getClassLoader(), new Class[]{ObserverClass}, new InvocationHandler() {private String TAG = "xhsHook";@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (method.getDeclaringClass() != ObserverClass) {//Object hashcode,toStringreturn method.invoke(this, args);}if (method.getName().equals("onNext")){// onNext 参数就是返回的响应sekiroResponse.success(args[0]);return null;}if (method.getName().equals("onError")){Throwable throwable = (Throwable) args[0];Log.i(TAG, "error: ", throwable);sekiroResponse.failed(-1, throwable);return null;}return null;}});

5. 调用第2步的 b 方法订阅

RposedHelpers.callMethod(rxJavaObsevable, "b", observer);

回调响应构造完成

三、测试

  1. 启动sekiro服务 cmd输入 ./sekiro.bat
  2. 安装写好的平头哥插件到手机上
  3. 打开app
  4. 访问本地rpc接口:http://127.0.0.1:5620/business-demo/invoke?group=xhs0812&action=XhsHandler

至此,数据获取成功。


总结

本文主要分析了平头哥和sekiro结合的一个实例操作

分析了如何使用平头哥和sekiro对 RxJava+Retrofit+okhttp3安卓请求框架进行RPC注入

对于xhs其他接口,如搜索接口,评论接口啥的,只要是使用RxJava+Retrofit+okhttp3请求框架的都可以尝试下这个思路

对平头哥和sekiro不太了解的可以参考下这两篇文章:

平头哥介绍与使用:https://blog.csdn.net/m0_51159233/article/details/126694304
sekiro介绍与使用:https://blog.csdn.net/m0_51159233/article/details/126770751

安卓逆向 - sekiro实战某app相关推荐

  1. 安卓逆向例子--某菠菜APP token pwd 参数

    我最近发现有很多小伙伴拿我上一次写的博客的东西进行盈利,就....以后不写大厂的吧. 本文只涉及 静态分析,建议无基础的同学,自行补足Java 基础,不要盲目的跳高,更不可眼高手低.  附APP样本例 ...

  2. 安卓逆向(x车app,登录token)

    一.抓包分析 随便输入个手机号之后点击登录,通过抓包可以看到这个token值是加密的,那么接下来就找这个token的生成地方 二.静态分析代码 打开jadx(没有的可以去github找找),把apk拖 ...

  3. 安卓逆向009实战分析smali代码破解小游戏(贪吃蛇)

    文章目录 一些小知识 小游戏实践 一些小知识 反编译一个APK,找到他的源码所在地,即smali(原本是dex文件)温馨提示,一个dex就反编译一个smali文件,当dex内的方法超过65535个,就 ...

  4. 安卓逆向基础实战----1.修改APK图标名称

    文章目录 环境 1.替换图标 2.修改应用名称 环境 1.win10 2.雷电模拟器7.1.2 3.AndroidKiller 注意:Apktool 2.4.1 4.APK土豆视频 v6.29.4 1 ...

  5. app安卓逆向x-sign,x-sgext,x_mini_wua,x_umt加密参数解析

    安卓逆向某生鲜平台app 本文仅作为学习交流,禁止用于商业使用 1.背景 阿里系当前采用的加密版本是6.3,6.2版本的大家几乎都解决了,6.3的网上资料很少,这里讲讲6.3的解密过程 1.阿里系通用 ...

  6. 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战

    简单地来说,安卓逆向是对已经打包好的APP进行反编译.源码分析了解APP实现逻辑的一门技术.我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码. ...

  7. android简单app实例_Android安卓小项目实战视频教程集锦

    Android安卓小项目实战视频教程,点击进入视频教程: 一.安卓项目视频教程: 1蓝牙聊天APP介绍-分步骤介绍一个简单安卓蓝牙APP的开发过程 - 西瓜视频 2蓝牙聊天开发流程-分步骤介绍一个简单 ...

  8. 安卓逆向小案例——阿里系某电影票务APP加密参数还原-Unidbg篇

    安卓逆向小案例--阿里系某电影票务APP加密参数还原-Unidbg篇 一.前期准备 使用unidbg还原参数时,首先需要找到指定的native方法和对应的so文件.而锁定生成加密参数的native方法 ...

  9. 安卓逆向Xposed HOOK TB直播APP的x-sign参数

    最近学习安卓逆向,接触一下TB系的APP,了解大厂APP是做数据安全的,这篇文章主要介绍某宝直播APP的签名参数x-sign的HOOK过程,当然,其他的参数也是可以HOOK的.本文只用于学习交流,请勿 ...

最新文章

  1. “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
  2. android .a .so区别,.so,.la和.a库文件有什么区别?
  3. lollipods耳机蓝牙连接方法
  4. 洛谷 - P3358 最长k可重区间集问题(最大费用最大流+思维建边)
  5. [算法天天练] 归并排序
  6. IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa
  7. 简洁后台管理非常简洁
  8. android 360状态栏显示,Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
  9. [转]word 转换成pdf
  10. 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite...
  11. 如何弥补mac系统存在的局限性
  12. 微信小程序下载文件ios无法预览问题--解决方案
  13. iPhone 14 Pro Max拆解:内部元器件供应商名单
  14. win7自定义html为桌面,Win7系统自定义桌面主题的方法
  15. 计算机设置开机背景,电脑开关机背景图片怎么换
  16. oracle磁带库清洁带标签,LTO-1/2/3/4/5/6/7/8 Ultrium数据磁带 清洗带 清洁带 磁带标签批发...
  17. 《舵机控制基本原理》
  18. Ubuntu垃圾箱目录及清空
  19. K8S重启后coredns pod无法正常运行
  20. FaWave(发微)多微博版内测

热门文章

  1. Android合并两个APP的具体做法(掌握)
  2. 编译原理知识点总结——S属性和L属性定义
  3. 逻辑延时环节(DLD)
  4. linux 中ps -ef | grep java命令
  5. linux 正点原子ov5640_【正点原子FPGA连载】第二十六章基于OV5640的二值化实验-摘自【正点原子】领航者 ZYNQ 之嵌入式开发指南 (amobbs.com 阿莫电子论坛)...
  6. SQL Server锁机制浅读
  7. 一文带你彻底了解APP PUSH推送机制
  8. 鸿蒙HarmonyOS 方舟框架ArkUI eTS在一个ability下创建了很多page发现不能到达
  9. 用python编写!!!网页病毒!!!
  10. 【毕设狗】【单片机毕业设计】基于单片机的室内空气质量检测系统的设计