Attention: Jailbreak is required to work with Cycript (developers can, however, connect the library to their project in order to be able to test the application on a “clean” device).
sftp>put cycript.deb
iPad:/tmp root# dpkg -i cycript.deb
iPad:~ root# ps aux | grep Dropbox mobile 283 0.0 10.1 641388 52020 ?? Ss 5:41PM 0:19.15 /var/mobile/Containers/Bundle/Application/93E2B5E6-B7EC-4D18-9697-021D24429D29/Dropbox.app/Dropbox root 328 0.0 0.1 536256 440 s000 S+ 6:07PM 0:00.01 grep Dropbox iPad:~ root# cycript -p 283
cy# UIApp.keyWindow.rootViewController #"<DBSplitViewController: 0x16bc02a0>"
cy# UIApp.keyWindow.rootViewController.presentedViewController #"<PasscodeFullscreenController: 0x187c8b50>"
function printMethods(className) { var count = new new Type("I"); var methods = class_copyMethodList(objc_getClass(className), count); var methodsArray = []; for(var i = 0; i < *count; i++) { var method = methods[i]; methodsArray.push({selector:method_getName(method), implementation:method_getImplementation(method)}); } free(methods); free(count); return methodsArray; }
cy# printMethods(PasscodeFullscreenController)
[{selector:@selector(initWithPasscodeViewController:),implementation:0xdf551},{selector:@selector(dealloc),implementation:0xe0131},{selector:@selector(shouldAutorotate),implementation:0xe0045},{selector:@selector(supportedInterfaceOrientations),implementation:0xe010d},{selector:@selector(viewDidLoad),implementation:0xdf5b1},{selector:@selector(.cxx_destruct),implementation:0xe0181}]
cy# var PasscodeFullscreenController = #0x187c8b50 #"<PasscodeFullscreenController: 0x187c8b50>" cy# *PasscodeFullscreenController
{isa:#"PasscodeFullscreenController",_view:#"<UIView: 0x187c9870; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0x187c9800>>",_tabBarItem:null,_navigationItem:null,_toolbarItems:null,_title:null,_nibName:null,_nibBundle:#"NSBundle </private/var/mobile/Containers/Bundle/Application/93E2B5E6-B7EC-4D18-9697-021D24429D29/Dropbox.app> (loaded)",_parentViewController:null,_childModalViewController:null,_parentModalViewController:#"<DBSplitViewController: 0x183c3ca0>",_previousRootViewController:null, ... _presentationSizeClassPair:{width:0,height:0},_navigationControllerContentInsetAdjustment:{top:0,left:0,bottom:0,right:0},_contentOverlayInsets:{top:20,left:20,bottom:0,right:20},__embeddedViewFrame:{origin:{x:0,y:0},size:{width:0,height:0}},_passcodeController:#"<PasscodeViewController: 0x187c8730>"}
cy# printMethods(PasscodeViewController)
[{selector:@selector(dismissPasscodeAnimated:),implementation:0xa933d},{selector:@selector(initWithPasscodeEntryMode:),implementation:0xa7801},{selector:@selector(presentPasscodeModalAnimated:),implementation:0xa91c5}, ... {selector:@selector(presentationControllerForPresentedViewController:presentingViewController:sourceViewController:),implementation:0xaba01},{selector:@selector(canCancel),implementation:0xa95b9},{selector:@selector(setCanCancel:),implementation:0xa9575}]
cy# var PasscodeViewController = #0x187c8730 #"<PasscodeViewController: 0x187c8730>" cy# [PasscodeViewController dismissPasscodeAnimated:YES]
cy# var PasscodeController2 = #0x1992aab0 #"<PasscodeViewController: 0x1992aab0>" cy# [PasscodeController2 dismissPasscodeAnimated:YES]
cy# PasscodeViewController.messages
db_handleVerifyModeCorrectPasscodeEntered:0xb1bd5
Source: https://habr.com/ru/post/244143/
All Articles