九、喜馬拉雅FM

本次的需求1:去掉播放頁(yè)的廣告:(經(jīng)過(guò)驗(yàn)證,不是一整個(gè)紅框都是廣告)

XMNowPlayingPicView這個(gè)類需要hook



這需要替換app中的方法實(shí)現(xiàn),也就是hook。

工具安裝:

一般來(lái)說(shuō)為了更方便hook,會(huì)安裝個(gè)工具——theos:https://github.com/theos/theos

先安裝個(gè) 簽名工具ldid

brew install ldid

其實(shí)XCode也可以簽名的。

環(huán)境變量配置

有些路徑需要經(jīng)常用到,所以寫成全局變量,放在.bash_profile中,這樣每次重啟終端,.bash_profile文件中的指令都會(huì)先執(zhí)行一遍。

vim .bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH

讓.bash_profiel配置的環(huán)境變量立即?生效:方式一:重新打開終端;方式二:source ~/.bash_profile


下載theos

不建議直接在github上點(diǎn)擊『Download ZIP』,如果這樣做的話,里面有個(gè).gitmodules文件,該文件中的子模塊文件不會(huì)下載下來(lái)。

所以推薦的方式是:遞歸下載(這樣就可以把子模塊文件也下載下來(lái)),放在~/theos文件夾中,這是theos推薦的。

git clone --recursive https://github.com/theos/theos.git $THEOS
theos安裝好了


配置PATH

我們需要用nic.pl創(chuàng)建項(xiàng)目來(lái)進(jìn)行hook操作,但是這個(gè)命令在~/theos/bin目錄下,并不是在~/usr/local/bin或~/usr/bin下,怎么辦呢?

能不能放在后者兩個(gè)目錄呢?其實(shí)最好還是不要這樣放,因?yàn)閺膖heos拿走后,nic.pl可能要訪問theos中的其他東西,可能就找不到theos了。

但是又希望在任何一個(gè)地方都能使用這個(gè)指令,怎么辦呢?其實(shí)只要把~/theos/bin目錄變成跟~/usr/local/bin或~/usr/bin一樣的性質(zhì)就行了。如何做到這一點(diǎn)呢?配置到PATH這個(gè)環(huán)境變量中的文件夾,在任何地方敲指令都可以好使了。

在.bash_profile中添加?xùn)|西vim ~/.bash_profile,添加PATH變量,但是不能這樣寫export PATH=~/theos/bin,這樣會(huì)覆蓋掉~/usr/local/bin和~/usr/bin目錄,要將他們加起來(lái)。

export PATH=~/theos/bin:/usr/local/bin:/usr/bin(用:冒號(hào)拼接隔開)

但是我們并不確定除開上面三個(gè)目錄還有沒有別的指令目錄,所以也不能這么寫,要引用以前的PATH:

export PATH=~/theos/bin:$PATH(拼接上以前的PATH,引用環(huán)境變量的值)

但是上面已經(jīng)配置過(guò)export THEOS=~/theos了,為了統(tǒng)一,所以:

export PATH=$THEOS/bin:$PATH

打印環(huán)境變量看下,發(fā)現(xiàn)不止上面提到的三個(gè)文件夾

FengdeMacBook-Pro:~ fengluo$ echo $PATH
/Users/fengluo/theos/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin


source命令

有可能剛配置完,執(zhí)行echo $THEOS得到的結(jié)果是空的;執(zhí)行echo $PATH得到的結(jié)果中也沒有theos/bin,這時(shí)候解決的辦法是:
執(zhí)行source .bash_profile指令,意思是讓.bash_profile文件馬上生效。

所以以后修改了.bash_profile文件,就要對(duì)這個(gè)文件做下source操作。


編寫tweak代碼

配置完環(huán)境變量后,通過(guò)nic.pl來(lái)創(chuàng)建tweak項(xiàng)目(也就是hook項(xiàng)目):

