Tweak_01

http://www.cnblogs.com/mengshu-lbq/archive/2013/01/28/2879866.html XCODE使用,或者下面这种方法使用。

1.Theos越狱开发工具包。(IOSOpenDev 整合在Xcode里面的)安装Theos安装--(github去下载Theos)

    1>.https://github.com/DHowett/    去下载。存放到opt/theos下    

   2>配置ldid (ldid专门来签名IOS可执行文件的工具)  http://joedj.net/ldid  自    动下载  把它放 在/opt/theos/bin/    赋予权限 sudo  chmod 777  /opt/theos/bin/ldid  

 3>.配置CydiaSubstrate

1)首先运行Theos自动化配置脚本,sudo  /opt/theos/bin/bootstrap.sh  substrate 

2)出现一个BUG  解决办法Cydia中下载CydiaSubstrate    下载MAC连接手机然后通过用iFunBox等方式将IOS上“Library/FrameWorks/CydiaSubstrate.framework/CydiaSubstrate”拷贝OSX中将其命名为libsubstrate.dylib 放到“/opt/theos/lib/libsubstrate.dylib”

4>.配置dpkg-deb deb是越狱开发安装包的标准格式,dpkg-deb用于操作deb的工具有了这个工具Theos才能把工程打包deb文件。

 https://github.com/DHowett/dm.pl/    下载dm.pl将它命名为dpkg-deb放 到/opt/theos/bin/目录下面。然后执行命令赋予可执行的权限。

sudo chmod 777 /opt/theos/bin/dpkg-deb

5>.使用Theos用法介绍

2.创建工程启动NIC

/opt/theos/bin/nic.pl   ----->  启动 下面这句话必须写在你要创建的位置目录。


Tweak_01_第1张图片


0.MobileSubstrate Bundle filter tweak作用对象的bundle identifer

3.最后重启应用,以进程名表示。

Tweak_01_第2张图片

4.查看目录下 创建成功。

Tweak_01_第3张图片



2》工程文件。

1.Makefile:文件制定工程用到的文件,框架,库等信息,将整个过程自动化,

Tweak_01_第4张图片

   1. /iOS_twproject_FILES =Tweak.xm 多个文件空格隔开

  2./开发的一般是Application  Tweak tool 程序  ,他们对应的.mk文件是Application.mk  Tweak.mk  tool.mk

#include $(THEOS_MAKE_PATH)/tweak.mk

3.如何制定SDK版本?怎么导入framework?lib文件在哪里链接呢?

   (1)制定处理器架构:ARCHS=armv7 arm64

  (2)制定SDK版本:TARGET = iPhone:Base SDK :Deployment Target iPhone:8.1:8.0      指定是8.1的SDK支持的版本是8.0以上。也可以改成

TARGET = iPhone:latest :8.0

  (3)导入framework 

   1>iOSREProject_FRAMEWORKS = framework name

         exmp-> 

         iOSREProject_FRAMEWORKS = UIKit CoreTelephony CoreAudio

   2> iOSREProject_PRIVATE_FRAMEWORKS =private  framework name    

         iOSREProject_PRIVATE_FRAMEWORKS = AppSupport ChatKit IMCore

   3>链接Mach-O对象(包括.dylib  .a .o )

          iOSREProject_LDFLAGS=-lx  比如链接libsqlite3.0.dylib  libz.dylib和dylib1.0   iOSREProject_LDFLAGS=-lz  -lsqlite3.0 -dylib1.0 

2.Tweak.xm  xm 和 x代表这个文件支持Logos语法 如果后缀名是单独一个x说明源文件支持Logos 和 C语法,如果后缀名是‘xm’说明源文件支持Logos 和C、c++语法 与m和mm的区别类似

3.Theos 的Logos语法:

(1.)初始化函数:%init      %init([=, …])      %init(Group[, [+|-]=, …])初始化一个组,如果带参数初始化制定的group 如果没有参数表示初始化’_ungrouped’组.必须在%hook 或者%ctor 只有调用了%init对应的%group才能起作用。

 (2.)代码块指令    这类指令定义HOOK代码块,必须以%end结束.

        %hook class使用objc_getClass(Classname)获取要被HOOK的类,在%hook和%end之间编写代理函数,对于钩子的安装,Theos使用MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result)完成,这些对我们来说是透明的,我们不需要手动调用,Logos预处理器会自动生成这些代码.

%hook SBApplicationController

-(void)uninstallApplication:(SBApplication *)application {

NSLog(@”Hello World!”);

%orig; // 调用原始方法

return;

}

%end //结束标记

预处理后为:

//先获取类对象,对应%hook SBApplicationController

Class _logos_class$initGroup$SBApplicationController = objc_getClass(“SBApplicationController”);

//设置hook

