狠狠撸

狠狠撸Share a Scribd company logo
iOS 逆向?工程、越獄
Tweak 開發與雜談
iPlayground 2018, Gary Lin / Hiraku
About Gary?
Gary Lin
iOS / Jailbreak
Developer
? https://garynil.tw
? garynil1635@gmail.com
? 知名作品:
- Lylac
- SwipeHome,
- SwipeSelection v2
- Preference Organizer 2
- CPU Identi?er
Outline
1. Jailbreak & Cydia

2. Method Swizzling

3. JB Development
tools

4. Tweak Examples

5. Why we Jailbreak?
Jailbreak
? via 越獄?工具
? 取得 iOS root 最?高權限
? 解除原?生限制,調整
iOS 系統功能
Jailbreak (cont.)
How to Jailbreak?
越獄?工具
Jailbreakme
( iOS 3~4 / 完美 )
Redsn0w
( iOS 4~6 / 完美 )
Absinthe
( iOS 5 / 完美 )
evasi0n
( iOS 7 / 完美 )
太極越獄
( iOS 8 / 完美 )
盤古越獄
( iOS 9 / 完美不
完美 )
Yalu
( iOS 10 / 不完美 )
Electra
( iOS 11 / 不完美 )
JB Tool:JailbreakMe
? IOSurface Kernel Exploit?(CVE-2010-2973)
? iOS 3.1.2-4.0.1
Tweaks?
? Tweak:基於 Cydia
Substrate 開發的插件,可以
植入到宿主程序,並動態修改
宿主程序運?行行流程的外掛程式
? 個?人化 iOS 的使?用:客製化
使?用者介?面和字型,為 iOS
裝置添加新功能等
? Apple iOS 借鑑越獄社群的
Tweaks 功能
? https://www.youtube.com/watch?
v=8gtScFePIZo
iOS 9 App Switcher Enhancer Tweak - Lylac
Tweak development
Cydia Substrate
Objective-C Method Swizzling
objc/runtime.h
Method, Selector, IMP
Objective-C Method
? runtime.h
iOSSDK / objc / runtime.h
Selector
iOSSDK / objc / runtime.h
iOS 逆向工程及越獄開發 - iPlayground 2018
IMP
iOS Runtime
Instance → Class → Method → SEL → IMP → 記
憶體中函數實作
? Objective-C是?一?門動態語?言,動
態之處體現在它將許多靜態語?言
編譯鏈接時要做的事通通放到
runtime 去做,這?大?大增加了了我
們 coding 的靈活性
Method Swizzling
? iOS Runtime - 呼叫 method:消息傳遞
? Method swizzling ?用於改變?一個已存在的
selector 的實作。這項技術使得在 runtime 通過
改變 selector 在 class 的消息分發列列表中的映
射,從?而改變 method 的呼叫。
Method Swizzling (cont.)
Method Swizzling (cont.)
Method Swizzling (cont.)
viewDidAppear_new:
SEL
IMP Vb
viewDidAppear:
SEL
IMP Va
Dispatch Table
Method Swizzling
method_exchangeImplementations()
iOS 逆向工程及越獄開發 - iPlayground 2018
Cydia Substrate
? Cydia Substrate (Mobile Substrate) 是?一個越獄環境
下的 Framework,透過 Objective-C Method
Swizzling 的特性,允許第三?方的開發者在系統的
method 裡?面執?行行 runtime 的插件,擴充?一些
method
? Cydia Substrate有3部分组成:

