49
Jailbreak Development [email protected] CocoaHeads Stockholm 2014-02-03

Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Embed Size (px)

DESCRIPTION

A basic introduction to what a jailbreak really *is*, and how to remix software by writing your own jailbreak tweaks. See http://overooped.com/post/75523688909/writing-your-own-jailbreak-tweak for presenter notes

Citation preview

Page 1: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Jailbreak Development

[email protected]

!CocoaHeads Stockholm 2014-02-03

Page 2: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Jailbreak development

Page 3: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 4: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Jailbreak development

Page 5: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 6: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

App sandbox

Page 7: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

mobile user

App sandbox

Page 8: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

root access

mobile user

App sandbox

Page 9: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

write access to operating system files

root access

mobile user

App sandbox

Page 10: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

!

Your Software

Page 11: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Remixing!Your Software

Page 12: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Jailbreak development

Page 13: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

$ the0s$ make$ make install

Page 14: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 15: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

iod-setup sdk -d /Applications/Xcode.app/Contents/Developer -sdk iphoneos

Page 16: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 17: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 18: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 19: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 20: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 21: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 22: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 23: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 24: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 25: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 26: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 27: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 28: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 29: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 30: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

swizzling is

art

Page 31: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

%hook SBApplicationController!-(void)uninstallApplication:(SBApplication *)application {! NSLog(@"Hey, we're hooking uninstallApplication:!");! %orig; // Call the original implementation of this method! return;!}!%end!

Logos tweak MyTweak.x

Page 32: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

#import <CaptainHook/CaptainHook.h> !CHDeclareClass(NSString); CHMethod(2, void, NSString, writeToFile, NSString *, path, atomically, BOOL, flag) { NSLog(@"Writing string to %@: %@", path, self); CHSuper(2, NSString, writeToFile, path, atomically, flag); } !CHConstructor { CHLoadClass(NSString); CHHook(2, NSString, writeToFile, atomically); }

CaptainHook tweak MyTweak.mm

Page 33: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Live coding ListClasses

Page 34: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

class-dump

Page 35: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

@interface Area : Thing!{! NSString *title;! int type;! NSDate *reviewedDate;! NSMutableSet *tags;! NSMutableDictionary *sharedLists;!}!!+ (int)mergeRuleForProperty:(id)fp8;!- (id)reviewedDate;!- (int)type;!- (id)title;!- (void)removeTask:(id)fp8;!- (void)pigeonholeTask:(id)fp8;!- (id)sharedListContainingTask:(id)fp8;!- (id)sharedListWithIdentifier:(id)fp8;!- (BOOL)matchesTag:(id)fp8;!- (id)inheritedTags;!- (id)allTags;!- (BOOL)hasTags;!- (BOOL)hasElements;!- (unsigned int)countOfElements;!- (void)save;!- (id)initFromDatabaseWithUUID:(id)fp8;!- (void)dealloc;!- (id)init;!- (void)setTags:(id)fp8;!- (id)tags;!- (void)setReviewedDate:(id)fp8;!- (void)setTitle:(id)fp8;!- (void)setType:(int)fp8;!- (void)mergeValue:(id)fp8 touched:(id)fp12 forKey:(id)fp16;!!@end!!@interface Contact : _AudioServicesAddSystemSoundCompletion!{!}!!- (id)uuid;!!@end!

!@interface RepeatingTask : Task!{! TH1RecurrenceRule *_recurrenceRule;! BOOL _instanceCreationPaused;! NSDate *_instanceCreationStartDate;! int _instanceCreationCount;! NSDate *_afterCompletionReferenceDate;!}!!+ (id)_createRepeatingInstanceFromTask:(id)fp8 forDate:(id)fp12;!+ (id)_createInstanceFromTask:(id)fp8 forDate:(id)fp12 withIdentifierDate:(id)fp16;!+ (id)allKeysForSync;!+ (id)keysForInitialization;!+ (id)keysForCreation;!+ (id)newKeys;!+ (void)load;!- (int)createInstancesIfNecessary:(int)fp8 all:(int)fp12;!- (id)recurrenceStartDatesFromDate:(id)fp8 count:(int)fp12;!- (void)updateAfterCompletionStatus;!- (void)instanceWasUnstopped:(id)fp8;!- (void)instanceWasStopped:(id)fp8;!- (void)instanceWasDeleted:(id)fp8;!- (void)instanceWillBeDeleted:(id)fp8;!- (BOOL)createsDueDates;!- (int)state;!- (BOOL)instanceCreationEnded;!- (id)lastInstance;!- (id)instances;!- (void)setAfterCompletionReferenceDate:(id)fp8;!- (id)afterCompletionReferenceDate;!- (void)setInstanceCreationCount:(int)fp8;!- (int)instanceCreationCount;!- (void)setInstanceCreationStartDate:(id)fp8;!- (id)instanceCreationStartDate;!- (void)setInstanceCreationPaused:(BOOL)fp8;!- (BOOL)instanceCreationPaused;!- (void)setRecurrenceRule:(id)fp8;!- (id)recurrenceRule;!- (BOOL)isRepeating;!- (BOOL)save;!- (void)setPrimitiveValues:(id)fp8 forKeys:(id)fp12;!- (void)dealloc;!- (id)initWithUUID:(id)fp8;!- (id)init;!- (void)_commonInit;!!@end!

Page 36: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

• install “Clutch” package from iphonecake.com • Clutch Appname • Unzip • class-dump Appname

Page 37: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Please don’t pirate apps :(

Page 38: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Live coding class-dump

Page 39: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Install

Page 40: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

default password: alpine

Page 41: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 42: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 43: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

⌘⇧-I

Install tweak to device from Xcode/iOSOpenDev

Page 44: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

github.com/rpetrich/deviceconsole

Page 45: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 46: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 47: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak
Page 48: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

http://repo.nevyn.nu

Page 49: Cocoaheads Stockholm 2014-02: Writing your own jailbreak tweak

Thanks for listening! @nevyn

@lookback