MSHookMessageEx(

_logos_class$initGroup$SBApplicationController, //要hook的类

@selector(uninstallApplication), //要hook的函数

(IMP)&_logos_method$initGroup$SBApplicationController$uninstallApplication, //代理函数

(IMP*)&_logos_orig$initGroup$SBApplicationController$uninstallApplication); //存储原始函数

(3)%subclass

%subclass Classname: Superclass

为现有的类(Supercalss)添加子类,这个动作在运行时创建并填充.

theos使用objc_allocateClassPair()再调用objc_registerClassPair()完成子类的添加功能.

(4)%group分组便于代码管理及按条件初始化分组 必须以%end结尾,一个%group可以包含多个%hook所有不属于某个自定义group的%hook_ungrounped

%grounp IOS7Hook

%hook ios7Class

%end%end//ios7hook

%group Groupname

这是为hook块分组,,由于有些类在一些特殊条件下才会被初始化,一如果在Tweaks初始化时就去设置钩子,肯定是失败的,所以我们也可以在特定条件下init,比如hook一些不常驻内存的类,再或者在不同的IOS版本中hook不同的函数.有些简单的Tweaks并没有显式声明%group,其实Theos也提供了一个默认的组叫”ungrouped”,所有未被分组的hook都会被设置到这个组里,默认在%ctor函数里面调用.

(5)%new

%hook %new %end

%new(signature)

为类或子类添加一个新的方法函数.必须在%hook块或%subclass块使用.theos使用class_addMethod完成.

(6)%ctor

%ctor { … }

这是Theos提供的默认构造函数(默认优先级),当然我们可以编写自己的构造函数让Theos来调用,但是自定义的%ctor函数里面必须手动调用%init对%group自定义的组进行初始化.%ctor不需要以%end结尾。

(7)%end

表示一个钩子/子类/组作用块的结束

(8)%c

%c([+|-]Class)

动态获取一个类,如果用’+’标记,则获取类的对象,如果用’-’标记则获取实例对象,默认是’-’

%c在经过Logos预处理后变为_logos_static_class_lookup(classname),其实内部还是调用objc_getClass(classname)

(9)%orig

%orig(arg1,arg2,arg3) %orig函数执行原始代码如果去掉原始函数不被执行。还可以利用%orig 更改原始函数的参数。


调用被hook的原始函数,这个函数不能用在%new创建的函数中.

(10)%log

%log([(), …]) %log((NSString *)@"iosre",(NSString *)@"iosre");

打印函数的参数.

(11)Logos的文件扩展名

.x    由Logos处理,然后预处理并编译成object-c

.xm  由Logos处理,然后预处理并编译为objective-c++

.xi    先处理为objective-c,然后Logos处理返回结果最后被编译

.xmi 先处理为objective-c++

默认情况下,Logos的预处理器只在生成时处理.xm文件,不过,有时一个hook代码可能要用在多个文件里.首先把主文件名改为.xmi文件,其他的.xm文件可以使用#include命令,Logos在预处理之前会将这些文件添加到主文件中.


4.control文件记录了deb包管理系统所需的基本信息会被打包进deb

很多信息直接体现在Cydia中。

Package: zfl             ----->描述这个deb包的名字采用的命名方式同bundle identifier类似均为反向DNS格式,可以按需更改。

Name: iOS_twProject--->描述工程的名字。

Depends: mobilesubstrate----->描述这个deb包的依赖,

Version: 0.0.1------》描述deb包的版本号

Architecture: iphoneos-arm-----设备架构

Description: An awesome MobileSubstrate tweak!--》简单介绍,

Maintainer: zhangfl----->维护人

Author: zhangfl=---->tweak的作者

Section: Tweaks----->程序的类别。

Installed-Size :104-=----》这里是估算安装大小。

5.还有一个文件是iOS_twProjeect.plist

这个plist文件的作用和APP里面的info.plist类似的,记录的是配置信息,描述tweak的作用范围,我们可以用plutil也可以用Xcode来编辑它,plist最外层是一个dictionary只有一个名为“Filter”的key

Tweak_01_第5张图片

可以分为三类,Bundles  classes  Executables 


5编译+打包+安装。

一>编译

     1.”make“ 来编译Theos工程, 运行"make"  ---->编译之后多了一个obj文件夹

(在obj文件里面有文件.dylib).dylib就是tweak的核心。

二>打包

   1,打包使用“make package”命令 该命令来自于Theos本身,(其实就是限制性make 的命令 然后执行“dpkg-deb”)命令。

2.使用改命令之后会生成一个.deb文件,这个文件就是最终发布的安装包。

3.同时还会生成一个"_"文件夹这个文件里面包含两个文件夹,分别是“DEBIAN”和"Library"其实“DEBIAN”里面包含工程里面的control文件,

二>安装

 1.把deb安装到ios中去,命令安装。

Makefile的最上一行加上本机IP地址,

THEOS_DEVICE_IP=iOSIP

然后调用“make package install”命令完成编译打包安装。需要输入两次密码。

你可能感兴趣的:(Tweak_01)