【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: 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]

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







//这里替换好的代码

{

//此处省略一万字

}

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

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

你可能感兴趣的:(破解分析,教程专区,1024程序员节)