1.MobileHooker
2.MobileLoader
3.Safe mode
MobileHooker
MobileHooker ?用來來替換指定的函數,這個過程也
叫 Hooking。有以下的 API 可使?用:
? void MSHookMessageEx (Class class, SEL
selector, IMP replacement, IMP *result);
? void MSHookFunction (void* function, void*
replacement, void** p_original);
#include "substrate.h"
BOOL (*orig_isJailBroken)(id self, SEL _cmd);
BOOL patched_isJailBroken(id self, SEL _cmd){
NSLog(@"Detection GG");
return NO;
}
MSHookMessageEX(objc_getClass("SecurityController"),
@selector(isJailBroken),
(IMP)patched_isJailBroken,
(IMP*)orig_isJailBroken
);
MobileLoader
? MobileLoader 主要功能:將第三?方 dylib 加載到執?行行的
process 中
? MobileLoader ?首先會通過 DYLD_INSERT_LIBRARIES 把
?自?己加載進入?目標 process,然後它會在 /Library/
MobileSubstrate/DynamicLibraries/ 中找到需要
載入的 Dynamic Library 並載入。
? 控制是否加載到?目標 process,是通過?一個 plist 檔案來來控
制的。Ex. 如果需要被加載的 dylib 的名稱叫做
apple.dylib,那麽這個 plist 就叫做 apple.plist。
plist 內包含?一個 ?lter 字串串,上?面需要註明 hook 進的?目標
process 的 bundle id(ex. com.apple.SpringBoard)。
Safe Mode
開發?工具 - theos
讓開發 Tweak 更更簡單好上?手
Theos
? A cross-platform suite of tools for building and deploying
software for iOS and other platforms without the use of Xcode
? 使?用 Command Line Tools 與 Make?le 開發
? 不只?用於 tweaks,也可以開發 App、控制中?心模組等...
? 隨帶的好?用語法:Logos
iOS 逆向工程及越獄開發 - iPlayground 2018
Logos 常?用語法簡介
? %hook ?用來來表?示要修改的 class
? 例例:?
%hook NSString?
- (BOOL) isEqualToString:(NSString *)string?
{?
return NO;?
}?
%end
Logos 常?用語法簡介
? %new ?用來來表?示要新增到 class 內的 method
? 例例:?
%hook NSString?
%new ?
- (NSString *) alwaysYes?
{?
return @“Yes";?
}?
%end
Logos 常?用語法簡介
? %orig 作為呼叫原本 method 功能使?用:?
%hook NSString ?
- (NSString *) isEqualToString: (NSString *)string?
{?
return [string length] == 1 ? %orig : NO;?
}?
%end
更更多 Logos 語法教學
? http://iphonedevwiki.net/index.php/Logos?
?
?
?
? 中?文翻譯:https://blog.csdn.net/z929118967/
article/details/78200944
Theos 程式資料夾架構
? 使?用 theos 建立?一個 project,例例如 MyTweak。
預設會有三個檔案: MyTweak.plist、
Make?le、Tweak.xm,在編譯之後產?生
MyTweak.dylib 的動態連結庫
使?用 Command Line Tools 與 Make?le 開發
Theos 程式資料夾架構
? 使?用 theos 建立?一個 project,例例如 MyTweak。
預設會有三個檔案: MyTweak.plist、
Make?le、Tweak.xm,在編譯之後產?生
MyTweak.dylib 的動態連結庫
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
%orig;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hi Gary"
message:@"I'm iPhone X"
delegate:nil
cancelButtonTitle:@"I Know"
otherButtonTitles:nil];
[alert show];
}
%end
Example 1 - iPhone Say Hi
Hook SpringBoard
https://github.com/GaryniL/Tweak-Example
? https://www.youtube.com/watch?
v=v_GVQHFdnU4&list=PLBauIrpi5TZD7s-2chYgut5qB
QTewAfUN
Dangerous?
IOSurface Exploit
? IOSurface Kernel Exploit?(CVE-2010-2973)
? iOS 3.1.2-4.0.1
iOS 逆向工程及越獄開發 - iPlayground 2018
iOS 釋出?至越獄?工具發佈天數
間隔天數
0
40
80
120
160
iOS Version
iOS 1.0 iOS 3.0 iOS 5.0 iOS 7.0 iOS 8.0 iOS 9 iOS 10
Days
More Dangerous…
Every coin has two sides.
? 安全分析
? 瞭解
? 破解原?生系統限制
越狱好吗?
Special Thanks to
macuknow.com
?皮樂 Hiraku
hiraku.tw twitter.com/angelXwind
去年年的阻撓
? https://garynil.tw
? garynil1635@gmail.com
Contact

More Related Content

iOS 逆向工程及越獄開發 - iPlayground 2018