美文网首页
18、越狱调试

18、越狱调试

作者: Jax_YD | 来源:发表于2021-06-23 09:22 被阅读0次
image

本章中我们会在越狱手机上对APP进行调试,我们将进行下面几个内容的探索:

1、将自定义.cy文件引入到手机磁盘,连接手机APP并调试(非砸壳APP)。
2、class_dump,导出APP的头文件。
3、Reveal,UI调试。
4、debugserver


一、hank.cy文件的使用

1.1、拷贝hank.cy并使用

首先这里提供一个hank.cy文件,目的是帮助我们调试APP。hank.cy
拿到hank.cy文件之后,我们要做的就是将它导入到我们的越狱手机里面,相当于一个插件。

  • 1、USB连接手机
    这一步的操作,我们在16、越狱 & OpenSSH里面有详细的讲解。看文章的最后。

  • 2、创建专属文件夹
    一般情况先我们会把hank.cy文件拷贝到/usr/lib/cycript0.9文件夹下面,但是这样做是不规范的。我们参考cycript作者saurik的格式,在com文件夹下面建立自己的文件夹,用于存放我们自己的插件。

    image
    比如我这边就建立了一个Jax文件夹。
// 使用 `mkdir`指令创建文件夹
$ mkdir <文件名>
  • 3、拷贝hank.cy到指定文件夹
$ scp -P 2222 ./hank.cy root@localhost:/usr/lib/cycript0.9/com/Jax
  • 4、hank.cy的使用
    hank.cy拷贝到越狱手机指定文件夹之后,我们就可以来是使用了。

    • 通过cycript指令,连接正在运行的APP。
      这里我们可以通过 ps -A指令来查看当前运行的进程都有哪些。
      连接APP:
$ cycript -p <进程名>
或者
$ cycript -p <进程编号>
  • 使用hank.cy
    使用之前要先引入hank.cy,由于我们没有直接放在cycrity0.9这个文件夹里面,所有引入的时候需要加上路径:
$ @import com.Jax.hank
image
// 获取ROOT VC
$ HKRootvc ()

// 获取当前控制器
$ HKCurrentVC ()

1.2、theos && ldid 的配置

我们在安装MonkeyDev的时候,已经安装了theos,同时也安装了ldid。我们可以通过brew list指令来查看一下:

image
theos我安装在了opt目录下(cmd + shift + .可以查看隐藏文件夹):
image
确保了theos安装完毕之后,也好确保其环境变量也配置好了:
image
1.3、查看图层信息

接着上面的,我们已经通过HKCurrentVC ()拿到了APP当前页面的控制器,那么我们来打印一下当前的图层信息:

$ #0x13a041600.view.recursiveDescription() .toString ()
image
由于Unicode编码问题,打印出来的图层信息里面,汉字显示的是Unicode编码。这个时候我们可以使用在线转换的形式,知道我们想要找的控件,当然我们页面通过Python 指令将APP页面中的汉字转换为Unicode编码,再搜索编码定位到控件。
image
image
1.4、定位Target && Function

比如我们上面定位到了一个UIButton,那么我们可以继续查找UIButton所对应的Target和触发事件。

  • 获取所有的Target
$ #<组件地址>.allTargets
image
  • 获取控件所有的Events
$ #<组件地址>.allControlEvents
image 这里看到,输出了一个64
其实UIControlEventTouchUpInside就是64:
image
  • 获取触发事件
    在得到了TargetEvent之后,我们就可以获取到当前控件所触发的方法是什么了。
