【iOS逆向与安全】某音App直播间自动发666 和 懒人自动看视频

1.目标
由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就花了几分钟做了一个。
2.操作环境
越狱iPhone一台

frida

mac

 3.流程

下载最新某音App


既然是发送消息,那关键词 sendmessage 则是我们的切入点

..................

详情上一篇,当app 版本在20.7.0做的测试,但升级到最新版以后无法使用了

【iOS逆向与安全】插件开发之某音App直播间自动发666_ios and Android的博客-CSDN博客文章浏览阅读1k次。由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就花了几分钟做了一个。https://ccccc.blog.csdn.net/article/details/133138838

 现在就来升级一下

当时是通过 initWithStore 来初始化,获取对象,发现新版不走这个方法,导致无法使用

- (HTSLiveCommentFragment *)initWithStore:(id)arg1

用 Frida 查看启动流程

frida-trace -UF -m "-[HTSLiveCommentFragment *]"

 发现是走的 componentBindService

//new  最新版

7015 ms  -[HTSLiveCommentFragment componentBindService]

7387 ms  -[HTSLiveCommentFragment componentCreate]

 换上代码即可,消息6666 再次回归

- (void)componentBindService{
    %orig;//直播不弹出输入法
    liveComm = self;
    liveCommentFragment = self;
}

%end

消息虽然可以发,但是发现新版已经不走旧的方法了

-[HTSLiveCommentFragment sendComment:6666666666 commentContext:<IESLiveCommentContext: 0x283bdf640> completion:0x0]

新版是通过 IESLiveCommentContext 对象发送,并不能直接输入文本了。

虽然看到传入了 666666 文本,修改他并不会生效,需修改IESLiveCommentContext对象

 具体实现,发送 123456789

+(void)sendMsgTest2:(HTSLiveCommentFragment*)lcf
{
    
    
    IESLiveCommentContext * liveCommentContext = [[NSClassFromString(@"IESLiveCommentContext") alloc] initWithState:0 enterFrom:0 type:0];
    [liveCommentContext setPublicScreenID:-1];
    [liveCommentContext setPublicScreenType:0x0];
    [liveCommentContext setCurrentState:0x1];
    [liveCommentContext setDisplayedText:@"666"];
    [liveCommentContext setPlainText:@"123456789"];
    
    [lcf sendComment:@"" commentContext:liveCommentContext completion:0x0];
    
    
}

首先百度一波

  • 在做饭无法腾出双手,想刷刷抖音,怎么办?

  • 懒人癌,抖音自动播放下一个视频

 最后发现一篇52文章iOS逆向-如何让某音自动播放下一个视频(懒人癌)icon-default.png?t=N7T8https://www.52pojie.cn/thread-865083-1-1.html

 我就照着代码搬了下了,显怀激动的打开,然儿并没有反应.....……v_v

没办法,那就看看前辈是怎么实现的,应该是版本升级,某些类名发生变化,修复应该很快。

//- (void)_addNotifications;
CHOptimizedMethod0(self, void, AWEFeedTableViewController, _addNotifications) {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playNext) name:VideoPlayEndedNotiName object:nil];
    CHSuper0(AWEFeedTableViewController, _addNotifications);
}

