九、喜马拉雅FM

本次的需求1:去掉播放页的广告:(经过验证,不是一整个红框都是广告)

XMNowPlayingPicView这个类需要hook



这需要替换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
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项目):

创建tweak项目
获取appid
有四个文件
编辑Makefile:

需要配置些变量,文件夹拖拽到sublime中:

修改Makefile
编写Tweak.xm:

从本文最开始的需求可知,我们要hook XMNowPlayingPicView这个类,喜马拉雅app头文件拖拽至sublime,command+p,搜索找到XMNowPlayingPicView.h:

找到需要hook的方法
编写Tweak.xm

接下来对写的代码进行 编译 安装 操作,步骤:
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文件红框处修改后,就不报错了,而是报警告,警告先不管了:(打包阶段报的这个错,搞了两个晚上,擦)

终于打包成功,安装到手机也成功
生成了一个deb插件

3.把deb插件安装到手机make install

如上图,安装到手机成功,打开手机,喜马拉雅头部的广告页没广告了。


再来个需求2,去掉红框的广告,用tweak编写代码

步骤:
1、从reveal知道要修改的是哪个类,查看头文件要hook哪个方法,再编写tweak;

确定要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让配置生效(或者重启终端)

image.png
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/文件夹下

你可能感兴趣的:(九、喜马拉雅FM)