游戏安全实验室 首页 技术入门 查看内容

 阅读目录

IOS平台GDB动态调试介绍

发布于:2016-4-26 11:40   |    193552次阅读 作者: 管理员    |   原作者: TP   |   来自: 原创

1. IOS越狱开发环境搭建

1.1  Xcode下载

搭建越狱开发环境前,首先要下载Xcode开发工具,Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由苹果公司开发。我们可以直接在APP STORE中搜索Xcode来下载该app,若网络连接不畅,可以通过腾讯bugly平台的镜像资源链接下载 。值得注意的是,Xcode最新版本对操作系统有最低的版本要求,比如Xcode7.2版本就要求操作系统版本高于OS X 10.10.5

 

1.2  安装TheOS

    接下来安装越狱开发工具IOSOpenDev,不过在此之前需要先安装TheOS工具包,Theos大幅简化了编写越狱程序的流程,IOSOpenDev正是基于TheOSTheOS安装步骤可以参考这篇文档

    1.2.1 打开Terminal,设置环境变量

         export THEOS=/opt/theos

    1.2.2 接着,从网上下载最新的TheOS版本:

         sudo svn co http://svn.howett.net/svn/theos/trunk $THEOS

    1.2.3  输入密码回车,等待自动下载完成

    1.2.4  安装ldid,命令如下:

         sudo curl -s http://dl.dropbox.com/u/3157793/ldid > /tmp/ldid

         sudo cp /tmp/ldid $THEOS/bin/

         sudo chmod +x $THEOS/bin/ldid

         rm /tmp/ldid

 

1.3  安装IOSOpenDev

最后,从IOSOpenDev官网下载安装包即可,地址为http://iosopendev.com/download/。此处我们下载的版本为1.6-2,点击安装的过程中可能会失败,原因是Xcode7以上的版本在文件夹中缺少一些文件,下载这些文件并复制到相应目录即可,下载地址可以从这个网页下载,目录:

    将Specifications1文件夹重命名为Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/

Specifications2文件夹重命名为Specifications放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/

usr3重命名为usr放到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/

 

2. IOS调试环境搭建

2.1  openSSH、GNU Debuggeradv-cmds下载

    2.1.1 openSSH

通过openSSH工具,我们可以用命令行的方式访问远程终端,方法是在越狱后的ios设备cydia中搜索openSSH直接进行安装。安装完毕后打开Mac的命令行(windows平台下可以使用putty工具),随后查看自己ios设备的ip地址(如这次我的ip地址为10.66.213.47),打开命令行输入如下命令:

ssh root@10.66.213.47

接下来输入密码,初始密码为alpine,随后可以输入passwd来修改该密码。

2.1.2 GNU Debugger

在越狱ios设备的cydia中添加源cydia.radare.org,随后搜索GNU Debugger,下载并安装即可。

2.1.3 adv-cmds

在越狱ios设备的cydia中添加源apt.saurik.com,随后搜索adv-cmds,下载并安装即可。

 

2.2  Clutch下载和使用

Clutch是一款命令行破解工具,之前可以通过cydia下载该工具,但现在cydia已不提供支持,我们可以通过github直接下载该工具。下载完后利用91助手等工具将下载好的Cluntch文件复制到ios设备的/bin文件夹下,此时我们即可从命令行使用Clutch工具。

Clutch工具使用比较简单,首先在PC端输入ssh命令访问自己的ios终端,随后输入Clutch,便可输出已安装的app;随后使用Clutch -d [ID]命令即可解密app文件至手机目录;随后利用91助手等工具在目录下查看解密后的ipa文件,如我自己的手机环境破解后的文件就在/User/Documents/Dumped目录。得到解密后的ipa文件后就能利用ida等逆向工具对其进行逆向分析。

 

2.3  gdb调试常用指令

2.3.1  获取进程pid

所有的环境配置好后即可开始使用gdb调试,首先用ssh连接到自己的ios设备,随后使用ps -ax命令得到当前运行进程的pid,在列表中找到要调试的程序pid。具体的结果如下图所示:

 

