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方法动态注入到内存中的程序中,本质修改源程序的汇编指令。

iOS逆向系列-tweak补充的更多相关文章

  1. iOS逆向系列-脱壳

    概述 通过iOS逆向系列-逆向App中使用class-dump工具导出App的Mach-O文件所有头文件.Hopper工具分析App的Mach-O文件代码大概实现.但是这些前体是App的Mach-O没 ...

  2. iOS逆向系列-逆向APP思路

    界面分析 通过Cycript.Reveal. 对于Reveal安装配置可参考配置iOS逆向系列-Reveal 通过Reveal找到内存中的UI对象 静态分析 开发者编写的所有代码最终编译链接到Mach ...

  3. iOS逆向系列-theos

    概述 theos是GitHub开源的一个项目,通过nic.pl创建tweak项目.通过编写我们注入代码,然后执行编译.打包.安装等操作将代码注入iPhone安装的制定程序. theos环境配置 安装签 ...

  4. iOS逆向系列-Mach-O文件

    概述 Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序.库的标准格式. 常见的Mach-O文件 属于Mach-O格式的文件类型有. 可以在xnu源码中,查看到Mach-O格式 ...

  5. iOS逆向系列-Reveal

    概述 Reveal是一款调试iOS程序UI界面的神器. 官网地址:https://revealall.com 下载:https://revealapp.com/download/ 建议下载Reveal ...

  6. iOS逆向系列-Cycript

    概述 Cycript 是Objective-C++.ES(JavaScript).Java等语法的混合物. 可以用来探索.修改.调试正在运行的Mac\iOS App. 通过Cydia安装Cycript ...

  7. iOS逆向系列-动态调试

    Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...

  8. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  9. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

随机推荐

  1. 拾遗:govendor(Golang 依赖库版本控制)

    官方资料: https://github.com/kardianos/govendor https://github.com/kardianos/govendor/blob/master/doc/fa ...

  2. 20140808 const和define区别 内联函数(inline) 栈和堆的地址分配 栈帧

    1.const和define区别 const有数据类型(不能改变的变量),define只是简单的字符串替换,没有数据类型. C++程序用const完全取代 define. const还可以类成员函数为 ...

  3. opencv 打开摄像头(c++)

    1,打开视频文件 2,打开IP摄像头 读取大华摄像头 大华的网络摄像头编号:DH-IPC-HFW1225M-I1-0600B,用的是RTSP协议. "rtsp://admin:dahua@1 ...

  4. cdh5.47 上配置flume

    flume 配置文件 # Define a memory channel called ch1 on agent1agent1.channels.ch1.type = memoryagent1.cha ...

  5. leetcode.哈希表.128最长连续序列-Java

    1. 具体题目 给定一个未排序的整数数组,找出最长连续序列的长度.要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 ...

  6. style优先级

    不同级别 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. 作为style属性写在元素内的样式 id选择器 类选择器 标签选择器 通配符选择器 浏览器自定义或继承       ...

  7. 前端 css 补充内容

    给个菜鸟教程的css教程网址(全的狠!!!): https://www.runoob.com/css/css-tutorial.html 下面是几张css基础样式图:

  8. Ansible介绍

    第一章 ansible服务介绍 1.1 ansible批量管理服务概述 是基于python语言开发的自动化软件工具 是基于SSH远程管理服务实现远程主机批量管理 1.2 ansible批量管理服务意义 ...

  9. Mysql 查询表中某字段的重复值,删除重复值保留id最小的数据

    1 查询重复值 ); 2 删除重复值 -- 创建临时表 ) ); -- 把重复数据放进临时表 INSERT Hb_Student_a SELECT id,studentNumber FROM Hb_S ...

  10. Apache Tomcat下载、安装、环境变量配置以及项目部署

    前言 针对在本地访问文件或资源出现的跨域问题,可以通过搭建本地服务器来解决,本篇随笔主要介绍通过搭建Apache Tomcat服务器来解决跨域.包括Apache Tomcat的下载.安装.环境变量的配 ...