$ [#<组件地址> actionsForTarget: #<Target地址> forControlEvent: <Event编号>]
image

此时我们已经知道了,我们想要HOOK的方法,以及对应的控件名,Target名等等。这个时候我们只需要去砸壳APP,HOOK对应的方法就可以了。

这个时候其实我们严谨一点,还要确认tipButtonAction是否有参数和返回值。此时我们利用class_dump去导出所有的头文件。


二、class-dump的使用

同样的我们之前在安装MonkeyDev的时候,已经安装了class-dump:

image

如果没有安装可以按一下步骤安装官方网站

  1. 下载class-dump$ git clone https://github.com/nygard/class-dump
  2. 编译项目,生成命令行工具。可直接使用。
  3. 命令行工具导入/usr/local/bin/class-dump,给权限:$ sudo chmod +x class-dump
  • 使用class-dump
    在得到砸壳的APP包之后,使用class-dump17、应用砸壳

    • 单一架构
      $ class-dump -H <MachO文件> -o <头文件存放的目录>

    • 多种架构
      比如arm64
      $ class-dump --arch arm64 -H <MachO文件> -o <头文件存放的目录>

    拿到所有的头文件之后,全局搜所一下(注:我这里使用的是Sublime Text打开的所有头文件,使用cmd + shift + F全局搜索):

    image

三、Theos 的使用

3.1、tweak

tweak代表越狱手机中Cydia里面的插件。

image
运行成功之后,我们会得到如下文件,这就是我们的teak工程:
image
3.2、接下来我们就要配置tweak工程:
  • 配置Makefile文件,由于此时用的是USB连接,所有我是这样配置的。(如果是WiFi连接,修改一下就好了):
    image

注意:tweak工程不要放在有中文的路径下,否则后面的执行会报错

3.3、注入HOOK代码:

撰写HOOK代码

image

注:HOOK代码的注入分为三个步骤
1、make --- 编译
2、make package --- 打包
3、make install --- 注入

  • 执行make(此时我将工程文件夹放在了桌面)
    此时我执行make指令,遇到了下面的错误:
    image
    这是因为我们使用了NSLog但是并没有引入Foundation框架。此时我们可以引入Foundation框架,也可以引入UIKit框架:
    image
    再次make就成功了:
    image

这里有个坑,大家要注意了,这里我之前的是输出是NSLog(@"\n\n\n\nHOOK到了\n\n\n\n\n\");但是一直报错,我就给改成了NSLog(@"hook");就成功了。

\color{red}{我后来发现我是多写了一个`\`;当然,如果检查代码没有问题,还是报错,那就将}Tweak.x\color{red}{改成}Tweak.xm\color{red}{同时}Makefile\color{red}{里面的}tuyaSmartDemo_FILES = Tweak.x\color{red}{也要改成}tuyaSmartDemo_FILES = Tweak.xm

这里还是theos的适配问题,大家注意一下。

  • 执行make package --- 打包

    image
  • 执行make install --- 注入

    image

执行成功之后,在控制台可以看到我们HOOK的代码。

image

注意:上面的流程执行完以后,我们就已经使用theos完成了HOOK,这个过程其实是我们自己写了一个插件,并安装到了预约手机。可以在Cydia里面看到(注:如果插件失效,直接卸载掉,重复上面的流程就可以了。):

image
  • 其他指令

make clean 清理缓存。


3.4、theos 注意事项
  • 注意事项1

theos和Xcode是对应的。如果有多个Xcode,一定要指定Xcode。

不如我现在的Xcode Select路径是:


image

这个时候可以使用如下指令自定Xcode Select:

xcode-select --switch <Xcode Select路径>
  • 注意事项2

theos创建的tweak工程路径不能有中文。


四、 Reveal

  • 手机端安装插件
    在越狱手机里面安装Reveal Loader插件:
    image

安装完成之后,我们会在手机的设置页面发现,多了一个Reveal:

image
在这里面我们可以选自需要Reveal的APP:
image
  • Mac端操作
    此时我们打开Mac端的Reveal发现并没有任何的变化。这是因为有一个关键的步骤我们还没做。
    image

这个时候,我们点击help -> Show Reveal Library in Finder -> iOS Library

image
来到这里:
image

这里面的RevealServer可执行文件是关键。我们要把它拷贝到越狱手机里面。

步骤如下:

  1. USB连接手机。

  2. 进入根部目录的Library文件夹。(注意:一定要进入根目录下,否则路径不对,是没有效果的。下图是我如何找到根目录的,仅供参考)

    image
  3. 创建RHRevealLoader文件夹:mkdir RHRevealLoader

  4. RevealServer拷贝到RHRevealLoader文件夹下,并改名为:libReveal.dylib

    image
  5. 上面的配置完之后,我们会在Mac端Reveal里面看到我们连接的APP,并且可以进行UI调试:

    image

注:Reveal调试不会阻塞进程,可以试试更改UI内容。


五、debugserver

5.1 debugserver原理与简单使用

我们Xcode中的lldb可以调试手机中的应用,是因为手机中的debugserver开启的相关服务。所以在越狱环境中,我们只需要开启debugserver服务,就可以利用LLDB远程调试三方应用了。

image
  • 举个例子,我们上面对正版应用进行了reveal。但是如果逆向正版应用的过程中,希望进行断点调试该怎么做呢?这个使用可以通过LLDB来进行断点调试,前提是我们要附加进程。LLDB的安装与使用

1、首先,我们创建一个Xcode工程(随便创建一个就可以)。
2、在Debug -> Attach to Process中选择我们要逆向的APP进程,附加上去:

image

3、在控制台,我们就可以惊醒调试了,而且还可以ViewDebug

image
5.2、debugserver的位置探索

/Applications/Xcode.app/Contents/Developer/Platforms里面,我们找到iPhoneOS.platform -> DeviceSupport,在这个文件夹里面有很多系统版本,我们随便找一个系统版本中,找到DeveloperDiskImage.dmg,打开它。

image
image
找到usr -> bin -> debugserver。这就是debugserver的位置。
image
我们的Xcode在第一次连接手机的时候,会将对应系统里面的信息拷贝到手机,其中就包含debugserver。位置如下:
/Developer/usr/bin
image

那么我们怎么验证这两个debugserver是同一个呢?
这个时候,我们可以对两个debugserver进行md5运算,如果得到的结果一样,那么这两个debugserver就一样的。

  • 对Mac端对应系统里面的debugserver进行md5运算:
    得到的结果是:b771aad8917de2ff41feb5acfe4a9b15

    image
  • 将手机端的debugserver拷贝出来,进行md5运算:
    得到的结果是:b771aad8917de2ff41feb5acfe4a9b15

    image

可以发现,得到的结果是一样的,所以两个debugserver是一样的;换句话说,手机端的debugserver就是从Mac端拷贝过去的。


5.3、启动debugserver

我们上面使用Xcode附加进程的形式,启动了debugserver;其实我们还可以手动去启动debugserver
步骤如下:

  • iPhone中开启debugserver服务。
    image
    可以看到debugserver有很多的服务。
    我们要使用的是:
    $ ./debugserver <主机地址>:<端口号> -a <应用进程名/进程编号>
    • 由于主机地址是当前手机,可以使用localhost代替
    • 端口号:启动server服务,开发端口,让远程的lldb通过server调试进程
      image

这个时候,手机端就进入了等待连接的状态。

  • Mac端启动LLDB连接iPhone

    • 启动lldb
    $ lldb
    
    • 连接debugserver
    $ process connect connect://<手机IP>:<服务端口号>
    // eg: `(lldb) process connect connect://192.168.50.173:12346`
    
    • 如果Mac端的连接不成功,我们可以使用USB连接的方式。
      这个时候,我们要做的是,在进行USB端口映射的时候,添加12346:12346:
    python tcprelay.py -t 22:2222 12346:12346
    

    这样我们就可以把上面连接debugserver中的<手机IP>换成localhost

相关文章

网友评论

      本文标题:18、越狱调试

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