nododo1027 发表于 2019-2-13 16:34

iOS逆向-如何让抖音自动播放下一个视频(懒人癌)

## 痛点是什么?

- 在做饭、锻炼等无法腾出双手的场景中,想刷刷抖音

- 刷抖音的时候有太多的广告

### 如何解决痛点

- 抖音自动播放下一个视频
- 纯净模式
- 通过设置页面进行开关控制


## 知识点:如何在逆向中快速获取block的参数信息 ###

## 工具

- MAC
- 越狱手机
- (https://link.juejin.im/?target=https%3A%2F%2Fgithub.com%2FAloneMonkey%2FMonkeyDev)
- (https://revealapp.com/)
- (https://github.com/ebf/CTObjectiveCRuntimeAdditions)
- FLEXible

## 过程

### 1. 在PP助手下载一个砸壳后的抖音ipa

* * *

### 2. 用MonkeyDev进行class-dump,获取到头文件

* * *

### 3. 在手机上运行起来

> 3.1 第一个问题来了,抖音做了逆向检测,强制弹框,跳转至App Store,如下图所示:

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_01.PNG?raw=true)

> 3.2 先去掉这个弹框

>- 思路1: 既然跳转到App Store,先hook ` - (BOOL)openURL:(NSURL*)url; ` 方法
>- 思路2: 在 UIAlertView 上动手脚
>- 思路3: 实在不行就算了,我不玩了还不行😅😅😅

> 3.3 上面的思路1和思路2都试过了,结果不行,最后还是用Reveal看看吧,看完之后,发现思路2猜对了80%,抖音只是用了UIAlertController,哭晕。。。😭😭😭

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_02.PNG?raw=true)

> 3.4 找对了目标,实现起来就很简单了,直接去掉这个弹框

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_03.PNG?raw=true)

* * *

### 4. 实现自动播放下一个视频

> 4.1 在手机上用FLEXible对抖音的播放界面进行分析,发现播放页面控制器为 ` AWEFeedTableViewController `
> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_04.PNG?raw=true)

> 4.2 查看对应头文件

> 4.3 首先映入眼帘的一个属性`@property(nonatomic) _Bool pureMode; ` ,这个就不用过多解释了,程序猿的命名套路,一试便知,果然正确,纯净模式搞定。

> 4.4 观察头文件,与播放下一个相关的方法有以下几个:

>`- (void)didReceiveAutoPlayNotification:(id)arg1; `

>`- (void)playerItemDidReachEnd:(id)arg1; `

>   `- (void)transition_performCustomActionForSlideDirection:(unsigned long long)arg1 gestureRecognizer:(id)arg2; `

> `- (long long)currentIndex; `

> 4.5 尝试了上面提到的所有方法,均无果。最后的最后,灵机一动,发现视频播放器为 `AWEAwemePlayVideoViewController` ,那完全可以在这里发送通知,每个视频播放完的时候通知 ` AWEFeedTableViewController ` 播放下一个就可以了。Nice!这个过程很漫长,但在成功的一瞬间确实很有成就感。
> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_05.PNG?raw=true)

> 4.6 验证上面的猜想,结果正确,这里用到了上面提到的:`- (long long)currentIndex; ` ,获取当前index,然后播放下一个。

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_06.PNG?raw=true)

> 4.7 感想:方向若是错误,停止就是进步

* * *

### 5. 在设置界面,增加开关按钮,控制是否需要自动播放下一个,因为有时候需要看看评论,重复观看一个视频。

> 5.1 用FLEXible观察设置界面界面布局及其属性,发现设置界面的逻辑关系为:
> - `AWESettingsTableViewController`
> - `AWEGeneralSettingViewModel`
> - `AWESettingSectionModel`
> - `AWESettingItemModel`

> 5.2 `AWESettingsTableViewController`的父类 AWESettingBaseViewController 有一个方法名为: `- (void)refreshView;` 这个方法用来增加设置项最好不过。


> 5.3 这里涉及到一个很重要的知识点,就是快速获取block的参数信息。网上好多资料都是使用 debugserver + lldb 的方法,[参考文章](http://www.swiftyper.com/2016/12/16/debuging-objective-c-blocks-in-lldb/), 这种方法的缺点很明显:计算麻烦,需要配置,容易出错。我在逛论坛是无意间发现了一个更快捷的方法就是通过 `CTObjectiveCRuntimeAdditions` 快速获取block的参数信息。它的原理就是根据LLVM文档,把block重新实现了一遍,然后获取内部参数。

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_07.PNG?raw=true)

> 5.4 通过这种方法,发现`AWESettingItemModel`里的
`@property(copy, nonatomic) CDUnknownBlockType switchChangedBlock;` 参数信息:参数个数为 1, 类型为 BOOL, [参考文档](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html),备注:第0个参数为系统自用,不予考虑。

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_08.PNG?raw=true)
> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_09.PNG?raw=true)
> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_010.PNG?raw=true)

> 5.5 综上所述,功能实现,效果展示:

> ![](https://github.com/Nododo/HookDouYin/blob/master/IMG/IMG_011.gif?raw=true)

### 6. (https://github.com/Nododo/HookDouYin)

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

### 问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力,你耗费的时间越长,说明有越多的人最终还是没有想明白(路越长走到底的人越少)。

nododo1027 发表于 2019-2-13 16:35

本帖最后由 nododo1027 于 2019-2-14 16:22 编辑

说点题外话,本人是靠混水区升级过的,后来积分规则调整又降级了,于是过年期间憋了这篇文章,大家多多交流,顺便评个分就更好不过了~

那笨蛋是我 发表于 2019-3-4 16:53

很强,赞一个

abea 发表于 2019-2-14 00:24

问题在想通了之后总是简单的,问题的困难程度不在于想通了之后还觉得有多难,而在于从你觉得它难到你觉得它简单需要耗费多少思维体力,你耗费的时间越长,说明有越多的人最终还是没有想明白(路越长走到底的人越少)。

九月风行 发表于 2019-2-13 16:59

路越长走到底的人越少

孤独色的夜 发表于 2019-2-13 16:59

看到懒人癌的我自动滚了进来~{:301_997:}

王小劣 发表于 2019-2-13 17:07

本帖最后由 王小劣 于 2019-2-13 17:31 编辑

很不错,支持楼主.

另外学习到了获取Block 的参数的简便方法 感谢.

caijunqill 发表于 2019-2-13 17:19

虽然看不懂还是要赞一个

w5645060 发表于 2019-2-13 17:25

。。。。懒到家了

YAO21 发表于 2019-2-13 17:30

感谢分享

_小白 发表于 2019-2-13 17:55

虽然看不懂还是要赞一个

zhanghaozhen 发表于 2019-2-13 18:18

很赞同楼主说的最后一句话,同时也学习了心得思路,感谢
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: iOS逆向-如何让抖音自动播放下一个视频(懒人癌)