本文以一个简单的栗子,带你入门iOS逆向开发。提纲如下:
我们的需求是去除招商银行掌上生活App卡金融模块的浮动广告,如下图所示
最终达到的效果如下图所示
逆向开发环境搭建可参考笔者上篇相关文章,此外还需安装签名工具ldid
brew install ldid
安装theos到电脑的~/theos目录下
git clone --recursive https://github.com/theos/theos.git $THEOS
其中$THOSE是个环境变量,终端键入如下命令:vim ~/.bsah_profile,然后追加以下四行
export THEOS=~/thoes
export PATH=$THEOS/bin:$PATH
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10012
最后两个环境变量在Tweak项目中需要用到,表示用电脑的10012端口同iPhone的22端口通信。
安装Clutch,使用说明可参考官网,此处不做介绍。下面开始干活了。
一、脱壳、导出头文件
利用MJ大神的逆向工具MJAppTools,可以方便列出手机上的App信息。
如上图所示,可以看到掌上生活App的安装路径及Bundle ID。Mac登录iPhone,将掌上生活App脱壳,clutch -d App序列号或者Bundle ID
clutch -d com.cmbchina.cmblife
接着就将其脱壳了,如下图所示
在上图所示目录下找到脱壳后的App包,拷贝到电脑的某个目录(/Users/你的电脑名/Desktop/reverse/CMBLife),然后cd到此目录,利用class-dump导出脱壳后的App包头文件。
class-dump -H cmblife -o Headers
二、明确需求,找到目标文件
利用Reveal可以迅速找到目标文件,本文利用mjcript找到目标文件。
如上找到目标控制器,然后遍历它的根视图的所有子制图
MJSubviews(#0x14680cca0.view)
如上,可以猜想浮动的广告控件就是蓝色框中的那个视图。也就是要hook的那个类。我们可以通过如下方式简单地验证就是此视图,设置其hidden属性看手机上显示与否。
三、新建Tweak项目、编写代码
cd到/Users/你的电脑名/Desktop/reverse/CMBLife,新建工程
nic.pl
填写项目信息,诸如Project Name、Package Name等。
打开Tweak.xm文件,编写代码,hook目标文件CMBDPFloatAdView
将其初始化方法返回nil就可达到需求目标
四、编译、打包、安装
1)编译:执行make命令,创建了obj文件夹
2)打包:执行make package命令,生成package文件夹,存放deb文件
,3)安装:执行make install安装deb文件
安装完毕会重启SpringBoard,此后在Cydia中会看到刚刚安装的插件
再次打开掌上生活App就没有浮动广告了。至此,一个完整插件就简单地开发完毕。逆向开发的基本流程大致如此。当然这其中还有些具体的、复杂的流程,本文不做介绍,希望可以起到抛砖引玉的作用。基本套路就是脱壳、导出头文件、静态分析、动态调试、编写代码、编译、安装、打包。