CHDeclareMethod0(void, AWEFeedTableViewController, playNext) {
    if ([[NSUserDefaults standardUserDefaults] boolForKey:OpenAutoPlay] == NO) {
        return;
    }
    UITableView *tableView = [self valueForKey:@"_tableView"];
    NSIndexPath *path = [NSIndexPath indexPathForRow:self.currentPlayIndex +1 inSection:0];
    [tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}


CHDeclareClass(AWEVideoPlayerController)

CHOptimizedMethod1(self, void, AWEVideoPlayerController, playerItemDidReachEnd, id, arg1) {
    NSLog(@"--------------------------------");
    [[NSNotificationCenter defaultCenter] postNotificationName:VideoPlayEndedNotiName object:nil];
    CHSuper1(AWEVideoPlayerController, playerItemDidReachEnd, arg1);
}

 

...................

经过分析,发现前辈是通过 hook 播放页面 _addNotifications方法,注册一个通知。

然后再 hook 视频播放完毕方法 playerItemDidReachEnd ,发送通知到 播放页面,调用系统自带方法切换在一个视频。

好了

既然知道了原理,代码不是生效,那就肯定是 【注册通知】或【视频播放完毕】没有hook 到。

上 frida 一探究竟

frida-trace -UF -m "*[* _addNotifications]"

frida-trace -UF -m "*[* playerItemDidReachEnd]"

 运行后发现, 是类名变了,幸好方法名还好使。

-[TTVideoEngineOwnPlayer playerItemDidReachEnd]

-[AWEAwemeDetailTableViewController _addNotifications]

替换上以后,完美运行,你也赶快试试吧~







//这里替换好的代码

{

//此处省略一万字

}

总结,引用《暗时间》里的一段话:

让你自己成为一个持续学习和思考的人,并只写你真正思考和总结之后的产物,其他一切就会随之而来。 
问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力,你耗费的时间越长,说明有越多的人最终还是没有想明白(路越长走到底的人越少)。 
所以,如果你习惯了思考问题,就总会有东西写,先有思考,然后有总结,然后在总结中进一步思考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/103102.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

循环队列c语言版

一、循环队列结构体 typedef int QueueDataType; #define CQ_MAX_SIZE 10typedef struct CircularQueue {QueueDataType data[CQ_MAX_SIZE];/**标记队列首*/QueueDataType head;/**标记队列尾部*/QueueDataType rear;} CircularQueue; 二、循环队列操作函数声明 /**创建队…

身份证读卡器ubuntu虚拟机实现RK3399 Arm Linux开发板交叉编译libdonsee.so找不到libusb解决办法

昨天一个客户要在RK3399 Linux开发板上面使用身份证读卡器&#xff0c;由于没有客户的开发板&#xff0c;故只能用本机ubuntu虚拟机来交叉编译&#xff0c;用客户发过来的交叉编译工具&#xff0c;已经编译好libusb然后编译libdonsee.so的时候提示找不到libusb&#xff0c;报错…

使用GoogleNet网络实现花朵分类

一.数据集准备 新建一个项目文件夹GoogleNet&#xff0c;并在里面建立data_set文件夹用来保存数据集&#xff0c;在data_set文件夹下创建新文件夹"flower_data"&#xff0c;点击链接下载花分类数据集https://storage.googleapis.com/download.tensorflow.org/exampl…

交换机基础(四):MSTP负载均衡配置案例

如图所示是某个企业内部核心网络的结构图&#xff0c;目前企业中有20个VLAN, 编号为VLAN1&#xff5e;VLAN20, 为了确保内部网络的可靠性&#xff0c;使用 了冗余链路和MSTP 协议。为了能更好地利用网络资源和带宽&#xff0c;现管理员希望通过配置MSTP 的负载均衡实现网络带宽…

MySQL---表的增查改删(CRUD基础)

文章目录 什么是CRUD&#xff1f;新增&#xff08;Create&#xff09;单行数据 全列插入多行数据 指定列插入 查询&#xff08;Retrieve&#xff09;全列查询指定列查询查询字段为表达式起别名查询去重查询排序查询条件查询分页查询 修改&#xff08;Update&#xff09;删除&…

运维 | 使用 Docker 安装 Jenkins | Jenkins

运维 | 使用 Docker 安装 Jenkins | Jenkins 前言 本期内容主要是为了学习如何通过 Docker 安装Jenkins&#xff0c;仅作为记录与参考&#xff0c;希望对大家有所帮助。 准备工作 系统&#xff1a;CentOS 7.9配置&#xff1a;4c8g 快速安装 下面以 Docker 方式安装 Jenkin…

DCU上如何运行大模型以及用到的docker命令

第一步&#xff1a;需要连接到官方(https://developer.hpccube.com/)提供的vpn 第二步&#xff1a;通过termius进入到项目 第三步&#xff1a;遇到问题 1.docker空间太小了&#xff0c;得换地方&#xff1a;参考这个centos设置docker 目录_mob64ca12f73101的技术博客_51CTO博…

【Qt样式(qss)-5】qss混乱,错乱,不生效的一种原因

前言&#xff1a; 之前写过一些关于qss的文章&#xff1a; 【Qt样式&#xff08;qss&#xff09;-1】手册小结&#xff08;附例&#xff1a;软件深色模式&#xff09;_深蓝色主题qss表-CSDN博客 【Qt样式&#xff08;qss&#xff09;-2】使用小结&#xff08;软件换肤&#…

算法、语言混编、分布式锁与分布式ID、IO模型

一、算法初识 数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构&#xff08;数据的组织形式&#xff09;&#xff0c;写的程序逻辑就是算法。 算法是指用来操作数据、解决程序问题的一组方法。 对于同一个问题&#xff0c;使用不同的算法&#xff0c;也…

实验六:DHCP、DNS、Apache、FTP服务器的安装和配置

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置&#xff0c;在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接&#xff1a;linux安装jdk8详细步骤-CSDN博客 Jdk来源&#xff1a;linu…

【Docker】Docker学习之一:离线安装Docker步骤

前言&#xff1a;基于Ubuntu Jammy 22.04 (LTS)版本安装和测试 1、Docker安装 1.1、离线安装 步骤一&#xff1a;官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz步骤二&#xff1a;解压安装包; tar -zxvf docker…

java中的异常,以及出现异常后的处理【try,catch,finally】

一、异常概念 异常 &#xff1a;指的是程序在执行过程中&#xff0c;出现的非正常的情况&#xff0c;最终会导致JVM的非正常停止。 注意: 在Java等面向对象的编程语言中&#xff0c;异常本身是一个类&#xff0c;产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的…

光流法动目标检测

目录 前言 一、效果展示 二、光流法介绍 三、代码展示 总结 前言 动目标检测是计算机视觉领域的一个热门研究方向。传统的方法主要基于背景建模&#xff0c;但这些方法对于光照变化、遮挡和噪声敏感。因此&#xff0c;研究人员一直在寻找更加鲁棒和有效的技术来解决这一问题。…

IAR For ARM 安装教程

电脑环境 安装包下载 1、官网下载 ①搜索 IAR ②切换产品&#xff0c;选择Arm ③选择IAR Embedded Workbench for Arm ④免费试用 2、网盘下载 EWARM-CD-8202-14838.exe(访问密码: 1666) https://url48.ctfile.com/f/33868548-961057458-611638?p1666 软件下载 1、点击安…

WPF中的绑定知识详解(含案例源码分享)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Flask后端开发(一)-基础知识和前期准备

目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…

13.4web自动化测试(Selenium3+Java)

一.定义 用来做web自动化测试的框架. 二.特点 1.支持各种浏览器. 2.支持各种平台(操作系统). 3.支持各种编程语言. 4.有丰富的api. 三.工作原理 四.搭环境 1.对照Chrome浏览器版本号,下载ChromeDriver,配置环境变量,我直接把.exe文件放在了jdk安装路径的bin文件夹下了(j…

LSM Tree 深度解析

我们将深入探讨日志结构合并树&#xff0c;也称为LSM Tree&#xff1a;这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构&#xff0c;例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…

分享10个创意满满的产品设计网站

在当今的互联网时代&#xff0c;新颖性和创造力是最受关注的&#xff0c;无论一个产品有多好&#xff0c;但没有创意的包装都很难“看到太阳”。因此&#xff0c;创意产品的设计非常重要&#xff0c;今天小将为您带来10个非常有创意的产品设计网站。话不多说&#xff0c;上干货…

越流行的大语言模型越不安全

源自&#xff1a;GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估&#xff0c;结果发现越流行的大语言模型越危险。 近日&#xff0c;安全研究人员用OpenSSF记分卡对GitHub上50个最流…