Tweak底层实现Cydia Substrate

原来叫Mobile Substrate

他是越狱后插件和软件运行的基础依赖包, 提供动态注入的功能, Logos语法底层就是通过Cydia Substrate实现

主要由三部分组成: MobileHooker, MoblieLoader, safe mode

1. MobileHooker

用于hook方法

主要用到两个函数:
- MSHookMessageEx 主要作用于Objective-C方法
- MSHookFunction 主要作用于c/c++函数

Logos语法 %hook就是对此函数做了一层封装, 方便编写

  1. MSHookMessageEx

    void MSHookMessageEx(Class _class, SEL message, IMP hook, IMP *old);

    demo:

    NSString *(*oldDescription)(id self, SEL _cmd);
    
    // implicit self and _cmd are explicit with IMP ABI
    NSString *newDescription(id self, SEL _cmd) {
        NSString *description = (*oldDescription)(self, _cmd);
        description = [description stringByAppendingString:@"!"];
        return description;
    }
    
    MSHookMessageEx(
        [NSObject class], @selector(description),
        &newDescription, &oldDescription
    );
    1. MSHookFunction

      2.1. MSGetImageByName(== dlopen的功能)
      获取操作对象

      2.2. MSFindSymbol (== dlsym == nlist)
      获取操作对象的方法

      demo:

      MSImageRef image;
      image = MSGetImageByName("/usr/lib/libSystem.B.dylib");
      
      void *(*palloc)(size_t);
      palloc = (void *(*)(size_t)) MSFindSymbol(image, "_malloc");
      
      void *data = (*palloc)(1024);
      free(data);
      

      2.3. MSHookFunction

      void MSHookFunction(void *symbol, void *hook, void **old);

      demo:

      void *(*oldConnect)(int, const sockaddr *, socklen_t);
      
      void *newConnect(
          int socket, const sockaddr *address, socklen_t length
      ) {
          if (address->sa_family == AF_INET) {
              sockaddr_in *address_in = address;
              if (address_in->sin_port == htons(6667)) {
                  sockaddr_in copy = *address_in;
                  address_in->sin_port = htons(7001);
                  return oldConnect(socket, &copy, length);
              }
          }
      
          return oldConnect(socket, address, length);
      }
      
      MSHookFunction(&connect, &newConnect, &oldConnect);
      

2. MoblieLoader

  • 将tweak插件注入到第三方应用程序中(动态注入: ptrace)
  • 启动时MoblieLoader会根据 /Library/MobileSubstrate/DynamicLibraries/ 目录中的plist文件制定的作用范围, 有选择的在第三方进程空间里通过dlopen函数加载同名的dylib

    每一个.dylib, 都有一个同名的.plist,
    .plist的作用就是用来指定tweak插件的作用范围

3. safe mode 安全模式

自己制作的tweak把系统搞崩溃
可以进入到safe mode可以fix tweak造成的崩溃

  1. ssh到 iPhone
  2. 执行: dpkg -r 插件包名(com.app.zhz), 命令执行后其实是删除 /Library/MobileSubstrate/DynamicLibraries/ 目录下该app的tweak
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu Tweak是一款专门为Ubuntu(GNOME桌面)准备的配置、调整工具,主要面向新手级的普通用户。它可以设置很多并不能在系统首选项中设置的隐藏选项,以满足用户自定义的乐趣。即使是新手,也可以方便地通过它来进行适合自己的系统调整。\[1\]在Ubuntu 10.10上安装Ubuntu Tweak的方法是:首先,检查是否有对应的扩展目录,如果没有则新建一个。然后,打开对应扩展目录下的metadata.json文件,查看uuid,将刚才移过来的目录名重命名为uuid中的内容。最后,关闭并重新打开gnome-tweaks,如果仍然没有刷新出来,可以使用alt+f2打开gnome-shell,输入r重启gnome-shell或重启电脑。\[2\]另外,如果想更换主题,可以搜索User Themes进行安装,这样就能在gnome-tweak中启用shell主题的更换,而/usr/share/themes中存放的是gnome-shell的主题。\[2\]如果想安装插件,可以通过“显示应用程序->工具->优化”打开Ubuntu Tweak,然后通过浏览器安装GNOME扩展网站,安装浏览器扩展后刷新扩展网站页面,会提示安装本地扩展,使用命令sudo apt install chrome-gnome-shell即可安装插件。\[3\] #### 引用[.reference_title] - *1* [在Ubuntu 10.10上安装Ubuntu Tweak的方法](https://blog.csdn.net/on_way_/article/details/8566631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Ubuntu桌面美化教程(GNOME Tweak Tool安装教程)](https://blog.csdn.net/qq_35395195/article/details/125266461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值