第一次寫Tweak酵熙,走進(jìn)iOS逆向的世界
起因:公司的一產(chǎn)品由于是外包做的轧简,代碼不知道在哪,今天老板臨時(shí)說要加個(gè)功能匾二,但是現(xiàn)在沒有代碼哮独,問我能搞不拳芙,當(dāng)時(shí)說試試看,然后就開始了逆向之旅皮璧,最終很簡(jiǎn)單解決了問題舟扎,菜鳥第一次上手,勿見笑恶导,(其實(shí)以前我就有看逆向,只是沒時(shí)間去試驗(yàn)浸须,今天剛好有機(jī)會(huì)惨寿,接下來開始正文)
先說一下需要實(shí)現(xiàn)的功能,老板說要在登錄頁面加個(gè)按鈕來實(shí)現(xiàn)一個(gè)跳轉(zhuǎn)功能
第一步:上AppStore下載軟件
下載好了之后首先打開軟件看了一下,是原生删窒,不是H5(不然真不會(huì)加),然后習(xí)慣性的用Reveal查看了一下App結(jié)構(gòu),這不看不知道裂垦,一看就給了我一個(gè)驚喜,原來別人已經(jīng)把那個(gè)功能寫出來了肌索,按鈕都寫在那了蕉拢,只是Hidden掉了,那我的目的就成了把這個(gè)按鈕給顯示出來就行了.
第二步:砸殼(破解)
因?yàn)槲覀兇虬鰜淼膇pa上傳到AppStroe后都是被經(jīng)過加密的诚亚,被套了個(gè)殼(不知這樣表達(dá)是否準(zhǔn)確),用class dump是導(dǎo)不出頭文件的(只能導(dǎo)出一個(gè)空的.h文件),砸殼工具是dumpdecrypted,下載后解壓(只有3個(gè)文件),放到一個(gè)好找的文件夾中,我的位置為/Users/jj/Movies/iOSRE/dumpdecrypted-master
然后cd進(jìn)這個(gè)目錄執(zhí)行make晕换,結(jié)束后會(huì)多出2個(gè)文件,一個(gè).dylib一個(gè).o
dylib就是我們用來砸殼的錘子
- ssh連接手機(jī)(由于我的手機(jī)是10.2版本,用yalu越獄的時(shí)候自己手賤裝了openSSH站宗,導(dǎo)致無法用wifi連接闸准,經(jīng)過多種方式,找到了個(gè)用USB連接的方式,大家可以用wifi或者USB,都可以),我介紹一下用USB連接的方法
打開終端輸入
brew install usbmuxd
如果你電腦上沒有安裝brew梢灭,也很簡(jiǎn)單夷家,也是一句話
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后再安裝usbmuxd庫就行了
安裝成功如圖
然后新開個(gè)終端輸入
iproxy 4567 22
以上命令是把當(dāng)前連接設(shè)備的22端口映射到電腦的4567端口上,繼而來連接SSH
插上手機(jī)后另開終端輸入
ssh -p 4567 root@127.0.0.1
127.0.0.1也可以換成localhost,如果是直接用wifi連接的話敏释,命令是
ssh root@xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx是你手機(jī)的IP地址(要保證與電腦在同一局域網(wǎng))
如果是第一次連接库快,會(huì)如下圖
輸入yes,按回車后會(huì)要求你輸入密碼,默認(rèn)密碼是:alpine,注意這里輸入密碼是不會(huì)顯示星號(hào)的钥顽,輸入完成后自己按回車即可(建議把默認(rèn)的密碼修改了)
出現(xiàn)這樣就代表ssh已經(jīng)連接成功了义屏,可以開始下一步了
打開你需要砸殼的軟件,然后在終端輸入
ps -e
圖左邊紅框是進(jìn)程PID蜂大,右邊畫橫線的就是我要砸殼的app路徑,可以看上面新浪微博的app湿蛔,直接看名字就能看出自己要找的app
先用scp命令把我們的錘子傳到設(shè)備上(app路徑就是紅線畫的那里)
scp 路徑/dumpdecrypted.dylib root@xxx.xxx.xxx.xxx:/app路徑
這里是把錘子傳到要砸殼的app的Document目錄下(好像不一定非是這個(gè)目錄),網(wǎng)上大多數(shù)都這樣說县爬。
然后cd到Document目錄輸入
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/executable
執(zhí)行完成后會(huì)在當(dāng)前目錄生成XXX.decrypted 可執(zhí)行文件;
然后用scp再傳回電腦即可
- 這里再說一種方式阳啥,使用Clutch來破解,我寫這篇文章的時(shí)候就用的這種方式
先下載最新版的Clutch然后將其導(dǎo)入到手機(jī)中,可以用scp财喳,我用pp助手直接拖拽的察迟,比較方便斩狱,路徑是/usr/bin
然后cd到/usr/bin目錄下執(zhí)行
Clutch-2.0.4 -i
如果顯示Permisson Deny,輸入chmod a+x Clutch-2.0.4提升權(quán)限然后再執(zhí)行-i就可以了
然后輸入
Clutch-2.0.4 -d 43
我這里輸入43是因?yàn)槲乙平獾腶pp前面的數(shù)字是43,如果百度糯米是1就輸1
如圖就是已經(jīng)破解完成了扎瓶,DONE后面就是破解后ipa的路徑所踊,可以用pp助手等工具或者scp導(dǎo)出到電腦,至此第二步砸殼算是完成了概荷。
第三步:導(dǎo)出頭文件
導(dǎo)出頭文件的工具是Class-dump,下載后點(diǎn)擊安裝把
/usr/local/bin
目錄下
然后終端輸入
class-dump
得到下圖則是安裝成功
如果上面你是用dumpdecrypted砸殼的秕岛,那么最后得到的是xxx.decrypted文件,導(dǎo)出頭文件的命令為
class-dump -H XXX.decrypted -o OUTPUT_PATH
OUTPUT_PATH是輸出路徑误证,就是你導(dǎo)出的頭文件放哪里!xxx.decrypted是路徑而不是名字
如果用的是Clutch破解的話继薛,最后導(dǎo)出的是ipa文件,這里需要右鍵ipa選擇歸檔打開愈捅,然后解壓出個(gè)文件夾遏考,點(diǎn)擊進(jìn)去進(jìn)入Payload文件夾,會(huì)看到一個(gè)與.app文件蓝谨,與app同名灌具,然后選擇右鍵顯示包內(nèi)容咖楣,在里面找到一個(gè)執(zhí)行文件芦昔,與app同名
然后終端執(zhí)行導(dǎo)出頭文件命令
劃紅線的2個(gè)地方分別是執(zhí)行文件的絕對(duì)路徑和輸入文件夾的絕對(duì)路徑瘪松,直接拖拽進(jìn)終端就會(huì)自動(dòng)填寫
這就是我們導(dǎo)出來的頭文件
第四步:寫Tweak了
- 先安裝dpkg和ldid,終端執(zhí)行
brew install dpkg ldid
如果沒有安裝brew的宵睦,去上面復(fù)制命令安裝
- 安裝Thoes 終端執(zhí)行
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos
/opt/theos是安裝路徑墅诡,可以自己改
然后修改/opt/theos的權(quán)限(位置不一樣的要記得改成自己的路徑)
sudo chown $(id -u):$(id -g) /opt/theos
很重要的一步,配置環(huán)境變量,在~./目錄下有個(gè)隱藏文件(開啟隱藏文件的命令請(qǐng)自行搜索)名字叫.bash_profile烟馅,如果你沒有這個(gè)文件然磷,可以自己手動(dòng)建立一個(gè),在終端分別執(zhí)行
cd ~ touch .bash_profile
然后在其中加上
export THEOS=/opt/theos export PATH=/opt/theos/bin/:$PATH
這里有個(gè)注意點(diǎn)姿搜,如果說你本身沒有.bash_profile文件捆憎,是自己新建的,要注意在終端執(zhí)行
source ~/.bash_profile
這樣環(huán)境變量才會(huì)立即生效梭纹,不然輸入
nic.pl
會(huì)提示
-bash: nic.pl: command not found
安裝成功的效果是
建立Tweak,一般選擇11的iphone/tweak躲惰,有的人可能不是11,按后面的選
建立的時(shí)候cd到個(gè)空文件夾里变抽,到時(shí)候生成文件的時(shí)候才好找
Project Name:為你的tweak名
Package Name:包名,可以直接回車
Author/Maintainer Name:也可以直接回車础拨,會(huì)取你當(dāng)前的Mac登錄用戶名
obileSubstrate Bundle filter:你的Tweak想給特定的app使用就寫那個(gè)app的Bundle id,我就直接寫com.apple.UIKit代表所有app都能調(diào)用這個(gè)Tweak
List of applications to terminate upon installation:直接回車
出現(xiàn)done就ok了
目錄下會(huì)出現(xiàn)4個(gè)文件
####想思路绍载,怎么寫這個(gè)Tweak
* 因?yàn)榘粹o其實(shí)都有了诡宗,我只需要把按鈕的hidden = NO就行了!,而這個(gè)按鈕所在的控制器我們需要
通過Reveal或者用Cycript(以后說這個(gè))來找,先說簡(jiǎn)單的逛钻,直接用reveal查看頁面
如圖僚焦,這就是我要找的控制器锰提,直接去剛剛導(dǎo)出的頭文件里找這個(gè)控制器文件曙痘,文件內(nèi)容如圖
其中的scanBtn就是被隱藏的按鈕,我要把它顯示出來立肘,方法就很簡(jiǎn)單了边坤,直接在ViewDidLoad里調(diào)用一下這個(gè)btn.hidden = NO即可,我們開始寫Tweak
雙擊打開Tweak.xm文件谅年,刪除其中所有的東西輸入
%hook XXLoginViewController
- (void)viewDidLoad {
%orig;
}
%end
其中%hook后面的就是我們要修改的控制器類
下面的就是我們要修改的函數(shù),%orig是代表執(zhí)行函數(shù)本身的功能,我們只是在其基礎(chǔ)上添加功能茧痒,所以不能影響程序本身的功能,不調(diào)用%orig的話相當(dāng)于viewDidLoad里就沒有任何東西了,只會(huì)運(yùn)行我們自己tweak里寫的方法!
由于這個(gè)類使用了synthesize旺订,所以我用self獲取不到btn的屬性区拳,直接寫也獲取不到btn屬性,我就將這個(gè)類給改動(dòng)了一下
由于我改動(dòng)了這個(gè)類笆凌,所以我需要將我改動(dòng)過的這個(gè)類導(dǎo)入到tweak里去來保證tweak不會(huì)編譯報(bào)錯(cuò)
方法是把改動(dòng)的類放到和tweak.xm同一目錄下,然后在tweak.xm里導(dǎo)入
所以tweak.xm變成下面這樣了
#import “XXLoginViewController.h”
%hook XXLoginViewController
- (void)viewDidLoad {
self.scanBtn.hidden = NO;
%orig;
}
%end
現(xiàn)在Tweak目錄下是這樣的
cd進(jìn)這個(gè)目錄執(zhí)行
make package
如果遇到我這種報(bào)錯(cuò)的話,使用sudo命令編輯這個(gè)文件(路徑不同的自己修改)
sudo vi /opt/theos/makefiles/package/deb.mk
然后重新回來打包
這次就直接打包成功了,左邊那個(gè)就是我們打包出來的deb跪妥,用pp助手等軟件傳到手機(jī)任何位置
然后用ifile這類管理軟件點(diǎn)擊打開安裝,然后打開我們的軟件就能看到效果了纽疟!
至此污朽,結(jié)束蟆肆!
文中如有錯(cuò)誤,還望指出!
這次的東西比較淺蛇损,以后慢慢深入學(xué)習(xí)淤齐!
后面有空我會(huì)寫一下怎么將dylib打包到ipa中然后重簽名安裝到未越獄的手機(jī)上