iOS Hacker逆向工程乐Coding

逆向第二课(Theos安装配置及Tweak工作原理)

2017-09-06  本文已影响300人  乐Coding

Theos安装与配置

Theos是一个越狱开发工具包,使用它可以创建Tweak项目,动态Hook第三方程序。GitHub链接:https://github.com/theos/theos ,官网安装教程可以参考:https://github.com/theos/theos/wiki/Installation

安装
  1. 安装依赖库

    安装Theos之前先安装三个依赖库,dpkg、fakeroot和ldid

    $ brew install ldid fakeroot
    $ brew install --from-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb
    $ brew pin dpkg
    
    • ldid(作者:saurik )
      维基百科:http://iphonedevwiki.net/index.php/Ldid

      越狱iPhone下的签名工具(更改授权entitlements),可以为theos开发的程序进程签名(支持在OS X和iOS上运行)。

    • dpkg使用很简单

      $ dpkg -i/-r  deb包安装/卸载
      $ dpkg -s com.iosre.myiosreproject 查看安装包信息
      

  1. 检查Mac电脑是否存在 /opt目录,没有自己创建一个。
$ cd /opt
  1. 在新建的/opt目录下clone项目源码
$ git clone --recursive https://github.com/theos/theos.git
  1. 下载完成后执行以下命令,修改theos权限
$ sudo chown -R $(id -u):$(id -g) theos 
  1. 修改环境变量

    打开 ~/.bash_profile文件,添加以下两行

    export THEOS=/opt/theos
    export PATH=/opt/theos/bin/:$PATH
    

    配置好后,命令行查看下是否成功。

    ➜  theos git:(master) ✗ echo $THEOS
    /opt/theos
    

    如果你Mac安装了omyzsh,可能上面配置后并不会成功,解决办法是:在~/.zshrc中添加下面一行。

    source ~/.bash_profile

第一个逆向工程

下面创建我们的第一个逆向程序,以创建一个SpringBoard的动态库为例。

创建项目
class2-001.png
项目目录介绍

项目创建完成后,可以看到工程目录有四个文件:Makefile、SpringBoardTest.plist、Tweak.xm 、control

编译工程

我们实现一个在手机中每次点击Home键弹框的功能。

class2_002.png

执行make install 时会让输入两次手机sshd的密码。安装成功后点击手机Home键就会弹框。

class2_0021.jpg

手机中卸载Tweak方法

  • 在Cydia中找到我们的项目,点击卸载
  • ssh链接到手机,使用dpkg -r bundlID ,bundlID是创建Tweak项目时输入的包名。

Deb包介绍

执行完make package这一步时,在项目目录就会多了几个目录。

Logos语法

关于Logos语法可以看wiki学习。维基百科:http://iphonedevwiki.net/index.php/Logos

Tweak工作原理

Cydia Substrate 原名为 Mobile Substrate 已经正式更名为 Cydia Substrate。它是越狱后cydia插件/软件(主要指theos开发的tweak)运行的一个基础依赖包。提供软件运行的公共库,可以用来动态替换内存中的代码、数据等所以iOS系统越狱环境下安装绝大部分插件,必须首先安装Cydia Substrate。

Cydia Substrate主要由3部分组成:MobileHooker,MobileLoader 和 safe mode

MobileHooker

MobileHooker用于替换覆盖系统的方法,这个过程被称为Hooking(挂钩)
它主要包含两个函数:

void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
void MSHookFunction(voidfunction,void replacement,void** p_original);

MSHookMessageEx 主要作用于Objective-C函数

MSHookFunction 主要作用于C和C++函数

Logos语法%hook就是对此函数做了一层封装,让编写hook代码变的更直观。

MobileLoader

MobileLoader 将tweak插件注入到第三方应用程序中。

启动时MobileLoader会根据/Library/MobileSubstrate/DynamicLibraries/目录中plist文件指定的作用范围,
有选择的在第三方进程空间里通过dlopen函数加载同名的dylib。

每一个.dylib文件都会有一个同名的.plist文件。

.plist文件的作用就是用来指定tweak插件的作用对象。

/Library/MobileSubstrate/DynamicLibraries/目录中文件如下,会发现有一个我们刚创建的SpringBoardTest.dylib和SpringBoardTest.plist。

class2_003.png
safe mode

更多iOS、Swift、iOS逆向最新文章请关注微信公众账号:乐Coding,或者微信扫描下方二维码关注

lecoding

icon.jpg

上一篇下一篇

猜你喜欢

热点阅读