美文网首页
逆向3(Theos)

逆向3(Theos)

作者: stockholder | 来源:发表于2017-08-16 22:48 被阅读0次
    theos简介

    theos是一个越狱开发包,下载安装简单,Logos语法简单,编译发布简单,另一个越狱工具iOSOpenDev被整合到了Xcode中,Theos并未整合到Xcode中.

    theos安装
    • 指定xcode
      如果Mac上有安装多个版本的Xcode,则需要使用xcode-select命令指定一个活动Xcode
    //查看xcode SDK版本
    xcodebuild -showsdks
    //xcode的版本信息
    xcodebuild -version
    //打印目前使用我的工具Xcode的版本
    xcode-select --print-path
    //指定xcode
    sudo xcode-select -switch /Applications/Xcode5.1.1/Xcode.app
    
    • 安装dpkg和LDID
      dpkg是Theos依赖的工具之一,dpkg是Debian Packager的缩写。我们可以使用dpkg来制作deb,Theos开发的插件都将会以deb的格式进行发布的。所以我在安装Theos之前要安装dpkg, 当然此处我们使用强大的brew来完成dpkg的安装。
      LDID是越狱祖师爷Saurik公司开发的一款二进制授权管理软件,可以对越狱应用进行SHA1运算生成授权,让软件包可以在iPhone上执行。在Theos开发插件中,iOS文件的签名是使用ldid工具来完成的,也就是说ldid取代了Xcode自带的Codesign。
      brew install dpkg ldid
    • 安装theos
    cd  /usr/local/opt/
    sudo git clone --recursive https://github.com/theos/theos.git theos 
    cd ~
    //如果没有./bash_profile文件,那么就用vim编辑来创建一个 
    //命令来创建,并且用编辑模式在里面添加两行
    sudo vim .bash_profile 
    export THEOS=/usr/local/opt/theos 
    export PATH=/usr/local /opt/theos/bin/:$PATH
    //测试是否安装成功
    nic.pl
    
    tweak创建、编译、打包与安装

    分下面四步:
    (1)nic.pl创建

    配置好theos后,选择iphone/tweak
    Project Name (required): 工程名称
    Package Name [com.yourcompany.firsttweak]: deb包的名字(类似于bundle identifier)                     
    Author/Maintainer Name [zl]: 作者
    [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: tweak作用对象的bundle identifier
    [iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:tweak安装完成后需要重启的应用
    

    创建后会在文件夹内默认生成四个文件

    • Makefile
    Makefile文件指定工程用到的文件、框架、库等信息,将整个过程自动化。其内容说明如下(NIC表示项目名称)
    
    include $(THEOS)/makefiles/common.mk 
    #固定写法,不要更改。TWEAK_NAME = NIC #Tweak名称跟control文件中的”Name“字段对应,一般不要更改(但我注意到,在创建Tweak的时候并没有提示要输入Project Name就默认生成了NIC)。
    
    NIC_FILES = Tweak.xm 
    #Tweak包含的源文件(不包括头文件),多个文件间以空格分隔,可以按需要更改。
    
    export ARCHS = armv7 arm64 
    #默认文件未提供。支持的处理器架构,多个以空格分隔。需要注意的是,采用arm64架构的App不兼容armv7/armv7s架构,必须适配arm64架构的dylib。在绝大多数情况下,这里固定填写”arm7 arm64“就可以了。
    
    TARGET = iphone:Base SDK:Deployment Target 
    #指定SDK版本。如:iphone:8.1:8.0表示指定彩8.1版本的SDK,且发布对象为iOS8.0及以上版本。也可以把”Base SDK“设置为”latest“,指定以Xcode附带的最新版本SDK编译。
    
    export NIC_FRAMEWORKS = framework name 
    #默认文件未提供。导入framework。如:NIC_FRAMEWORKS = UIKit CoreAudio
    
    export NIC_PRIVATE_FRAMEWORKS = private framework name
    #默认文件未提供。导入private framework。如:NIC_FRAMEWORKS = AppSupport ChatKit。需要注意的是:在导入之前一定要确定导入的private framework确实存在,因为private framework是AppStore开发所不允许使用的,它的内容在每个iOS版本之间可能发生变化。如:BaseBoard框架在iOS8以上存在,在iOS7就没有。这种情况通过弱链接或dlopen()、dlsym()和dlclose()系列函数动态调用private framework来解决。
    
    export NIC_LDFLAGS = -lx 
    #默认文件未提供。链接Mach-O对象。Theos采用GNU Linker来链接Mack-O对象,包括.dylib、.a和.o。-lx代表链接libx.a或libx.dylib,即给”x“加上”lib“的前缀,以及“.a”或“.dylib”的后缀;如果x是“y.o”的形式,则直接链接y.o,不加任何前缀或后缀。如要链接libsqlite3.0.dylib、libz.dylib和dylib1.o,这样写就行:NIC_LDFLAGS = -lz -lsqlite3.0 -dylib1.o
    
    include $(THEOS_MAKE_PATH)/tweak.mk 
    #根据不同的Theos工程类型,指定不同的.mk文件。可以按需更改。
    
    after-install::install.exec "killall -9 SpringBoard" 
    #表示在Tweak安装之后杀掉SpringBoard进程,好让CydiaSubstrate在进程启动时加载对应的dylib。
    
    • Tweak.xm
      用Theos创建tweak工程,默认生成的源文件是Tweak.xm。“xm”中的“x”代表这个文件支持Logos语法,如果后缀名是单独一个“x”,说明源文件支持Logos和C语法;如果后缀名是“xm”,说明源文件支持Logos和C/C++语法
      关于Logos,请参考 http://iphonedevwiki.net/index.php/Logos

    • control

    control文件记录了deb包管理系统所需的基本信息,会被打包进deb包里。基本字段说明:
    
    Package:
    用于描述这个deb包的名字,采用的命名方式同bundle identifier类似,均为反向DNS格式。可以按需更改。
    
    Name:
    用于描述这个工程的名字,可以按需更改。
    
    Depends:
    用于描述这个deb包的“依赖”。“依赖”指的是这个程序运行的基本条件,可以填写固件版本或其它程序,如果当前iOS不满足“依赖”中定义的条件,则此tweak无法正常运行。如:Depends:mobilesubstrate,firmware(>=8.0)表示当前iOS版本必须在8.0以上,且必须安装CydiaSubstrate才能正常运行这个tweak,可以按需更改。
    
    Version:用于描述这个deb包的版本号,可以按需更改。
    Architecture:用于描述deb包安装的目标设备架构,不要更改。
    Description:是deb包的简介,可以更改。
    Maintainter:用于描述deb包的维护人,可以按需更改。
    Author:用于描述tweak的作者,可以按需更改。
    Section:用于描述deb包所属的程序类别,不要更改。
    
    • NIC.plist
    该plist文件的作用和App中的Info.plist类似,它记录了一些配置信息,描述了tweak的作用范围。通过Xcode打开该文件,我们可以看到它的最外层是一个Dictionary,只有一个名为“Filter”的键。Filter下是一系列Array,可以分为三类:
    
    Bundle:指定若干bundle为tweak的作用对象。如:com.apple.springboard
    
    Classes:指定若干class为tweak的作用对象。如:NSString
    
    Executables:指定若干可执行文件为tweak的作用对象。如:callservicesd
    
    这三类Array可以混合使用,但当Filter下有不同类的Array时,需要添加一个“Mode: Any”键值对。当Filter下的Array只有一类时,不需要添加。
    

    (2)make编译
    (3)make package打包

    问题1:

    dpkg-deb: error: obsolete compression type 'lzma'; use xz instead

    • 原因:
      原因是dpkg有两个不同的版本,最新版本不支持lzma。
    • 解决办法:两种
      第一种:修改配置文件
    cd /usr/local/opt/theos/makefiles/package
    sudo vim deb.mk 
    将下面的变量改为(第六行)
    _THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip
    

    第二种:降级

    $ brew remove dpkg 
    $ brew install --force-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb  
    $ brew pin dpkg  
    
    问题二

    make[2]: Nothing to be done for `internal-library-compile'.

    • 解决办法
      按照问题1的解决办法来

    如果出错要看更多信息,使用下面的命令
    make package messages=yes
    (4)make install安装

    安装会让你输入两次iphone密码 , 默认是alpine

    • 也可以一步到位 make package install 直接编译, 打包, 安装
    再次执行make package install之前需要清理之前生成的文件,
    否则将安装不成功。执行以下命令达到清理的目的:
    make clean
    rm -rf ./obj ./packages
    
    也可以在MakeFile里面配置
    clean::
        rm -rf ./packages/* ./obj
    这样执行make clean就可以了
    
    安装方式

    1.如果没有配置makefile,那么 make install就没法使用,需要手动执行安装

    //编译打包
    make
    make package
    //其实下面的过程就是make package做的事
    cd packages
    //将生成的包拷贝到iphone的tmp目录
    scp com.iosre.testtweak_0.0.1-18+debug_iphoneos-arm.deb root@192.168.0.101:/tmp
    //连接iPhone后去到tmp目录,就可以看到包
    //安装
    iPhone:/tmp root# dpkg -i com.iosre.testtweak_0.0.1-18+debug_iphoneos-arm.deb
    //如果hook的是springboard,就重启一下,才能看到效果
     killall -9 SpringBoard
    
    1. 自动安装(写脚本)

    deb包里面的结构:DEBIAN目录 和 软件具体安装目录(模拟安装目录)(如etc, usr, opt, tmp等)。

    在DEBIAN目录中至少有control文件,还可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和conffiles等。

    • control文件:
      描述软件包的名称(Package),版本(Version),描述(Description)等,是deb包必须剧本的描述性文件,以便于软件的安装管理和索引。
    • prerm文件:软件卸载前需要执行的脚本。
    • postinst文件
      包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。内容( 软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst):
    # !/bin/sh
    echo "my deb" >/home/mydeb.log
    
    • postrm文件:
      软件卸载后需要执行的脚本。内容( 软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm)
    # !/bin/sh
    rm -rf /home/mydeb.lo
    
    其他
    • 安装deb包
      dpkg -i com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
    • 查看deb包信息(其实也就是control文件的信息 )
      dpkg -I com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
    • 查看deb包目录结构
      dpkg -c com.iosre.testtweak_0.0.1-20+debug_iphoneos-arm.deb
    • 删除安装的deb包
    先dpkg -I XXX.deb,找到 Package: com.iosre.autoTwaek
    然后 dpkg -r com.iosre.autoTwaek
    
    • 查看日志
    tail -f /var/log/syslog 
    //查看指定日志
    tail -f /var/log/syslog | grep SpringBoard
    如果出现 -sh: tail: command not found
    去到Cydia,搜索Core Utilities,安装
    还要安装syslogd: apt-get install syslogd
    control + c  //退出查看
    
    • 常用Logos语法简介:
    %hook 指定需要hook的类名,以%end结尾
    %log 用来打印log的,将信息输入到syslog中,如%log((NSString *)@"ZeluLi")
    %orig 执行被hook函数的原始代码,类似于super.method功能
    %group 该指令用于%hook的分组,%group后边跟的是组名,%group也是必须以%end结尾,其中可以包含多个%hook
    %init 该指令用来初始化某个%group,一个group只有被初始化后才可生效,init必须在hook中进行执行。
    %ctor tweak的构造器,用来初始化,如果不显式定义,Theos就会自动生成一个%ctor,并在其中调用%init(_ungrouped). 如:%ctor { %init(_ungrouped)}
    %new 该指令用来给现有的class添加一个新的函数。与Runtime中的class_addMethod相同。
    %c 该指令用来获取一个类的名称,类似于objc_getClass。
    

    相关文章

      网友评论

          本文标题:逆向3(Theos)

          本文链接:https://www.haomeiwen.com/subject/nmyurxtx.html