tweak加载资源

开发自己的deb插件需要加载自己的资源,比如图片资源。iOS中常用的两种加载图片资源的方式:

+ (nullable UIImage *)imageNamed:(NSString *)name;      // load from main bundle
- (nullable instancetype)initWithContentsOfFile:(NSString *)path;

+imageNamed:方式从程序的main bundle加载图片,由于我们自己单独开发的插架,资源是需要单独管理的。我们需要使用第二种方式,给定图片的路径去加载图片。

那么图片的存放的路径应该存放在手机的那个目录下呢?

当前手机安装了reveal插件,可以看出reveal的插架资源存放在/Library/PreferenceLoader/Preferences/目录下,我们也可以将我们开发的插件需要加载的资源文件存放在此目录

现在知道了图片资源的存放路径,是否有办法在将开发的插件安装打包安装到手机时图片资源也一起打包到手机中呢?这个答案是肯定的。

在tweak项目中,可以创建名称为layout文件夹,将所有图片等资源文件存放在这里。在打包安装插架到手机中时,layout中的资源会打包到手机的根目录下。也就是说layout就对应手机的根目录/

上面说到我们的资源想存放在手机的/Library/PreferenceLoader/Preferences/目录下,可以直接在layout目录新建这种文件结构

我们可在工程中定义文件资源路径的宏 加载图片时直接写文件名就可以

// 定义图片资源路径
#define CHFile(path) @"/Library/PreferenceLoader/Preferences/" #path
// 加载skull的图片
cell.imageView.image = [UIImage imageWithContentsOfFile:CHFile(skull.png)];

tweak打包脚本

tweak打包命名

make clean

make

make pakcage

make install

对于每次都需要执行上面的脚本,因此我们可以编译写shell脚本文件 ~/tweak.sh

make clean && make package && make install

tip:make package就会先执行make命令,因此在shell脚本文件可以省略

上面打包的出来的安装包默认是debug版本,在手机 Cydia中查看安装的版本是debug

在打包执行 make package debug=0就可以了

tweak原理

tweak工程目录结构

默认nic.pl生成的tweak工程目录结构如下(layout我自己添加存放资源的目录):

control是tweak工程的描述信息,比如包名、作者、架构、版本。其中Package必须是小写字母 否则打包报错。

Makefile对工程的编译信息描述。执行make命令时编译tweak_wechat_FILES变量指定的源文件,多个文件使用空格隔开

Tweak.x是编译hookd代码的,Logos文件扩展名根据编译的开发语言而不相同

xxx.plist文件就描述了逆向程序的Bundle id

tweak安装过程

执行make命令主要对Makefile中描述的所有参加编译的源文件进行编译,生成xxx.dylib动态库

执行make package命令是将工程xxx.plst文件和make阶段生成的xxx.dylib动态库打包成一个xxx.deb文件(deb就是越狱的插件)

make install 连接远程主机(THEOS_DEVICE_IP THEOS_DEVICE_PORT) 将deb插件安装到远程手机的/Library/MobileSubstrate/DynamicLibraries目录下

tweak运行过程

开发的deb插件是由Cydia Substrate管理,这个插件是越狱手机安装Cydia就安装的

Cydia Substrate程序监听/Library/PreferenceLoader/Preferences/下xxx.plist的Bundle Id的应用的运行,一旦监听到被包含Bundle Id程序运行,Cydia Substrate会加载插件,将插架中的hook方法动态注入到内存中的程序中,本质修改源程序的汇编指令。

最新文章

  1. 三分钟学会funsioncharts
  2. selenium webdriver自动化对日期控件的处理
  3. 不遗留问题-menu数据拼装
  4. Android的Manifest配置文件介绍
  5. 最近整理的一些行列转换sql(有自己的,有别人的),留作记录
  6. 网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告
  7. Python之路Day14
  8. H264所采用的指数格伦布熵编码算法原理及应用
  9. [编织消息框架][设计协议]优化long,int转换
  10. JavaScript中的indexOf
  11. 网页三剑客:HTML+CSS+JavaScript 之JavaScript
  12. mvc项目远程发布到windows server服务器
  13. 逆变(contravariant)与协变(covariant):只能用在接口和委托上面
  14. Vue diff 算法
  15. 数据库设计E-R图
  16. PHP实现数组中每个字符出现次数最多的,并且如果两个字符出现相同,则在前面的先输出功能
  17. Altium Designer Summer 09 Gerber 文件设置
  18. C++问题汇总
  19. 【大数据系列】win10上安装hadoop开发环境
  20. 解题:JSOI 2016 最佳团体

热门文章

  1. SQL比较时间查询语句
  2. 截取url中的某个字符串后面的值
  3. PAT_A1038#Recover the Smallest Number
  4. Feign 系列(04)Contract 源码解析
  5. JUC源码分析-线程池篇(一):ThreadPoolExecutor
  6. linux学习的任督二脉-进程调度和内存管理
  7. JDK8新特性之重复注解
  8. 9-MySQL-Ubuntu-数据表中数据的修改(二)
  9. C static extern和全局变量
  10. 本地调试H5页面