Theos

作者: coder_feng | 来源:发表于2020-05-10 14:28 被阅读0次

    安装签名工具ldid

    先确保安装了brew

    $ /usr/bin/ruby -e "$(curl -fsSL

    https://raw.githubusercontent.com/Homebrew/install/master/install)"

    修改环境变量

    修改用户的配置文件

    vim ~/.bash_profile

    在.bash_profile 文件后面加入以下2行

    export THEOS = ~/theos

    export PATH=$THEOS/bin:$PATH

    让.bash_profile配置的环境变量立即生效(或者重新打开终端)

    source ~/.bash_profile

    下载theos

    建议在$THEOS目录下载代码(也就是刚才配置的~/theos 目录)

    git clone --recursive https://github.com/theos/theos.git $THEOS

    新建tweak项目

    cd到一个存放项目代码的文件夹(比如桌面)

    选择[11.] iphone/tweak(由可能不同版本的theos不一样的选项数字,但是都是选择这一项)

    创建theos项目

    填写项目信息

    1.Project Name:项目名称

    2.Package Name:项目ID(随便写)

    3.Author/Maintainer/Name

    4.[iphone/tweak]MobileSubstrate Bundle filter

    需要修改的APP的Bundle Identifier,可以通过Cycript查看APP的bundle Identifier

    5.[iphone/tweak] List of applications to terminate upon installation

    直接敲回车按照默认做法就行

    项目

    编辑Makefile

    在前面加入环境变量,写清楚通过哪个IP和端口访问手机

    THEOS_DEVICE_IP;THEOS_DEVICE_PORT

    MAKEFILE

    如果不希望每个项目的Makefile都编写IP和端口环境变量,也可以添加到用户配置文件中,编辑完毕后,$source ~/.bash_profile 让配置生效(或者重启终端)

    bash_profile

    如果是通过wifi安装的话,那么THEOS_DEVICE_IP = 手机wifi IP;THEOS_DEVICE_PORT=22;

    编写代码

    打开Tweak.xm 文件

    tweak.xm

    怎么知道知道这个Tweak.xm 文件怎么写,我们通过Reveal打开对应的App,然后出现广告的页面,通过Reveal可以找到相关的类,然后再通过class-dump导出header文件查找出那个类,然后从那个类里面,获取相关的方法;

    reveal

    就是通过类似方式去去除广告的

    编译-打包-安装

    编译:make

    打包:make package(打包成deb)

    安装:make install(默认会自动重启SpringBoard)

    可能遇到的问题

    1.make package的错误

    error

    是因为打包压缩方式有问题,改成gzip压缩就行了,修改dm.pl 文件,用#号注释下面两句

    dm.pl

    修改deb.mk 文件第6行的压缩方式为gzip

    2.make的错误

    error

    是因为多个Xcode导致路径(有可能安装了好几个Xcode),需要指定一下Xcode

    error error

    是因为之前已经编译过,有缓存导致的,clean一下就可以了

    error

    上面的操作,如果成功之后,会发现在手机动态库加载的目录下有

    动态库加载路径

    练习

    1.将桌面的更新数字去掉;

    2.给微信的发现界面增加2行功能;

    微信需要通过dumpdecrypted.dylib 来才能脱壳成功DYLD_INSERT_LIBRARIES= dumpdecrypted.dylib /path/wechat

    theos资料查询

    目录架构:https://github.com/theos/theos/wiki/Structure

    环境变量:http://iphonedevwiki.net/index.php/Theos

    Logos语法:http://iphonedevwiki.net/index.php/Logos

    %hook,%end:hook 一个类的开始和结束

    %log:打印方法调用详情(可以通过Xcode-Window-Devices and Simulators)查看日志;

    HBDebugLog:跟NSLog类似

    %new:添加一个新的方法

    %c(className):生成一个Class对象,比如%c(NSObject),类似于NSStringFromClass,objc_getClass()

    %orig:函数原来的代码逻辑

    %ctor:在加载动态库时调用

    %dtor:在程序退出时调用

    logify.pl:可以将一个头文件快速转换成已经包含打印信息的xml文件(logify.pl xx.h > xx.xm);

    如果有额外的资源文件(比如图片),放在项目的layout文件夹中,对应着手机的根路径

    theos-tweak的实现过程

    编写Tweak代码;

    make:编译成Tweak代码为动态库(*.dylib)

    make package:将dylib打包成为deb文件

    make install:将deb文件传送到手机上,通过Cydia安装deb

    插件将会安装在/Library/MobileSubstrate/DynamicLibraries文件夹中(*.dylib:编译后的Tweak代码,*.plist存放着需要hook的APP ID)

    当打开APP时,Cydia Substrate (Cydia 已自动安装的插件)会让App去加载对应的dylib,修改App内存中的代码逻辑,去执行dylib中的函数代码

    疑问?

    未脱壳的App是否支持tweak?

    支持,因为tweak是在内存中实现的,并没有修改.app包中的可执行文件

    tweak是否永久性?

    取决于tweak中用到的App代码是否被修改过

    未越狱的手机是否支持tweak?

    不支持

    能不能对Swift、C函数进行tweak?

    可以,方式跟OC不一样

    能不能对游戏项目进行tweak?

    可以,但是游戏大多数是通过C#、C++编写的,而且类名函数名会进行混淆操作

    logify.pl 注意点

    logify.pl 生成的xm文件,有很多时候是编译不通过的,需要进行一些处理

    删除__weak;删除inout;删除协议,比如(@protocol XXTestDelegate)

    删掉-(void).cxx_destruct(%log;%orig;}

    删除HBLogDebug(@"=0x%x",(unsigned int)r);

    替换类名为void,不如将XXPerson *替换为void *,或者声明一下类信息@class XXPerson

    相关文章

      网友评论

        本文标题:Theos

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