美文网首页
Logos 语法

Logos 语法

作者: 77168ddcf2c6 | 来源:发表于2018-03-28 14:06 被阅读32次

    Logos 语法

    1. %hook className 指定需要hook的class,必须以end结尾 如:hook了系统界面的home按钮按下方法

      %hook SpringBoard
      - (void)_munuButtonDown:(id)down{
         NSLog(@"You are press the home button");
         %orig;//call the original _menuButton
      }
      %end
      
    2. %log 打印日志

      %log((NSString *)@"iOSRE", (NSString *)@"Debug");
      
      
    3. %orig 执行原始代码,必须在%hook里面使用,如果在hook方法里面不增加这一行代码,那么原始函数不会被调用。另外还可以用该函数修改原始函数的参数。

      %hook SBLockScreenDateViewController
      //以下方法设置锁屏界面的日期的文字,改成了lemon love well
      - (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2
      {
         %orig(@"Lemon love Well",arg2);
      }
      %end
      
      
    4. %group 用户将%hook分组,便于代码管理和条件初始化分组,必须以%end结尾,一个%group可以包括多个%hook,如果一个%hook不在一个%group里面,那么这个%hook属于%group_ungrouped。

      %group iOS7Hook
          %hook iOS7Class
          - (id)iOS7Method{
              id result = %orig;
              NSLog(@"This class & method only exist in iOS
              7.");
              return result;
          }
          %end
      %end
          %group iOS8Hook
          %hook iOS8Class
          - (id)iOS8Method{
              id result = %orig;
              NSLog(@"This class & method only exist in iOS
              8.");
              return result;
          }
          %end
      %end
      
      
    5. %init 值得注意的是,每个%group必须配合下面的%init使用才能生效,该指令用户初始化一个%group,必须在%hook里面调用或者%ctor里面调用。如果带参数,那么初始化指定的group,如果不带参数,那么初始化_ungrouped。如:

      #ifndef kCFCoreFoundationVersionNumber_iOS_8_0
      #define kCFCoreFoundationVersionNumber_iOS_8_0 1140.10
      #endif
      %hook SpringBoard
      - (void)applicationDidFinishLaunching:(id)application
      {
          %orig;
          %init; // Equals to %init(_ungrouped)
          if (kCFCoreFoundationVersionNumber >=
          kCFCoreFoundationVersionNumber_iOS_7_0 &&
          kCFCoreFoundationVersionNumber <
          kCFCoreFoundationVersionNumber_iOS_8_0)          %init(iOS7Hook);//init iOS7Hook group
          if (kCFCoreFoundationVersionNumber >=
          kCFCoreFoundationVersionNumber_iOS_8_0) %init(iOS8Hook);
      }
      

    %end
    ```

    1. %ctor,tweak的constructor,完成初始化工作,如果不显式定义,theos会自动生成一个%ctor,并在里面调用%init(_ungrouped)。如

      //以下代码段可以生效,因为theos隐式调用了%ctor并且%init(_ungroped)
      %hook SpringBoard
      - (void)reboot
      {
         NSLog(@"If rebooting does not word then i screwed");
         %orig;//call origin method
      }
      %end
      //以下代码段不能生效,虽然显式定义了%ctor,但是没有在里面调用%init方法
      %hook SpringBoard
         - (void)reboot
      {
         NSLog(@"If rebooting does not word then i screwed");
         %orig;//call origin method
      }
      %ctor{
         //need to call %init here.
      }
      %end
      
    2. %new在%hook内部使用,给一个现有的class添加新的函数,功能与class_addMethod一样。

      %hook SpringBoard
      %new 
      - (void)createNewMethod
      {
           NSLog(@"This is a new method");
      }
      
    3. %c 该指令的作用等同于NSClassFromString()或者obj_getClass()动态获取一个类的定义,在%hook或者%ctor内使用。

    相关文章

      网友评论

          本文标题:Logos 语法

          本文链接:https://www.haomeiwen.com/subject/ilwycftx.html