創(chuàng)建tweak項(xiàng)目
獲取appid
有四個(gè)文件
編輯Makefile:

需要配置些變量,文件夾拖拽到sublime中:

修改Makefile
編寫Tweak.xm:

從本文最開始的需求可知,我們要hook XMNowPlayingPicView這個(gè)類,喜馬拉雅app頭文件拖拽至sublime,command+p,搜索找到XMNowPlayingPicView.h:

找到需要hook的方法
編寫Tweak.xm

接下來(lái)對(duì)寫的代碼進(jìn)行 編譯 安裝 操作,步驟:
1.來(lái)到tingtweak文件夾下,執(zhí)行make,利用makefile里面的指令來(lái)編譯;

2.make package

發(fā)現(xiàn)有Error:

open2: exec of lzma -c0 failed at /Users/fengluo/theos/bin/dm.pl line 113.
make: *** [internal-package] Error 2

在網(wǎng)上找了好些辦法,都沒用,什么打開dm.pl注釋掉兩行什么代碼,抱歉,根本沒那兩行代碼。經(jīng)過(guò)自己在$THEOS/vendor/dm.pl/dm.pl$THEOS/makefiles/package/deb.mk這兩個(gè)文件中修改兩個(gè)地方,試來(lái)試去:

最終在deb.mk文件紅框處修改后,就不報(bào)錯(cuò)了,而是報(bào)警告,警告先不管了:(打包階段報(bào)的這個(gè)錯(cuò),搞了兩個(gè)晚上,擦)

終于打包成功,安裝到手機(jī)也成功
生成了一個(gè)deb插件

3.把deb插件安裝到手機(jī)make install

如上圖,安裝到手機(jī)成功,打開手機(jī),喜馬拉雅頭部的廣告頁(yè)沒廣告了。


再來(lái)個(gè)需求2,去掉紅框的廣告,用tweak編寫代碼

步驟:
1、從reveal知道要修改的是哪個(gè)類,查看頭文件要hook哪個(gè)方法,再編寫tweak;

確定要hook的方法
編寫tweak

2、編譯打包安裝
make clean
cd /Users/fengluo/Desktop/tweak/tingtweak
make
make package
make install

3、查看手機(jī),達(dá)到目的


再來(lái)個(gè)需求3,去掉紅框的廣告,用tweak編寫代碼

2、編譯打包安裝
make clean
cd /Users/fengluo/Desktop/tweak/tingtweak
make
make package
make install

3、查看手機(jī),達(dá)到目的


總結(jié)步驟:
一、安裝簽名工具ldid

brew install ldid

二、修改環(huán)境變量量

2.1 編輯?用戶的配置?文件
vim ~/.bash_profile
2.2 在.bash_profie?文件后?面加?入以下2?行行
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH // 讓THEOS/bin的命令可以在任何地方敲
2.3 讓.bash_profiel配置的環(huán)境變量量?立即?生效
source ~/.bash_profile

三、下載theos

git clone --recursive https://github.com/theos/theos.git $THEOS

四、新建tweak項(xiàng)?

4.1 cd到一個(gè)存放項(xiàng)目代碼的文件夾(?比如桌面)
4.2 選擇iphone/tweak的序號(hào)
4.3 填寫項(xiàng)?目信息

五、編輯Makefile

在前面加入環(huán)境變量,寫清楚通過(guò)哪個(gè)IP和端口訪問手機(jī),THEOS_DEVICE_IP和THEOS_DEVICE_PORT

如果不希望每個(gè)項(xiàng)目的Makefile都編寫IP和端口環(huán)境變量,也可以添加到用戶配置文件中,編輯完畢后,$ 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
  • 安裝(默認(rèn)會(huì)?自動(dòng)重啟SpringBoard)
    make install
八、可能遇到的問題

。。。


如何卸載插件

在手機(jī)Library/MobileSubstrate/DynamicLibraries/文件夾下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容