本次的需求1:去掉播放页的广告:(经过验证,不是一整个红框都是广告)
这需要替换app中的方法实现,也就是hook。
工具安装:
一般来说为了更方便hook,会安装个工具——theos:https://github.com/theos/theos
先安装个 签名工具ldid:
brew install ldid
其实XCode也可以签名的。
环境变量配置
有些路径需要经常用到,所以写成全局变量,放在.bash_profile
中,这样每次重启终端,.bash_profile
文件中的指令都会先执行一遍。
vim .bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
让.bash_profiel配置的环境变量立即⽣生效:方式一:重新打开终端;方式二:source ~/.bash_profile
下载theos
不建议直接在github上点击『Download ZIP』,如果这样做的话,里面有个.gitmodules文件,该文件中的子模块文件不会下载下来。
所以推荐的方式是:递归下载(这样就可以把子模块文件也下载下来),放在~/theos文件夹中,这是theos推荐的。
git clone --recursive https://github.com/theos/theos.git $THEOS
配置PATH
我们需要用nic.pl创建项目来进行hook操作,但是这个命令在~/theos/bin目录下,并不是在~/usr/local/bin或~/usr/bin下,怎么办呢?
能不能放在后者两个目录呢?其实最好还是不要这样放,因为从theos拿走后,nic.pl可能要访问theos中的其他东西,可能就找不到theos了。
但是又希望在任何一个地方都能使用这个指令,怎么办呢?其实只要把~/theos/bin目录变成跟~/usr/local/bin或~/usr/bin一样的性质就行了。如何做到这一点呢?配置到PATH这个环境变量中的文件夹,在任何地方敲指令都可以好使了。
在.bash_profile中添加东西vim ~/.bash_profile
,添加PATH变量,但是不能这样写export PATH=~/theos/bin
,这样会覆盖掉~/usr/local/bin和~/usr/bin目录,要将他们加起来。
export PATH=~/theos/bin:/usr/local/bin:/usr/bin
(用:冒号拼接隔开)
但是我们并不确定除开上面三个目录还有没有别的指令目录,所以也不能这么写,要引用以前的PATH:
export PATH=~/theos/bin:$PATH
(拼接上以前的PATH,引用环境变量的值)
但是上面已经配置过export THEOS=~/theos
了,为了统一,所以:
export PATH=$THEOS/bin:$PATH
打印环境变量看下,发现不止上面提到的三个文件夹
FengdeMacBook-Pro:~ fengluo$ echo $PATH
/Users/fengluo/theos/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
source命令
有可能刚配置完,执行echo $THEOS
得到的结果是空的;执行echo $PATH
得到的结果中也没有theos/bin,这时候解决的办法是:
执行source .bash_profile
指令,意思是让.bash_profile文件马上生效。
所以以后修改了.bash_profile文件,就要对这个文件做下source
操作。
编写tweak代码
配置完环境变量后,通过nic.pl来创建tweak项目(也就是hook项目):
编辑Makefile:
需要配置些变量,文件夹拖拽到sublime中:
编写Tweak.xm:
从本文最开始的需求可知,我们要hook XMNowPlayingPicView这个类,喜马拉雅app头文件拖拽至sublime,command+p,搜索找到XMNowPlayingPicView.h:
接下来对写的代码进行 编译 安装 操作,步骤:
1.来到tingtweak文件夹下,执行make
,利用makefile里面的指令来编译;
2.make package
发现有Error:
open2: exec of lzma -c0 failed at /Users/fengluo/theos/bin/dm.pl line 113.
make: *** [internal-package] Error 2
在网上找了好些办法,都没用,什么打开dm.pl注释掉两行什么代码,抱歉,根本没那两行代码。经过自己在$THEOS/vendor/dm.pl/dm.pl
和$THEOS/makefiles/package/deb.mk
这两个文件中修改两个地方,试来试去:
最终在deb.mk文件红框处修改后,就不报错了,而是报警告,警告先不管了:(打包阶段报的这个错,搞了两个晚上,擦)
3.把deb插件安装到手机make install
如上图,安装到手机成功,打开手机,喜马拉雅头部的广告页没广告了。
再来个需求2,去掉红框的广告,用tweak编写代码
步骤:
1、从reveal知道要修改的是哪个类,查看头文件要hook哪个方法,再编写tweak;
2、编译打包安装
make clean
cd /Users/fengluo/Desktop/tweak/tingtweak
make
make package
make install
3、查看手机,达到目的
再来个需求3,去掉红框的广告,用tweak编写代码
2、编译打包安装
make clean
cd /Users/fengluo/Desktop/tweak/tingtweak
make
make package
make install
3、查看手机,达到目的
总结步骤:
一、安装签名工具ldid
brew install ldid
二、修改环境变量量
2.1 编辑⽤用户的配置⽂文件
vim ~/.bash_profile
2.2 在.bash_profie⽂文件后⾯面加⼊入以下2⾏行行
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
// 让THEOS/bin的命令可以在任何地方敲
2.3 让.bash_profiel配置的环境变量量⽴立即⽣生效
source ~/.bash_profile
三、下载theos
git clone --recursive https://github.com/theos/theos.git $THEOS
四、新建tweak项⽬
4.1 cd到一个存放项目代码的文件夹(⽐比如桌面)
4.2 选择iphone/tweak的序号
4.3 填写项⽬目信息
五、编辑Makefile
在前面加入环境变量,写清楚通过哪个IP和端口访问手机,THEOS_DEVICE_IP和THEOS_DEVICE_PORT
如果不希望每个项目的Makefile都编写IP和端口环境变量,也可以添加到用户配置文件中,编辑完毕后,$ source ~/.bash_profile让配置生效(或者重启终端)
vim ~/.bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
source ~/.bash_profile
六、编写代码
打开Tweak.xm文件
%hook XMAdAnimationViewTwo
- (id)initWithFrame:(struct CGRect)arg1 {
return nil;
}
%end
%hook XMSoundPatchImageView
- (id)initWithFrame:(struct CGRect)arg1 {
return nil;
}
%end
七、编译-打包-安装
- 编译
make
- 打包成deb
make package
- 安装(默认会⾃自动重启SpringBoard)
make install
八、可能遇到的问题
。。。
如何卸载插件
在手机Library/MobileSubstrate/DynamicLibraries/
文件夹下