2.3.2  附加到进程

随后便可使用gdb调试进程。命令为gdb -p [pid],等待命令行出现...in mach_msg_trap()时即可开始调试,此时程序会中断。

比如我们看到的pid为242,则输入gdb -p 242,则会出现如下信息。

 

2.3.3  遍历模块

我们在ida中逆向分析,想对某一地址下断点分析时,需要知道其实际运行的地址,比如某游戏中的注册接口代码如下:

 

    我们想将断点断在0x007BDA00处,要得到其实际运行时的地址,得遍历程序加载的模块基址,命令为info sh,在列表中可以找到要分析的模块地址,值得注意的是,列表中有两个地址,其中括号内的offset为实际的模块基址,接下来只需将该基址加上0x007BDA00即可。比如在测试环境下,其基址如下图所示:

因此实际的断点地址为0x007BDA00加上基址0x47000得到0x804A00。

2.3.4  断点操作

接下来我们就可以根据计算得到的断点地址下断点,命令为b [method name]或者b *[address],前者是在知道方法名的情况下对该方法下断点,后者是直接在具体的地址下断点。

下完断点后可以使用info b命令来查看当前存在的所有断点和其状态。

同时,如果不确定下的断点对不对可以利用x/ 10ih [address]命令来查看其反汇编代码,将该代码与ida中的相应代码作对比即可确认(更多查看内存和寄存器的指令可以参见下一小结):

    通过对比发现断点处反汇编出的代码和上面ida中列举的目标地址的代码一样,因此可以确认断点正确。

此外还可利用delete/disable/enable [breakID] 删除/取消/激活 断点。breakID为在info b中的断点号

下好断点后我们即可输入continue命令让程序继续执行,程序执行到断点时会停下,此时我们便可对当前的内存和寄存器进行分析或修改。另外,也可以使用nexti stepi 命令进行单步补过单步步入调试(相当于odF8和F7)。

 

2.3.5  查看、修改寄存器和内存

程序在相应断点断下后,我们便可对当前的环境进行内存和寄存器的查看和修改。查看寄存器信息可以直接使用info reg命令:

 

我们也可以使用p命令打印特定的变量:

查看内存我们使用x命令x /nfu 0x其字段含义如下:第一个字段表示要显示的内存单元个数;第二个字段表示要显示的方式,如表示十六进制格式显示变量d表示十进制格式显示变量u表示十进制格式显示无符号整型o表示八进制格式显示变量t表示二进制格式显示变量a表示十六进制格式显示变量i表示指令地址格式c表示字符格式显示变量f表示浮点数格式显示变量;第三个字段表示一个地址单元的长度,如b表示单字节h表示双字节w表示四字节g表示八字节。比如我们想双字节打印0x17d54eb0地址的连续10个内存单元的16进制数据,命令如下:

修改内存和寄存器使用set命令set *ADDRESS=VALUE以及set $REGISTER=VALUE,值得注意的是,修改寄存器的值在寄存器编号前要加上$。比如要设置0x17d54eb0的值为0,我们可以使用set *0x17d54eb0=0命令;要设置r1寄存器的值为1,我们可以使用set $r0=1命令:

 

2.3.6  dump内存

我们也可以查看当前程序的汇编代码。其命令如下:

(gdb) disassemble START,END

(gdb) disassemble START,+LENGTH

有两种格式,第一种指定要查看代码的地址范围,从START开始到END结束;第二种是指定从START开始的LENGTH条汇编代码。

同时也可以使用gdb的dump命令将某段内存dump到文件中,命令格式如下:dump binary [File] [start_addr] [end_addr]。其中第一个字段File为目标文件路径,后面两个字段指要dump的内存起始地址和结束地址。

 

以上便是游戏分析过程中常用的gdb调试命令,更多gdb相关的命令和使用可以参考这篇文档


 *转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

分享到:
踩1 赞1

收藏

上一篇:Android平台IDA动态调试

下一篇:IOS平台lldb动态调试介绍

最新评论
B Color Image Link Quote Code Smilies

发表评论