逆向3(Theos)

theos簡介

theos是一個越獄開發(fā)包,下載安裝簡單编矾,Logos語法簡單,編譯發(fā)布簡單,另一個越獄工具iOSOpenDev被整合到了Xcode中蹂匹,Theos并未整合到Xcode中.

theos安裝
  • 指定xcode
    如果Mac上有安裝多個版本的Xcode怒详,則需要使用xcode-select命令指定一個活動Xcode
//查看xcode SDK版本
xcodebuild -showsdks
//xcode的版本信息
xcodebuild -version
//打印目前使用我的工具Xcode的版本
xcode-select --print-path
//指定xcode
sudo xcode-select -switch /Applications/Xcode5.1.1/Xcode.app
  • 安裝dpkg和LDID
    dpkg是Theos依賴的工具之一踪区,dpkg是Debian Packager的縮寫缎岗。我們可以使用dpkg來制作deb白粉,Theos開發(fā)的插件都將會以deb的格式進(jìn)行發(fā)布的。所以我在安裝Theos之前要安裝dpkg, 當(dāng)然此處我們使用強(qiáng)大的brew來完成dpkg的安裝眷细。
    LDID是越獄祖師爺Saurik公司開發(fā)的一款二進(jìn)制授權(quán)管理軟件溪椎,可以對越獄應(yīng)用進(jìn)行SHA1運(yùn)算生成授權(quán),讓軟件包可以在iPhone上執(zhí)行沼侣。在Theos開發(fā)插件中歉秫,iOS文件的簽名是使用ldid工具來完成的雁芙,也就是說ldid取代了Xcode自帶的Codesign。
    brew install dpkg ldid
  • 安裝theos
cd  /usr/local/opt/
sudo git clone --recursive https://github.com/theos/theos.git theos 
cd ~
//如果沒有./bash_profile文件,那么就用vim編輯來創(chuàng)建一個 
//命令來創(chuàng)建,并且用編輯模式在里面添加兩行
sudo vim .bash_profile 
export THEOS=/usr/local/opt/theos 
export PATH=/usr/local /opt/theos/bin/:$PATH
//測試是否安裝成功
nic.pl
tweak創(chuàng)建谎碍、編譯椿浓、打包與安裝

分下面四步:
(1)nic.pl創(chuàng)建

配置好theos后闽晦,選擇iphone/tweak
Project Name (required): 工程名稱
Package Name [com.yourcompany.firsttweak]: deb包的名字(類似于bundle identifier)                     
Author/Maintainer Name [zl]: 作者
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: tweak作用對象的bundle identifier
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:tweak安裝完成后需要重啟的應(yīng)用

創(chuàng)建后會在文件夾內(nèi)默認(rèn)生成四個文件

  • Makefile
Makefile文件指定工程用到的文件仙蛉、框架、庫等信息夯巷,將整個過程自動化哀墓。其內(nèi)容說明如下(NIC表示項(xiàng)目名稱)

include $(THEOS)/makefiles/common.mk 
#固定寫法篮绰,不要更改。TWEAK_NAME = NIC #Tweak名稱跟control文件中的”Name“字段對應(yīng)臀突,一般不要更改(但我注意到贾漏,在創(chuàng)建Tweak的時候并沒有提示要輸入Project Name就默認(rèn)生成了NIC)纵散。

NIC_FILES = Tweak.xm 
#Tweak包含的源文件(不包括頭文件)隐圾,多個文件間以空格分隔翎承,可以按需要更改符匾。

export ARCHS = armv7 arm64 
#默認(rèn)文件未提供。支持的處理器架構(gòu)甸各,多個以空格分隔趣倾。需要注意的是某饰,采用arm64架構(gòu)的App不兼容armv7/armv7s架構(gòu)黔漂,必須適配arm64架構(gòu)的dylib。在絕大多數(shù)情況下牧嫉,這里固定填寫”arm7 arm64“就可以了减途。

TARGET = iphone:Base SDK:Deployment Target 
#指定SDK版本鳍置。如:iphone:8.1:8.0表示指定彩8.1版本的SDK,且發(fā)布對象為iOS8.0及以上版本抖仅。也可以把”Base SDK“設(shè)置為”latest“砖第,指定以Xcode附帶的最新版本SDK編譯梧兼。

