IPhone一起玩越狱 -(十三)- Tweak的原理

引言

当我们在使用theos创建一个tweak项目的时候,tweak做了什么?它的工作原理是什么?

分析tweak项目

  • 分析tweak创建以后的几个文件,创建操作请查看十一
根目录
   .
├── .theos
|   ├── _ 
|   |    └── ...  *
|   ├── obj 
|   |    └── ...  *
|   ├── packages 
|   |    └── ...   记录版本号
|   ├── build_session
|   ├── fakeroot
|   └── last_package    当前打包成功以后放的路径
├── obj   实际上跟上面.theos/obj的目录是一样的
|   └── debug/...   空的
├── packages
|   └── ...   你的包程序,也就是你的插件的包,在很多威锋源里面的*.deb文件,每次打包都会生成一个包文件,每次包文件的版本号都会++
├── control    配置信息
├── Makefile   环境变量信息
├── Tweak.xm      编写logos hook代码
├── ***.plist     目标进程,就是你需要修改、hook的App的Bundle identifier

_ 目录
├── DEBIAN
|   └── control    配置信息
├── Library 
|   |    └── MobileSubstrate/Dynamiclibrarte/**.plist  目标进程,就是你需要修改、hook的App的Bundle identifier

obj 目录  上面两个obj目录实际上都是一样的,只不过在根目录中的obj在打包安装的整个过程中都是空的,我也不知道作者当时是怎么想的,所以就绕过去,可能还有别的作用的,现在是没找到相关的内容。
├── debug
|   ├── arm64    arm64的*.dylib 动态库
|   └── armv7     armv7的*.dylib 动态库
|   |    └──  *.dylib   合并arm64、armv7的动态库  

当我使用theos创建一个tweak项目,并makemake packagemake install三个步骤会直接安装到你的手机里面,在cydia安装的插件中就可以看到你自己的插件

当然tweak是以什么形式安装到手机中的呐?
首先我们来介绍下动态库能够被加载,而且还会被调用,基本上我所知道的只有2种:

    1. 注入到某个App
    2. 插入到某个进程

验证

为了证明我已经将动态库注入App或是插进我的目标进程,我在**.xm中添加了如下代码进行验证

%hook WCAccountLoginFirstViewController
- (void)viewDidAppear:(BOOL)animated{
    
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"注入成功了,呜~喵!" preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *alertaction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        
    }];
    [alert addAction:alertaction];
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];
    %orig;
}
%end

验证注入到某个App

猜想:
当我创建一个tweak项目的时候,会在最后输入,目标App的Bundle identifier,这个App的唯一标示,cydia根据这个Bundle identifier直接注入我的动态库。
而我要验证的就是makemake packagemake install安装到手机以后,我查看手机里面的MachO文件,查看是否注入了我的动态库文件。
过程

  1. 访问我的手机,打开我的目标App,Copy目录下的*.app文件,通过SSH发送给我的Mac桌面


$ scp -P 3456 -r root@localhost:/var/containers/Bundle/Application/39C3D718-5FD5-41E1-86C2-72DB9B06C75D/xxx.app ~/Desktop
//拿到MachO文件

使用MachOView打开这个MachO文件
在Load Commands 中查看是否存在你刚注入的动态库名称


我从头到尾都没有看到有我创建的动态库
验证证明了,tweak创建的动态库并没有注入到MachO,没有修改App的二进制文件
tweak不是注入动态库的方式
需要注意的是注入的方式,就是修改二进制文件,注定要重新签名二进制文件
无越狱iphone安装多个同样应用的方法(一)
无越狱IPhone安装多个同样应用的方法(二)Xcode签名
无越狱IPhone安装多个同样应用的方法(三)自动化重签名

验证插入到某个进程

分析
插入到某个进程底下,我们需要的是一个dyld的环境变量,DYLD_INSERT_LIBRARIES这个环境变量告诉了某个App进程,我要加载某个动态库,当App运行的时候,临时挂载到上面而并没有修改App的MachO文件,当App从后台删除以后,这个临时加载的动态库也会跟着清除,当这个App重新打开后需要重新加载这个动态库
在我的IPhone一起玩越狱 -(十)- 使用dumpdecrypted砸壳,动态砸壳
这个篇文章中提到过这种方式也应用过这种方式,请移驾过去查看
验证


图中显示的就是当我启动***.app目标App的时候,cydia检测到了它启动了,cydia会调用DYLD_INSERT_LIBRARIES这个变量让这个App去加载我的动态库,Loading: .../你的动态库的路径

总结

tweak的原理

  1. tweak生成的是一个动态库,并且打包成一个deb的包
    • dylib动态库
    • plist文件(目标app的bundle identifier)
  2. cydia安装这个.deb,实际上就是将.deb中的动态库、plist取出来
  3. 根据plist提供的bundle identifier查找目标App是否启动
  4. 如果启动加载dylib这个动态库

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容