
Mobile SubstrateºÍTheos
Mobile SubstrateÊÇCydiaµÄ×÷ÕßJay Freeman
(@saurik)µÄÁíÍâÒ»¸öÅ£XµÄ×÷Æ·£¬Ò²½ÐCydia Substrate,ËüµÄÖ÷Òª¹¦ÄÜÊÇhookij¸öApp£¬Ð޸ĴúÂë±ÈÈçÌæ»»ÆäÖз½·¨µÄʵÏÖ£¬CydiaÉϵÄtweak¶¼ÊÇ»ùÓÚMobile
SubstrateʵÏֵġ£Ä¿Ç°Ö§³ÖiOSºÍAndroidƽ̨¡£
¸ù¾ÝgithubÉϵĽéÉÜ£¬theosÊÇÒ»¸ö¿çƽ̨iPhone Makefileϵͳ¡£ËüµÄÖ÷Òª¹¦ÄÜÊÇÉú³ÉiPhone
Ô½ÓüApp¡¢tweakµÈ³ÌÐòµÄ¿ò¼Ü½á¹¹£¬²¢ÌṩmakefileÀ´±àÒë¡¢´ò°üºÍ°²×°¡£
ÐèÒªµÄ×¼±¸¹¤×÷£º
Mac
°²×°Theos£¬´ÓTheosµÄGitHubÉÏcloneÏÂÀ´Ò»·Ý£¬·Åµ½Ä³¸öĿ¼Ï£¬ÕâÀïÎҷŵ½ÁË/opt/Ï¡£
°²×°Xcode Command Line Tools£¬¿ÉÒÔÔÚÃüÁîÐÐÏÂÖ´ÐÐxcode-select --installÀ´°²×°»òÕ߲ο¼SOÀ´°²×°£¬°²×°ÍêÖ®ºóÔÙ½øÐÐÏÂÒ»²½¡£
°²×°dpkg £¬Ê×ÏȰ²×°MacPorts£¬¿ÉÒÔͨ¹ýËüµÄ¹ÙÍø,¸ù¾Ý×Ô¼ºµÄϵͳ°æ±¾À´Ñ¡Ôñ¡£°²×°ºÃÖ®ºó£¬ÖØÆôTerminal£¬Ö´ÐÐport
version£¬ÏÔʾ³ö°æ±¾ºÅ˵Ã÷°²×°³É¹¦¡£Èç¹ûÌáʾcommand not found£¬³¢ÊÔÔÚ/etc/pathsÎļþÖмÓÈëÏÂÃæÁ½¸ö·¾¶:/opt/local/bin
/opt/local/sbin£¬ÐèҪʹÓÃrootȨÏÞÀ´±à¼£¬±ÈÈçÓÃVimµÄ»°:sudo vi /etc/paths.
ÖØÆôTerminal£¬ÔÙ´ÎÊäÈëport version¾ÍÓ¦¸Ã»áÏÔʾ°æ±¾ºÅÁË£¬È»ºóÖ´ÐÐsudo port
selfupdateÀ´¸üÐÂÒ»ÏÂ,Ö®ºóÖ´ÐÐsudo port install dpkgÀ´°²×°dpkg. °²×°dpkgµÄÄ¿µÄÊǰÑÎÒÃÇдµÄtweak´ò³Édeb°ü¡£
JailBreaked iPhone iOS 5/6
°²×°OpenSSH£¬´ò¿ªCydiaµÄÖ÷½çÃæ¾ÍÄÜ¿´µ½OpenSSH Access How-To ÒÔ¼°Root
Password How-ToµÄÑ¡Ï¿ÉÒÔ°´ÕÕËüµÄÌáʾһ²½Ò»²½°²×°£¬ÕâÀﲻ׸ÊöÁË£¬ÐèÒªÌáÐѵÄÊÇÒ»¶¨Òª¸ÄµôrootµÄÃÜÂ룬·ÀÖ¹±ðÈËͨ¹ýSSHÁ¬½Óµ½ÄãµÄÊÖ»ú¡£ÕâÒ»²½ÊÇΪÁ˺óÃæÎÒÃÇͨ¹ýSSHÁ¬½Óµ½ÊÖ»ú£¬°Ñdeb°ü°²×°µ½ÊÖ»úÉÏ×¼±¸µÄ¡£
iOS7ÉϵÄMobile Substrate»¹ÓÐbug£¬32λµÄϵͳÏÂÿ´ÎÖØÆôºóÐèÒªÖØÐ°²×°Mobile
Substrate²ÅÄÜÕý³£Ê¹ÓÃ, 64λ½ñÌìÃ²ËÆ²ÅÄÜÓá£ÍƼöÔÝʱÔÚiOS5/6µÄ»úÆ÷ÉϲâÊÔ[2014-01-01]¡£
apt. ÔÚcydiaÖÐËÑË÷Apt¼ì²éÊÇ·ñÒѾ°²×°£¬Ã»Óа²×°¾Í°²×°Ò»Ï¡£
ldid. È«ÃûÊÇLink Identify Editor,Ò²Ö±½Ó¿ÉÒÔÔÚCydiaÖÐËÑË÷È«Ãû°²×°¡£
´´½¨Tweak²¢°²×°µ½ÊÖ»úÉÏ
Ê×ÏÈÎÒÔÚ×ÀÃæÉÏ´´½¨Ò»mytweaksµÄÎļþ¼Ð£¬±£´æÎÒÃÇÒª´´½¨µÄtweak³ÌÐò¡£
~ cd ~/Desktop ? Desktop mkdir mytweaks ? Desktop cd mytweaks |
È»ºóÖ´ÐÐÎÒÃǸղŵĻñµÃµÄtheosÀ´Éú³ÉÒ»¸ötweakµÄÄ£°å£º
mytweaks /opt/theos/bin/nic.pl NIC 2.0 - New Instance Creator ------------------------------ [1.] iphone/application [2.] iphone/library [3.] iphone/preference_bundle [4.] iphone/tool [5.] iphone/tweak Choose a Template (required): 5 Project Name (required): FirstTweak Package Name [com.yourcompany.firsttweak]: com.joeyio.firsttweak Author/Maintainer Name [Joey]: [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: [iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: Instantiating iphone/tweak in firsttweak/... Done. |
ÔÚ´´½¨Ä£°åµÄʱºò£¬ÎÒÃÇÑ¡Ôñ5£¬´´½¨Ò»¸öiPhoneµÄtweak.ÆäËû4¸öÑ¡Ïî¿ÉÒÔ×Ô¼ºÈ¥ËÑË÷Ï¡£Ãû×ÖÊäÈëFirstTweak£¬°üÃûÎÒÊäÈëcom.joeyio.firsttweak£¬ÏÂÃæµÄÈý¸öÑ¡Ïî¶¼Ö±½Ó»Ø³µÊ¹ÓÃȱʡֵ¡£
MobileSubstrate Bundle filterÕâÒ»Ïî±íʾҪhookµÄ³ÌÐò£¬Ä¬ÈÏÊÇcom.apple.springboard£¬¾ÍÊÇhook
Spring Board£¬Èç¹ûÄãÏëhook±ðµÄApp£¬ÕâÀï¸Ä³ÉÄǸöAppµÄBundleID.
OK£¬ÄÇôÎÒÃǵĵÚÒ»¸ötweak¾Í´´½¨ºÃÁË£¬ºÃÏñÒ»µãÒ²²»ÄѰ¡¡£½øÈëµ½firsttweakĿ¼Ï£¬Ê¹ÓÃmake±àÒëһϣ¬¿ÉÄܽá¹ûÊÇÕâÑùµÄ£º
firsttweak make /Users/qiaoxueshi/Desktop/mytweaks/firsttweak/theos/makefiles/targets/Darwin/iphone.mk:41:
Deploying to iOS 3.0 while building for 6.0 will generate armv7-only binaries. Making all for tweak FirstTweak... Preprocessing Tweak.xm... Name "Data::Dumper::Purity" used only once: possible typo at
/Users/qiaoxueshi/Desktop/mytweaks/firsttweak/theos/bin/logos.pl line 615. Compiling Tweak.xm... Linking tweak FirstTweak... Stripping FirstTweak... Signing FirstTweak... /bin/sh: ldid: command not found |
ÎÒÃÇ¿´µ½ÀïÃæÓÐ2¸ö¾¯¸æ£¬µÚÒ»¸öÎÒûÓÐËÑË÷µ½Ê²Ã´½á¹û£¬µÚ¶þ¸öÊÇÖ»ÒªÊÖ»úÉϰ²×°ldid¾ÍÐÐÁË,ÕâÀï²»ÓùÜËü¡£ÎÒ×Ô¼ºÊÔÁËһϣ¬ÊÇ¿ÉÒÔ°²×°µ½ÊÖ»úÉϵģ¬¿ÉÒÔÔÝʱºöÂÔ£¬Èç¹ûÄÄλС»ï°éÖªµÀʲôÔÒò£¬»¶Ó¸æÖª¡£
ÔÚ²¿Êðµ½ÊÖ»ú֮ǰȷÈÏÊÖ»úºÍµçÄÔÔÚÒ»¸öwifi»·¾³Ï£¬²¢ÇÒ¿ÉÒÔͨ¹ýSSHÁ¬½Óµ½ÊÖ»ú£¬·½·¨ÊÇÔÚTerminalÏ£¬Í¨¹ýSSHÁ¬½Óµ½ÊÖ»ú£¬Ö®ºó»áÌáʾÄãÊäÈërootÃÜÂ루ÉÏÃæ°²×°SSH²½ÖèÖÐÓÐÌáµ½£©£¬È·±£Á¬½Ó³É¹¦ÔÙÍùϽøÐС£ÊÖ»úµÄIPµØÖ·¿ÉÒÔÔÚwifiÉèÖÃÖп´µ½¡£
È»ºó°ÑÊÖ»úIPµØÖ··ÅÔÚTHEOS_DEVICE_IP»·¾³±äÁ¿ÖУ¬ÕâÑùtheos²ÅÖªµÀ°²×°µ½ÄÄÀÈçÏ£º
export THEOS_DEVICE_IP=ÊÖ»úIPµØÖ· |
È»ºóÖ´ÐÐmake package install´ò°ü²¢°²×°µ½ÊÖ»úÉÏ (Èç¹ûCydiaÔÚǰ̨£¬°ÑËüÍ˵½ºǫ́£¬·ñÔò°²×°»áʧ°Ü)£º
firsttweak make package install /Users/qiaoxueshi/Desktop/mytweaks/firsttweak/theos/makefiles/targets/Darwin/iphone.mk:41:
Deploying to iOS 3.0 while building for 6.0 will generate armv7-only binaries. Making all for tweak FirstTweak... make[2]: Nothing to be done for `internal-library-compile'. Making stage for tweak FirstTweak... dpkg-deb£ºÕýÔÚн¨Èí¼þ°ü¡°com.joeyio.firsttweak¡±£¬°üÎļþΪ¡°./com.joeyio.firsttweak_0.0.1-2_iphoneos-arm.deb¡±¡£ install.exec "cat > /tmp/_theos_install.deb; dpkg -i /tmp
/_theos_install.deb && rm /tmp/_theos_install.deb" < "./com.joeyio.firsttweak_0.0.1-2_iphoneos-arm.deb" root@192.168.199.126's password: Selecting previously deselected package com.joeyio.firsttweak. (Reading database ... 6250 files and directories currently installed.) Unpacking com.joeyio.firsttweak (from /tmp/_theos_install.deb) ... Setting up com.joeyio.firsttweak (0.0.1-2) ... install.exec "killall -9 SpringBoard" root@192.168.199.126's password: |
°²×°¹ý³ÌÖÐÐèÒªÊäÈëÁ½´ÎÊÖ»úRootÃÜÂ룬һ´ÎÊÇΪÁ˰Ѵò°üºóµÄdeb³ÌÐòÎļþ´«µ½ÊÖ»úÉÏ£¬ÁíÍâÒ»´ÎÊÇkillµôSpringBoard£¬Ê¹SpringBoardÖØÆô¡£
Íê³ÉºóÔÚCydiaÀïµÄ¡°±ä¸ü¡±ÀÍùÏ·һ·£¬¾ÍÄÜ¿´µ½Ò»¸öÃû×ÖΪ¡°FirstTweak¡±µÄ²å¼þÁËÁË£¬ÏëÏë½ÓÏÂÀ´³öÈÎCEO£¬ÓÈ¢°×¸»ÃÀ£¬×ßÏòÈËÉúá۷壬ÓÐľÓÐÒ»µãС¼¤¶¯£¿
Íê³ÉÒ»¸öС¹¦ÄÜ
µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃÇ»¹Ã»Ð´¹ýÒ»ÐдúÂëÄØ¡£ÏÂÃæÎÒÃÇÒªÍê³ÉÒ»¸öС¹¦ÄÜ£ºÔÚËøÆÁ½çÃæÔö¼ÓÒ»¸öUILabelÏÔʾһÐÐÎÄ×Ö£¬¿ÉÒÔÊÇÄãµÄ×ùÓÒÃú»òÕ߯äËûµÄ£¬ÕâÀïÎÒÃÇÏÔʾHello,
MobileSubstate!!¡£
´ò¿ªÎÒÃǸղŴ´½¨µÄfirsttweakĿ¼ÏµÄMakefileÎļþ£¬ÔÚFirstTweak_FILES
= Tweak.xmÏÂÃæÔö¼ÓÒ»ÐÐFirstTweak_FRAMEWORKS = UIKit²¢±£´æÎļþ£¬Ç°×º¶¼ÊÇTWEAK_NAMEµÄÖµ,Ò²¾ÍÊÇFirstTweak,×¢Òâ¸ù¾ÝÄã×Ô¼ºµÄÇé¿öÀ´Ð޸ġ£Ôö¼ÓÕâÐеÄÔÒòºÜÃ÷ÏÔ£¬Ôö¼ÓUILabelÐèÒªÓõ½UIKit
Framework¡£Õû¸öÎļþ¿´ÆðÀ´ÏñÕâÑù£º
include theos/makefiles/common.mk
TWEAK_NAME = FirstTweak
FirstTweak_FILES = Tweak.xm
FirstTweak_FRAMEWORKS = UIKit
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard" |
Õâ¸ö²½ÖèÍê³ÉÖ®ºó£¬ÎÒÃǾÍÒªÕÒµ½ËøÆÁ½çÃæ¶ÔÓ¦µÄViewController£¬È»ºóÌæ»»ËüµÄij¸ö·½·¨£¬°ÑUILabelÌí¼Óµ½ËüµÄviewÉÏ¡£Õâ¸öViewControllerµÄÃû×Ö½ÐSBAwayController£¬
SBÊÇSpringBoardµÄËõд£¬²»ÒªÏëÆ«ÁË :).ÎÒÃÇÒªÌæ»»ËüµÄ- (void)activate·½·¨¡£SBAwayControllerÀàµÄÍ·Îļþ¿ÉÒÔÔÚiOS6µÄ˽ÓÐÀàµÄÍ·ÎļþÖÐÕÒµ½¡£ÔÚSBAwayControllerÀïÓиö½Ð_awayViewµÄivar£¬»ñµÃÕâ¸öivarÐèÒªÒ»¸ötheosÖв»´æÔڵķ½·¨£¬ºÃ°É£¬Ëü½ÐMSHookIvar,Õâ¸ö·½·¨ÔÚĬÈϵÄtheosµÄsubstrate.hÍ·ÎļþÀïûÓУ¬¿ÉÒÔÔÚGitHubµÃµ½°üº¬Õâ¸ö·½·¨µÄÍ·Îļþ¡£ÏÂÔØµ½±¾µØ£¬¸²¸Çtheos/includeϵÄͬÃûÎļþ£¨ÍƼö½«ÔÓеÄsubstrate.hÍ·ÎļþÖØÃüÃû£©¡£
OK£¬µ½ÕâÀïÍòʾ߱¸£¬Ö»Ç·CodingÁË¡£
´ò¿ªfirsttweakĿ¼ÏµÄTweak.xmÎļþ²¢Çå¿Õ£¬Ìí¼ÓÏÂÃæÕâ¶Î´úÂ룺
%hook SBAwayController - (void)activate { %orig(); //invoke the orignal method to do what should to do. NSLog(@"========================================================="); NSLog(@"Hello MobileSubstrate!!"); NSLog(@"========================================================="); //get _awayView via MSHookIvar method UIView *_awayView = MSHookIvar<*>(self, "_awayView"); //create a lable whose width = 200 and height = 100 and add to _awayView float w = 200; float h = 100; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((_awayView.frame.size.width - w)/2,100,w,h)]; label.text = @"Hello, MobileSubstate!!"; label.textAlignment = NSTextAlignmentCenter; label.backgroundColor = [UIColor clearColor]; label.textColor = [UIColor whiteColor]; [_awayView addSubview:label]; } %end |
´ó¸Å½âÊÍһϣ¬%hook SBAwayControllerÒÔ¼°ÀïÃæµÄ- (void)activate·½·¨£¬Æäʵ¾ÍÀàËÆswizzlingÁËSBAwayControllerµÄactivate·½·¨¡£µ±ÏµÍ³Ö´ÐÐSBAwayControllerµÄactivate·½·¨µÄʱºò»áÖ´ÐÐtweakÀïµÄactivateµÄ·½·¨¡£
ÔÚÕâÀï·½·¨ÀïÎÒÃÇÏÈÖ´ÐÐÁË%orig()£¬¾ÍÊÇÖ´ÐÐÔÀ´µÄactivate·½·¨£¬±£Ö¤ÔÓеķ½·¨ÏÈÖ´ÐУ¬ÔÙÖ´ÐÐÎÒÃÇ×Ô¼ºµÄ´úÂë¡£
Õâ¸öactivate·½·¨ÔÚµÚÒ»´Î½øÈëËøÆÁ½çÃæµÄʱºò»áÖ´ÐУ¬ÔÚÒÔºóÿ´Î·ÇËøÆÁ״̬Ï£¬°´¹Ø»ú¼üÒ²»áÖ´ÐС£
½ÓÏÂÀ´¾ÍÊÇͨ¹ýMSHookIvar»ñµÃ_awayView¡£È»ºó¾ÍÊÇÎÒÃǷdz£ÊìϤµÄÁË£¬´´½¨Ò»¸öUILabel£¬Ìí¼Óµ½_awayViewÀï¡£µ½ÕâÀï¾Í½áÊøÁË¡£make
package installÒ»ÏÂ(»¹ÐèÒªÏÈÖ´ÐÐÒ»ÏÂexport THEOS_DEVICE_IP=ÊÖ»úIPµØÖ·)£¬°²×°µ½ÊÖ»úÉÏ£¬µÈSpringBoardÖØÆôÍ꣬Äã»á¿´µ½ÀàËÆÏÂͼµÄ½çÃæ£º
°ÑÊÖ»úÁ¬½Óµ½µçÄÔÉÏ£¬´ò¿ªXcode£¬ÔÚOrganizerÀïµÄConsoleÀïÄÜ¿´µ½³ÌÐòÖÐʹÓÃNSLog´òÓ¡µÄÐÅÏ¢£¬ÓÃÀ´µ÷ÊԺܷ½±ãÄØ¡£
×ܽá
±¾ÎÄÖ÷ÒªÊǽ²Mobile SubstrateµÄ×÷ÓÃÒÔ¼°ÈçºÎʹÓÃTheos¿ª·¢Ò»¸ö¼òµ¥µÄtweak¡£ÓÐÁËÕâЩÈëÃŵĻù´¡Ö®ºó£¬Äã¾Í¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄÏë·¨À´Ð´×Ô¼ºÏ²»¶µÄtweak¡£Èç¹ûÄãÊÇÔÚiOS7ÏÂÔ½ÓüµÄ»°£¬¿ÉÒÔ³¢ÊÔһϰѿØÖÆÖÐÐĵÄAirDropºÍÒôÀÖ²¥·ÅÆ÷¸øÒþ²Øµô£¬ÈÿØÖÆÖÐÐÄ¿´ÆðÀ´¸ü¼ò½à¡£½Ó×Å¿ÉÒÔÔÙ½øÐиĽø£¬±ÈÈçÔÚÀ¶ÑÀ¹Ø±ÕµÄʱºò²»ÏÔʾAirDrop£¬¿ªÆôµÄʱºòÒÀÈ»ÏÔʾ£¬ÒôÀÖÕýÔÚ²¥·ÅµÄʱºòÏÔʾÒôÀÖ²¥·ÅÆ÷£¬·ñÔò²»ÏÔʾ¡£
Õâ¸öСDemoÊÇǰÁ½ÖÜдµÄ£¬Ò»Ö±Ã»ÓÐʱ¼äÕûÀí³öÀ´£¬½ñÌì³éʱ¼äÕûÀíÁËÒ»ÏÂÎÄ×Ö·¢Á˳öÀ´£¬ËãÊÇË͸ø×Ô¼ºÐÂÄêµÄÒ»¼þÀñÎï°É£¡
|