export NIC_FRAMEWORKS = framework name 
#默認(rèn)文件未提供智听。導(dǎo)入framework。如:NIC_FRAMEWORKS = UIKit CoreAudio

export NIC_PRIVATE_FRAMEWORKS = private framework name
#默認(rèn)文件未提供惕澎。導(dǎo)入private framework颜骤。如:NIC_FRAMEWORKS = AppSupport ChatKit忍抽。需要注意的是:在導(dǎo)入之前一定要確定導(dǎo)入的private framework確實(shí)存在,因?yàn)閜rivate framework是AppStore開發(fā)所不允許使用的干跛,它的內(nèi)容在每個iOS版本之間可能發(fā)生變化祟绊。如:BaseBoard框架在iOS8以上存在牧抽,在iOS7就沒有。這種情況通過弱鏈接或dlopen()记舆、dlsym()和dlclose()系列函數(shù)動態(tài)調(diào)用private framework來解決泽腮。

export NIC_LDFLAGS = -lx 
#默認(rèn)文件未提供衣赶。鏈接Mach-O對象府瞄。Theos采用GNU Linker來鏈接Mack-O對象,包括.dylib鲸郊、.a和.o货邓。-lx代表鏈接libx.a或libx.dylib换况,即給”x“加上”lib“的前綴盗蟆,以及“.a”或“.dylib”的后綴喳资;如果x是“y.o”的形式腾供,則直接鏈接y.o台腥,不加任何前綴或后綴。如要鏈接libsqlite3.0.dylib察署、libz.dylib和dylib1.o峻汉,這樣寫就行:NIC_LDFLAGS = -lz -lsqlite3.0 -dylib1.o

include $(THEOS_MAKE_PATH)/tweak.mk 
#根據(jù)不同的Theos工程類型休吠,指定不同的.mk文件瘤礁。可以按需更改岩调。

after-install::install.exec "killall -9 SpringBoard" 
#表示在Tweak安裝之后殺掉SpringBoard進(jìn)程号枕,好讓CydiaSubstrate在進(jìn)程啟動時加載對應(yīng)的dylib陨享。
  • Tweak.xm
    用Theos創(chuàng)建tweak工程抛姑,默認(rèn)生成的源文件是Tweak.xm《ㄏ酰“xm”中的“x”代表這個文件支持Logos語法坑傅,如果后綴名是單獨(dú)一個“x”,說明源文件支持Logos和C語法喷斋;如果后綴名是“xm”唁毒,說明源文件支持Logos和C/C++語法
    關(guān)于Logos,請參考 http://iphonedevwiki.net/index.php/Logos

  • control

control文件記錄了deb包管理系統(tǒng)所需的基本信息星爪,會被打包進(jìn)deb包里浆西。基本字段說明:

Package:
用于描述這個deb包的名字顽腾,采用的命名方式同bundle identifier類似近零,均為反向DNS格式抄肖【眯牛可以按需更改。

Name:
用于描述這個工程的名字漓摩,可以按需更改裙士。

Depends:
用于描述這個deb包的“依賴”」鼙校“依賴”指的是這個程序運(yùn)行的基本條件腿椎,可以填寫固件版本或其它程序,如果當(dāng)前iOS不滿足“依賴”中定義的條件夭咬,則此tweak無法正常運(yùn)行啃炸。如:Depends:mobilesubstrate,firmware(>=8.0)表示當(dāng)前iOS版本必須在8.0以上,且必須安裝CydiaSubstrate才能正常運(yùn)行這個tweak卓舵,可以按需更改南用。

Version:用于描述這個deb包的版本號,可以按需更改掏湾。
Architecture:用于描述deb包安裝的目標(biāo)設(shè)備架構(gòu)裹虫,不要更改。
Description:是deb包的簡介忘巧,可以更改恒界。
Maintainter:用于描述deb包的維護(hù)人,可以按需更改砚嘴。
Author:用于描述tweak的作者十酣,可以按需更改。
Section:用于描述deb包所屬的程序類別际长,不要更改耸采。
  • NIC.plist
該plist文件的作用和App中的Info.plist類似,它記錄了一些配置信息工育,描述了tweak的作用范圍虾宇。通過Xcode打開該文件,我們可以看到它的最外層是一個Dictionary如绸,只有一個名為“Filter”的鍵嘱朽。Filter下是一系列Array旭贬,可以分為三類:

