本章的实例综合运用了Cycript、IDA和LLDB工具,在没有严格推导微信代码逻辑的情况下完成了tweak的原型搭建工作。大致的分析思路是这样的。
1.在小视频播放窗口添加长按手势
因为微信本身已经在小视频播放窗口添加了长按手势,所以没有必要重新发明轮子,只需要找到长按手势的响应函数,然后hook它就可以了。用Reveal很容易就可定位小视频播放窗口,从而找到长按手势的响应函数。值得一提的是,找到的函数在长按后会被连续调用2次,导致相同的代码重复执行,效率不高。在撰写tweak的过程中要考虑到这种情况,用简单的条件判断把2次重复调用简化为1次调用。
2.在C里寻找小视频对象
虽然MVC设计标准里约定了可以通过C访问M,但是在本例中,C里并没有出现比较明显的访问M的方法。因此本章从最基本的tableView:cellForRowAtIndexPath:数据源函数入手,在IDA里找到了可疑的cell数据源,并通过观察头文件的方式定位到小视频对象,最终提取出了想要的信息。或许不那么严谨,但是在达到目标的基础上节省了时间,这个结果也还不错!