iOS逆向系列-tweak补充
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补充的更多相关文章
- iOS逆向系列-脱壳
概述 通过iOS逆向系列-逆向App中使用class-dump工具导出App的Mach-O文件所有头文件.Hopper工具分析App的Mach-O文件代码大概实现.但是这些前体是App的Mach-O没 ...
- iOS逆向系列-逆向APP思路
界面分析 通过Cycript.Reveal. 对于Reveal安装配置可参考配置iOS逆向系列-Reveal 通过Reveal找到内存中的UI对象 静态分析 开发者编写的所有代码最终编译链接到Mach ...
- iOS逆向系列-theos
概述 theos是GitHub开源的一个项目,通过nic.pl创建tweak项目.通过编写我们注入代码,然后执行编译.打包.安装等操作将代码注入iPhone安装的制定程序. theos环境配置 安装签 ...
- iOS逆向系列-Mach-O文件
概述 Mach-O是Mach object的缩写,是Mac\iOS上用于存储程序.库的标准格式. 常见的Mach-O文件 属于Mach-O格式的文件类型有. 可以在xnu源码中,查看到Mach-O格式 ...
- iOS逆向系列-Reveal
概述 Reveal是一款调试iOS程序UI界面的神器. 官网地址:https://revealall.com 下载:https://revealapp.com/download/ 建议下载Reveal ...
- iOS逆向系列-Cycript
概述 Cycript 是Objective-C++.ES(JavaScript).Java等语法的混合物. 可以用来探索.修改.调试正在运行的Mac\iOS App. 通过Cydia安装Cycript ...
- iOS逆向系列-动态调试
Xcode调试App原理 Mac安装了Xcode Xcode的安装包中包含了debugserver 可执行类型的Mach-O文件,iPhone第一次连接Xcode调试会将Xcode中的debugser ...
- iOS开发系列--通知与消息机制
概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...
- iOS开发系列--C语言之基础知识
概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...
随机推荐
- TFS 中如何将项目加入已有的源代码管理器中?
Visual Studio 的某解决方案已经加入 Team Foundation Server,现在再将已经存在的项目加入到解决方案中,可是签入时,并没有把新加入的项目签入,怎么办呢? 在团队资源管理 ...
- 6、通过Appium Desktop 实现录制功能
1.老规矩,我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮, 这是一种通过坐标定位元素的方式. 图中红色标记2为 “Start Recording” 按钮, ...
- PAT_A1112#Stucked Keyboard
Source: PAT A1112 Stucked Keyboard (20 分) Description: On a broken keyboard, some of the keys are al ...
- HTML5 placeholder实际应用经验分享及拓展
QQ邮箱登陆(http://mail.qq.com) 如下截图啦: 我在上面一个demo类似原理上做了下修改,制作了一个这样子交互效果的demo,希望对有兴趣的同行能帮上点忙,您可以狠狠地点击这里:透 ...
- 数据整理A
- 从内部重启python脚本
我有一个基于python的GTK应用程序,可以加载几个模块.它是从(linux)终端运行的,如下所示: ./myscript.py --some-flag setting 用户可以从程序中下载(使用G ...
- cookie、session、sessionStorage和localStorage
摘抄并整理后查 cookie 和 session 一般用来跟踪浏览器的用户身份 Session的存储方式 1. 使用cookie:保存 session id 的方式可以采用 cookie,这样在交互过 ...
- python 客户端 httplib 、 requests分别post数据(soap)
httplib import httplib soapbody =''' <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap ...
- Thinkphp 3.2 去掉index.php
1.httpd.conf中去掉LoadModule rewrite_module modules/mod_rewrite.so 前面的#号 2.httpd.conf 中 AllowOverride ...
- Dart编程布尔值
Dart为布尔数据类型提供内置支持.Dart中的布尔数据类型仅支持两个值true和false.关键字bool用于表示DART中的布尔值. 在dart中声明布尔变量的语法如下所示 bool var_na ...