一丶.tweak在Objective-C中的工作方式
tweak指的是對(duì)電子系統(tǒng)進(jìn)行輕微調(diào)整來增強(qiáng)其功能的工具;
在iOS中绞呈,tweak特指那些能夠增強(qiáng)其他進(jìn)程功能的dylib收恢,是越獄iOS的最重要組成部分旦装。
iOS是由一個(gè)個(gè)小的組件構(gòu)成的泥栖,這些組件其實(shí)就是一個(gè)個(gè)對(duì)象,
在Objective-C里幸斥,我們稱對(duì)象的功能為“方法”峭拘,“方法”的具體行為則稱為“實(shí)現(xiàn)”俊庇。
在Objective-C里,方法和實(shí)現(xiàn)的關(guān)系不是在編譯時(shí)決定的鸡挠,而是在運(yùn)行時(shí)決定的辉饱。
“對(duì)象、方法和實(shí)現(xiàn)的關(guān)系拣展,就是tweak大做文章的地方鞋囊。”
二丶tweak的編寫套路
2.1編寫tweak會(huì)用到C瞎惫、C++和Objective-C三種語言
2.2定位目標(biāo)文件
dylib溜腐、bundle或daemon译株,它們?cè)谙到y(tǒng)中的位置幾乎是固定的
2.2.1.1 dylib
基于CydiaSubstrate的dylib全部位于“/Library/MobileSubstrate/DynamicLibraries/”下
2.2.1.2bundle主要分為App和framework兩類
AppStore App全部位于“/var/mobile/Containers/Bundle/Application/”下
Framework全部位于“/System/Library/Frameworks”或“/System/Library/PrivateFrameworks”下
2.2.1.3 daemon的配置文件
“/System/Library/LaunchDaemons/”、
“/Library/Launch-Daemons”或“/Library/LaunchAgents/”下
是一個(gè)plist格式的文件挺益。其中的“ProgramArguments”字段歉糜,即是daemon可執(zhí)行文件的絕對(duì)路徑
2.2.2 Cydia定位
1.通過“dpkg-i”命令安裝的deb包,其內(nèi)容會(huì)被Cydia如實(shí)記錄望众,若要查看匪补,在Cydia的“Installed”項(xiàng)中選擇“Expert”
2.然后選擇目標(biāo)軟件,進(jìn)入“Details”界面
3.之后選擇“Filesystem Content”烂翰,即可瀏覽軟件包里的所有文件
2.2.3 PreferenceBundle
PreferenceBundle是寄生在Settings應(yīng)用里的App夯缺,它的功能界定有些模糊,既可以作為單純的配置文件甘耿,由別的進(jìn)程讀取后執(zhí)行
編寫格式:
Preferences specifier plist : http://iphonedevwiki.net/index.php/Preferences_specifier_plist
2.2.4 grep命令
grep是一個(gè)來自UNIX系統(tǒng)的命令行工具踊兜,能夠搜索文件中是否含有給定的正則表達(dá)式。
格式 grep [options]
主要參數(shù)
[options]主要參數(shù):
-c:只輸出匹配行的計(jì)數(shù)佳恬。
-I:不區(qū)分大 小寫(只適用于單字符)捏境。
-h(huán):查詢多文件時(shí)不顯示文件名。
-l:查詢多文件時(shí)只輸出包含匹配字符的文件名毁葱。
-n:顯示匹配行及 行號(hào)垫言。
-s:不顯示不存在或無匹配文本的錯(cuò)誤信息。
-v:顯示不包含匹配文本的所有行倾剿。
pattern正則表達(dá)式主要參數(shù):
\: 忽略正則表達(dá)式中特殊字符的原有含義筷频。
^:匹配正則表達(dá)式的開始行。
$: 匹配正則表達(dá)式的結(jié)束行前痘。
\<:從匹配正則表達(dá) 式的行開始截驮。
\>:到匹配正則表達(dá)式的行結(jié)束。
[ ]:?jiǎn)蝹€(gè)字符际度,如[A]即A符合要求 葵袭。
[ - ]:范圍,如[A-Z]乖菱,即A坡锡、B、C一直到Z都符合要求 窒所。
鹉勒。:所有的單個(gè)字符。
* :有字符吵取,長(zhǎng)度可以為0禽额。
學(xué)習(xí)地址:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
2.3 定位目標(biāo)函數(shù)
在找到含有目標(biāo)功能的二進(jìn)制文件之后,可以通過class-dump導(dǎo)出頭文件,在里面尋找自己感興趣的函數(shù)脯倒。
2.3.1用OS X 系統(tǒng)自帶
2.3.2用grep命令
2.4 測(cè)試
Objective-C函數(shù)的功能測(cè)試相對(duì)于C/C++函數(shù)來說要簡(jiǎn)單得多实辑,有CydiaSubstrate和Cycript兩種方法可供選擇。
2.4.1ydiaSubstrate
2.4.2Cycript
2.5 解析函數(shù)參數(shù)
2.6 class-dump的局限性
“class-dump提供了可以落腳的小屋藻丢,但要走出這片森林剪撬,還需要一張地圖和一個(gè)指南針——它們就是IDA和LLDB。這兩款工具就像兩座擋在我們面前的大山悠反,絕大多數(shù)逆向工程初學(xué)者都沒能成功翻越它們残黑,爬到半山腰就打道回府了,而翻越大山的人們順利跨過逆向工程的門檻斋否,欣賞到了別樣的風(fēng)景。夢(mèng)想還是要有的茵臭,萬一實(shí)現(xiàn)了呢疫诽?我們鼓起勇氣,試試看能不能征服它們笼恰∮环校”
摘錄來自: 沙梓社 吳航 著. “iOS應(yīng)用逆向工程(第2版)pdf”歇终。 iBooks.
三丶實(shí)例演示
iOS_逆向?qū)嵺`(1)_微信到此一游
http://www.reibang.com/p/b2421b368e2c