安卓逆向 - sekiro实战某app
文章旨在学习和记录,若有侵权,请联系删除
文章目录
- 前言
- 一、抓包
- 二、逆向
- 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出的对应参数,以及构造出来的traceId
和 personalization
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);
回调响应构造完成
三、测试
- 启动sekiro服务 cmd输入
./sekiro.bat
- 安装写好的平头哥插件到手机上
- 打开app
- 访问本地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相关推荐
- 安卓逆向例子--某菠菜APP token pwd 参数
我最近发现有很多小伙伴拿我上一次写的博客的东西进行盈利,就....以后不写大厂的吧. 本文只涉及 静态分析,建议无基础的同学,自行补足Java 基础,不要盲目的跳高,更不可眼高手低. 附APP样本例 ...
- 安卓逆向(x车app,登录token)
一.抓包分析 随便输入个手机号之后点击登录,通过抓包可以看到这个token值是加密的,那么接下来就找这个token的生成地方 二.静态分析代码 打开jadx(没有的可以去github找找),把apk拖 ...
- 安卓逆向009实战分析smali代码破解小游戏(贪吃蛇)
文章目录 一些小知识 小游戏实践 一些小知识 反编译一个APK,找到他的源码所在地,即smali(原本是dex文件)温馨提示,一个dex就反编译一个smali文件,当dex内的方法超过65535个,就 ...
- 安卓逆向基础实战----1.修改APK图标名称
文章目录 环境 1.替换图标 2.修改应用名称 环境 1.win10 2.雷电模拟器7.1.2 3.AndroidKiller 注意:Apktool 2.4.1 4.APK土豆视频 v6.29.4 1 ...
- app安卓逆向x-sign,x-sgext,x_mini_wua,x_umt加密参数解析
安卓逆向某生鲜平台app 本文仅作为学习交流,禁止用于商业使用 1.背景 阿里系当前采用的加密版本是6.3,6.2版本的大家几乎都解决了,6.3的网上资料很少,这里讲讲6.3的解密过程 1.阿里系通用 ...
- 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战
简单地来说,安卓逆向是对已经打包好的APP进行反编译.源码分析了解APP实现逻辑的一门技术.我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码. ...
- android简单app实例_Android安卓小项目实战视频教程集锦
Android安卓小项目实战视频教程,点击进入视频教程: 一.安卓项目视频教程: 1蓝牙聊天APP介绍-分步骤介绍一个简单安卓蓝牙APP的开发过程 - 西瓜视频 2蓝牙聊天开发流程-分步骤介绍一个简单 ...
- 安卓逆向小案例——阿里系某电影票务APP加密参数还原-Unidbg篇
安卓逆向小案例--阿里系某电影票务APP加密参数还原-Unidbg篇 一.前期准备 使用unidbg还原参数时,首先需要找到指定的native方法和对应的so文件.而锁定生成加密参数的native方法 ...
- 安卓逆向Xposed HOOK TB直播APP的x-sign参数
最近学习安卓逆向,接触一下TB系的APP,了解大厂APP是做数据安全的,这篇文章主要介绍某宝直播APP的签名参数x-sign的HOOK过程,当然,其他的参数也是可以HOOK的.本文只用于学习交流,请勿 ...
最新文章
- “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
- android .a .so区别,.so,.la和.a库文件有什么区别?
- lollipods耳机蓝牙连接方法
- 洛谷 - P3358 最长k可重区间集问题(最大费用最大流+思维建边)
- [算法天天练] 归并排序
- IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa
- 简洁后台管理非常简洁
- android 360状态栏显示,Android高仿UC浏览器和360手机卫士消息常驻栏(通知栏)
- [转]word 转换成pdf
- 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite...
- 如何弥补mac系统存在的局限性
- 微信小程序下载文件ios无法预览问题--解决方案
- iPhone 14 Pro Max拆解:内部元器件供应商名单
- win7自定义html为桌面,Win7系统自定义桌面主题的方法
- 计算机设置开机背景,电脑开关机背景图片怎么换
- oracle磁带库清洁带标签,LTO-1/2/3/4/5/6/7/8 Ultrium数据磁带 清洗带 清洁带 磁带标签批发...
- 《舵机控制基本原理》
- Ubuntu垃圾箱目录及清空
- K8S重启后coredns pod无法正常运行
- FaWave(发微)多微博版内测
热门文章
- Android合并两个APP的具体做法(掌握)
- 编译原理知识点总结——S属性和L属性定义
- 逻辑延时环节(DLD)
- linux 中ps -ef | grep java命令
- linux 正点原子ov5640_【正点原子FPGA连载】第二十六章基于OV5640的二值化实验-摘自【正点原子】领航者 ZYNQ 之嵌入式开发指南 (amobbs.com 阿莫电子论坛)...
- SQL Server锁机制浅读
- 一文带你彻底了解APP PUSH推送机制
- 鸿蒙HarmonyOS 方舟框架ArkUI eTS在一个ability下创建了很多page发现不能到达
- 用python编写!!!网页病毒!!!
- 【毕设狗】【单片机毕业设计】基于单片机的室内空气质量检测系统的设计