Bundle:指定若干bundle為tweak的作用對象。如:com.apple.springboard

Classes:指定若干class為tweak的作用對象搪泳。如:NSString

Executables:指定若干可執(zhí)行文件為tweak的作用對象稀轨。如:callservicesd

這三類Array可以混合使用,但當(dāng)Filter下有不同類的Array時岸军,需要添加一個“Mode: Any”鍵值對奋刽。當(dāng)Filter下的Array只有一類時,不需要添加艰赞。

(2)make編譯
(3)make package打包

問題1:

dpkg-deb: error: obsolete compression type 'lzma'; use xz instead

  • 原因:
    原因是dpkg有兩個不同的版本佣谐,最新版本不支持lzma。
  • 解決辦法:兩種
    第一種:修改配置文件
cd /usr/local/opt/theos/makefiles/package
sudo vim deb.mk 
將下面的變量改為(第六行)
_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip

第二種:降級

$ brew remove dpkg 
$ brew install --force-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb  
$ brew pin dpkg  
問題二

make[2]: Nothing to be done for `internal-library-compile'.

  • 解決辦法
    按照問題1的解決辦法來

如果出錯要看更多信息方妖,使用下面的命令
make package messages=yes
(4)make install安裝

安裝會讓你輸入兩次iphone密碼 , 默認(rèn)是alpine

  • 也可以一步到位 make package install 直接編譯, 打包, 安裝
再次執(zhí)行make package install之前需要清理之前生成的文件狭魂,
否則將安裝不成功。執(zhí)行以下命令達(dá)到清理的目的:
make clean
rm -rf ./obj ./packages

也可以在MakeFile里面配置
clean::
    rm -rf ./packages/* ./obj
這樣執(zhí)行make clean就可以了
安裝方式

1.如果沒有配置makefile,那么 make install就沒法使用吁断,需要手動執(zhí)行安裝

//編譯打包
make
make package
//其實(shí)下面的過程就是make package做的事
cd packages
//將生成的包拷貝到iphone的tmp目錄
scp com.iosre.testtweak_0.0.1-18+debug_iphoneos-arm.deb root@192.168.0.101:/tmp
//連接iPhone后去到tmp目錄趁蕊,就可以看到包
//安裝
iPhone:/tmp root# dpkg -i com.iosre.testtweak_0.0.1-18+debug_iphoneos-arm.deb
//如果hook的是springboard,就重啟一下,才能看到效果
 killall -9 SpringBoard
  1. 自動安裝(寫腳本)

deb包里面的結(jié)構(gòu):DEBIAN目錄 和 軟件具體安裝目錄(模擬安裝目錄)(如etc, usr, opt, tmp等)仔役。

在DEBIAN目錄中至少有control文件掷伙,還可能有postinst(postinstallation)、postrm(postremove)又兵、preinst(preinstallation)任柜、prerm(preremove)、copyright (版權(quán))沛厨、changlog (修訂記錄)和conffiles等宙地。

  • control文件:
    描述軟件包的名稱(Package),版本(Version)逆皮,描述(Description)等宅粥,是deb包必須劇本的描述性文件,以便于軟件的安裝管理和索引电谣。
  • prerm文件:軟件卸載前需要執(zhí)行的腳本秽梅。
  • postinst文件
    包含了軟件在進(jìn)行正常目錄文件拷貝到系統(tǒng)后,所需要執(zhí)行的配置工作剿牺。內(nèi)容( 軟件安裝完后企垦,執(zhí)行該Shell腳本,一般用來配置軟件執(zhí)行環(huán)境晒来,必須以“#!/bin/sh”為首行钞诡,然后給該腳本賦予可執(zhí)行權(quán)限:chmod +x postinst):
# !/bin/sh
echo "my deb" >/home/mydeb.log
  • postrm文件:
    軟件卸載后需要執(zhí)行的腳本。內(nèi)容( 軟件卸載后,執(zhí)行該Shell腳本荧降,一般作為清理收尾工作接箫,必須以“#!/bin/sh”為首行,然后給該腳本賦予可執(zhí)行權(quán)限:chmod +x postrm)
# !/bin/sh
rm -rf /home/mydeb.lo
其他
  • 安裝deb包
    dpkg -i com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
  • 查看deb包信息(其實(shí)也就是control文件的信息 )
    dpkg -I com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
  • 查看deb包目錄結(jié)構(gòu)
    dpkg -c com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
  • 刪除安裝的deb包
先dpkg -I XXX.deb,找到 Package: com.iosre.autoTwaek
然后 dpkg -r com.iosre.autoTwaek
  • 查看日志
tail -f /var/log/syslog 
//查看指定日志
tail -f /var/log/syslog | grep SpringBoard
如果出現(xiàn) -sh: tail: command not found
去到Cydia,搜索Core Utilities誊抛,安裝
還要安裝syslogd: apt-get install syslogd
control + c  //退出查看
  • 常用Logos語法簡介:
%hook 指定需要hook的類名列牺,以%end結(jié)尾
%log 用來打印log的,將信息輸入到syslog中,如%log((NSString *)@"ZeluLi")
%orig 執(zhí)行被hook函數(shù)的原始代碼拗窃,類似于super.method功能
%group 該指令用于%hook的分組,%group后邊跟的是組名泌辫,%group也是必須以%end結(jié)尾随夸,其中可以包含多個%hook
%init 該指令用來初始化某個%group,一個group只有被初始化后才可生效震放,init必須在hook中進(jìn)行執(zhí)行宾毒。
%ctor tweak的構(gòu)造器,用來初始化殿遂,如果不顯式定義诈铛,Theos就會自動生成一個%ctor,并在其中調(diào)用%init(_ungrouped). 如:%ctor { %init(_ungrouped)}
%new 該指令用來給現(xiàn)有的class添加一個新的函數(shù)。與Runtime中的class_addMethod相同墨礁。
%c 該指令用來獲取一個類的名稱幢竹,類似于objc_getClass。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恩静,一起剝皮案震驚了整個濱河市焕毫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驶乾,老刑警劉巖邑飒,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異级乐,居然都是意外死亡疙咸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門风科,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撒轮,“玉大人,你說我怎么就攤上這事丐重∏徽伲” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵扮惦,是天一觀的道長臀蛛。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么浊仆? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任客峭,我火速辦了婚禮,結(jié)果婚禮上抡柿,老公的妹妹穿的比我還像新娘舔琅。我一直安慰自己,他們只是感情好洲劣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布备蚓。 她就那樣靜靜地躺著,像睡著了一般囱稽。 火紅的嫁衣襯著肌膚如雪郊尝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天战惊,我揣著相機(jī)與錄音流昏,去河邊找鬼。 笑死吞获,一個胖子當(dāng)著我的面吹牛况凉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播各拷,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刁绒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撤逢?” 一聲冷哼從身側(cè)響起膛锭,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚊荣,沒想到半個月后初狰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡互例,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年奢入,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳叨。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腥光,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出糊秆,到底是詐尸還是另有隱情武福,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布痘番,位于F島的核電站捉片,受9級特大地震影響平痰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伍纫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一宗雇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莹规,春花似錦赔蒲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至母市,卻和暖如春砾嫉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窒篱。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舶沿,地道東北人墙杯。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像括荡,于是被迫代替她去往敵國和親高镐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容

  • iOS 越獄的Tweak開發(fā) 原文鏈接在我的博客 https://yohunl.com/ios-yue-yu-de...
    yohunl閱讀 16,399評論 20 34
  • 一畸冲、介紹及安裝 1.簡介 Theos是一個越獄開發(fā)包嫉髓。與其它工具相比,它的特點(diǎn)就是簡單:下載安裝簡單邑闲、Logos語...
    華南虎閱讀 10,866評論 5 52
  • Theos安裝與配置 Theos是一個越獄開發(fā)工具包算行,使用它可以創(chuàng)建Tweak項(xiàng)目,動態(tài)Hook第三方程序苫耸。Git...
    樂Coding閱讀 7,745評論 5 5
  • 2017年3月5日州邢,驚蟄。 “驚蟄過褪子,暖和和量淌,蛤蟆老角唱山歌”。 驚蟄時節(jié)嫌褪,暖意潮涌呀枢。一不留神,自然已偷換了布景笼痛。...
    心花朵朵閱讀 188評論 2 1
  • 2017年10月14日裙秋,如是家人(蓮花遍智)吳宗澤琅拌,種種子第75天。 發(fā)心:我今不僅僅是為了我個人而聞思修残吩,更是為...
    吳宗澤閱讀 206評論 1 2