在当今的技术领域,逆向工程有着重大意义,但其中也存在诸多痛点。比如逆向过程中获取block参数信息,传统方法就是个老大难,这就是我们今天要深入探讨的价值点。
抖音逆向的前期准备
首先进行逆向操作时,工具的选择和操作步骤很关键。就拿抖音来说,第一步在PP助手下载砸壳后的抖音ipa,这是基础的素材准备。然后用MonkeyDev进行class - dump获取头文件,之后还得让它在手机上运行起来。这每一步都像是搭建积木,缺了哪块都不行,而且这些操作都要有对应的技术知识,不是随便就能搞定的。这是逆向操作万里长征的第一步,每一个环节都得小心翼翼,不然就会前功尽弃。像在这个环境搭建的过程中,如果有哪一个工具或者哪一个步骤出了问题,后面想要获取block的参数信息就无从谈起了。
抖音逆向检测阻碍
然而逆向的路上总是充满坎坷。抖音做了逆向检测,直接强制弹框并跳转到App Store。这就像突然挡在面前的一堵墙,把你前进的路截断了。那打击是相当大的,之前做的准备好像都要白费了。试过不同的方法来解决这个弹框问题,有的方法完全不行,通过很多摸索之后用Reveal查看,才发现抖音是用了UIAlertController来做这个检测。这时候心里的情绪很复杂,好不容易找到了问题根源。
播放界面分析与调整
接着对抖音播放界面进行分析,在手机上使用FLEXible这个工具进行探索。发现播放页面控制器是AWEFeedTableViewController。有些属性一看命名就很符合程序猿的套路,尝试后发现果然不错,这么顺利让自己有了点小惊喜。同时观察头文件后发现了与播放下一个相关的一些方法,这些发现就像是在一片黑暗中找到了一盏盏灯。顺着这些发现摸索下去,就有可能找到最终想要获得的信息,这一过程需要足够的耐心和细心,不然很容易错过重要的线索。
实现自动播放下一个视频猜想的验证
经过分析猜到视频播放器是AWEAwemePlayVideoViewController,这里就可以通过发送通知来实现播放下一个视频。在每个视频播放完的时候通知AWEFeedTableViewController播放下一个。再用已知的获取当前index的方法(- (long long)currentIndex;)进行验证,发现结果正确的时候,那种喜悦就像是探险者找到了宝藏。整个过程需要把之前分析的各种点串联起来,如果中间断开那是没法得到正确结果的。
设置界面增加自动播放控制开关
在设置界面要增加控制是否自动播放下一个视频的开关按钮。这也是为了满足有时候想看看评论或者重复观看一个视频的用户需求。使用FLEXible观察设置界面布局和属性是必经之路。发现设置界面的逻辑关系后,知道使用AWESettingsTableViewController的父类AWESettingBaseViewController中的- (void)refreshView;方法来增加设置项非常合适。这些操作都是基于大量的测试和对界面逻辑的精准分析,如果不了解其中的逻辑,是很难准确操作的。
快速获取block参数信息的更好方法
最后重点来了,就是如何快速获取block的参数信息。传统的使用debugserver + lldb的方法,有很明显的缺点,比如说计算麻烦,配置复杂容易出错等。而在论坛上无意间发现的通过CTObjectiveCRuntimeAdditions来获取就快很多。这就像是走在狭窄拥挤的老路突然发现了一条宽敞的新大路。它节省了很多时间,降低了操作的复杂度,对于逆向工作者来说可是一大福音。
你有没有在逆向工程中遇到过类似很麻烦的问题?希望你分享自己的经历或者给这篇文章点赞、分享。