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. Android逆向之smali语法宝典

    0x01.前言 Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali.我们反编译得到的代码,j ...

  2. 2.4 webpack + gulp 构建完整前端工作流

    在前面的两个小节中已经完整的讲了 webpack 和 gulp 相关的内容,本小节中将会结合二者构建一个完整的前端工作流,内容目录为: 前端工程结构和目标 前端工程目录结构 gulp clean gu ...

  3. 1.6 USB的插入检测机制

  4. PAT_A1075#PAT Judge

    Source: PAT A1075 PAT Judge (25 分) Description: The ranklist of PAT is generated from the status lis ...

  5. 剑指offer——04二维数组中的查找

    题目: 数组中唯一只出现一次的数字.在一个数组中除一个数字只出现一次之外,其他数字都出现了三次.请找出那个只出现一次的数字. 题解: 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现 ...

  6. 在vue中使用高德地图开发,以及AMap的引入?

    百度引入BMap ,一个import 即可,可AMap 却报AMap is not difined ? 1.首先在 externals: { "BMap": "BMap& ...

  7. 2019_7_30python

    当6引号给予变量的时候,变为字符串 6引号注释多行 语言元素 python中大小写敏感 不要和关键字 print( a + b ) print( a - b ) print( a * b ) prin ...

  8. PHP算法之电话号码的字母组合

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23"输出:[" ...

  9. idea 在新建一个class的时候可以选择继承的父类

    1.把光标放在父类名称上按alt+enter可以生成子类 2. 选中implement abstract class

  10. 关于sublime使用中写less代码高亮显示问题

    一开始在没有配置的情况下在sublime中写less代码是不会有高亮显示的.下面说一下配置过程 一.安装Less2Css模块 打开sublime,ctrl+shift+p,输入package cont ...