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

這需要替換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

配置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)目):



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

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


接下來(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è)晚上,擦)


3.把deb插件安裝到手機(jī)make install
如上圖,安裝到手機(jī)成功,打開手機(jī),喜馬拉雅頭部的廣告頁(yè)沒廣告了。
再來(lái)個(gè)需求2,去掉紅框的廣告,用tweak編寫代碼

步驟:
1、從reveal知道要修改的是哪個(gè)類,查看頭文件要hook哪個(gè)方法,再編寫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讓配置生效(或者重啟終端)

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/文件夾下
