18、越狱调试

2021-06-23  本文已影响0人  Jax_YD
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文件之后,我们要做的就是将它导入到我们的越狱手机里面,相当于一个插件。

// 使用 `mkdir`指令创建文件夹
$ mkdir <文件名>
$ scp -P 2222 ./hank.cy root@localhost:/usr/lib/cycript0.9/com/Jax
$ cycript -p <进程名>
或者
$ cycript -p <进程编号>
$ @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和触发事件。

$ #<组件地址>.allTargets
image
$ #<组件地址>.allControlEvents
image 这里看到,输出了一个64
其实UIControlEventTouchUpInside就是64:
image
$ [#<组件地址> 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

三、Theos 的使用

3.1、tweak

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

image
运行成功之后,我们会得到如下文件,这就是我们的teak工程:
image
3.2、接下来我们就要配置tweak工程:

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

3.3、注入HOOK代码:

撰写HOOK代码

image

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

这里有个坑,大家要注意了,这里我之前的是输出是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的适配问题,大家注意一下。

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

image

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

image

make clean 清理缓存。


3.4、theos 注意事项

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

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


image

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

xcode-select --switch <Xcode Select路径>

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


四、 Reveal

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

image
在这里面我们可以选自需要Reveal的APP:
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

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就一样的。

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


5.3、启动debugserver

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

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

上一篇 下一篇

猜你喜欢

热点阅读