看了一篇对某某视频逆向,■■缓存功能的文章,很是好奇,跟着做了一下,然而出现了点问题,先致敬一下原作者:http://esoftmobile.com/2014/04/06/video-app-reverse/
进入搜狐视频的播放页面后,用reveal定位到包含缓存按钮的地方,

发现这是一个LongVideoDetailTVHeaderView,到Xcode里,在class-dump到的头文件里找到这个类,

发现里面有一个downloadWithuButton的方法,觉得点击缓存按钮时触发的可能就是这个方法,于是用hopper找到了这个方法的地址,然后用lldb配合debugserver在这个方法上下了断点,点击缓存按钮,程序暂停,确定就是这个方法响应了点击事件。


点击后弹出“该视频由于版权问题无法下载”,于是猜测类里管理了一个视频对象,对象里包含了视频能否下载的属性以及版权信息,于是再到类里翻看,果然找到了一个

于是再到这个类里去看有没有视频信息。

看到这里确实有videoAlbum,然后在头文件里找videoAlbum的相关信息,很快在它的一个extend里找到了canbeDownload的属性:

于是编写tweak,改了canBeDownLoaded,以上基本就是教程的原作者做的事情了。这里留了个心眼,因为弹窗里提到版权问题,而原作者写教程是两年多前的时候,头文件里应该还没有提到过版权。仔细读VideoAlbum.h,发现一个hasCopyRight,于是一起改掉了,还发现一个isValidVideoAlbum属性,虽然不知道具体干什么的,但也一起改掉了,写出了这样的tweak:

make package install到手机上,可是再次打开搜狐,发现缓存的按钮还是灰的,点击还是会说由于版权问题无法下载。。
怀疑方法是不是没有执行,于是又hook了canBeSubscribed属性,把它改成YES,然而把这个方法hook掉之后发现就真的能收藏了,就觉得写的tweak应该是执行了的,可能影响到视频能否缓存的还有其他因素。然后就又回到LongVideoDetailHeaderViewModel类里,看到里面有几个shareStatus,downloadStatus属性,觉得这些东西和button的状态多少会有些关联吧,就先cycript进搜狐视频,找到这个model,看看当前这些值为什么:

发现downloadStatus为2,shareStatus为0,于是猜测0代表可以点击,非0不可以点击,就想到hook这个属性,把它直接改成0:

重新编译然后执行,再次打开视频播放页面然后cycript进去,打印出现在的downloadStatus属性:

发现再次运行时downloadStatus的值还是2,就觉得很奇怪,我愿意相信视频的能否download还会由其他因素决定,可是第二次hook的只是model里的一个属性,为什么这个属性的值也不会被改动呢,不知道是因为我的tweak写的有问题还是搜狐视频做了什么防护。
求大神指点一下我是什么地方出了问题,谢谢~