[翻译]ida 6.95动态调试ios

liumengde 2017-12-7 13:14 251

https://www.hex-rays.com/products/ida/support/tutorials/ios_debugger_tutorial.pdf

                       使用IDA调试iOS应用程序Copyright 2016 Hex-Rays SA

IDA 6.95引入了Remote iOS Debugger插件,它允许用户调试iOS目标直接从IDA申请。 它适用于所有支持的平台(Mac,Windows,Linux),支持ARM3和ARM64目标,并且已经在iOS 9,10和11上进行了广泛的测试。

        本教程的目标是在iOS设备上安装示例应用程序,并使用IDA进行调试。在开始之前,请注意,远程iOS调试器需要一个正在运行的实例苹果iOS调试服务器才能正常工作。 由于iOS设备经常被监禁,产生远程调试器进程(或者为了这件事做其他事情)可能是一个任务。IDA根据您的平台提供各种监狱设备的工作方式。 如果你是一个Mac用户,继续阅读。 如果您是非Mac用户,请跳至 非Mac用户 。

                       1.快速开始

        开始使用最快的方法是使用Xcode构建和安装示例应用程序,然后切换到IDA调试它。 我们将在这里深入介绍这个过程。 如果您不想使用Xcode,请跳转到ios_deploy部分。

                       2.创建一个示例项目

        请注意,由于IDA依赖于iOS调试服务器,因此IDA只能调试应用程序debugserver可以调试。 通常,由Xcode安装的默认调试服务器只能调试

您已经使用Xcode构建的应用程序。因此,我们必须自己开始构建一个示例应用程序,仅用于本教程。

        首先打开Xcode.app,在“欢迎使用Xcode”屏幕上,选择“创建一个新的Xcode项目”。然后当被要求选择一个模板时,选择一个iOS应用程序模板:

            

         单击下一步,当询问项目选项时,请使用以下值:

           Product Name: demo

           Organization Identifier: me

            Language: Objective-C

          对于其余的字段,您可以使用默认值。

                       ​3.符号

          一旦你的项目已经创建,确保你的设备连接到你的主机,并且是选择为Xcode窗口左上角的当前设备:

                

         当你第一次选择你的设备时,Xcode将执行两个重要的任务。 首先它会安装你的设备上的调试服务器(IDA需要进行调试),它也会提取符号来自dyld_shared_cache的文件。

         符号处理通常需要一段时间,您可以检查Xcode顶部的进度窗口:

              

         当这个过程完成后,Xcode将把符号存储在:〜/ Library / Developer / Xcode / iOS DeviceSupport / <iOS version> / Symbols在IDA中,将此路径复制到Debugger>Debugger options>Set specific options中的“符号路径”

                           

                           4.安装

            为了让IDA调试这个应用程序,它必须知道应用程序可执行文件的路径。 但是,iOS往往隐藏这些关于文件系统的细节,据我们所知,没有办法正式 请问Xcode究竟在哪里安装了你的设备上的应用程序。所以,我们使用以下解决方法:打开源文件AppDelegate.m,并在函didFinishLaunchingWithOptions中插入以下行:

                       NSLog ( @“app安装路径:%@” ,[[ NSBundle mainBundle ] executablePath ]);

            这将确保安装路径将在应用程序运行时在Xcode控制台中打印。现在点击Xcode窗口左上角的大播放按钮。 这将构建,安装和在目标设备上启动应用程序。 一旦你看到该应用程序已经启动和应用程序路径已经打印到控制台,请按左上方的“停止”按钮。

                           5.启动调试器

            现在是时候在IDA中打开我们的示例应用程序。 在Xcode窗口的左边,在Project Navigator选项卡,点击Products文件夹下的demo.app:

                       

           然后,在“实用程序”选项卡下的Xcode窗口的右侧,可以找到新的路径建立应用程序包。 使用此路径在IDA中打开应用程序的可执行文件:

                      

            一旦IDA完成加载文件,从组合框中选择“Remote iOS Debugger”屏幕顶部,并在主要设置一个断点。现在打开Debugger> Process options ...菜单,并在'Application'和'Input File'字段中使用 在上面的“ 安装”部分中运行应用程序时打印到控制台的路径 :

                        

             现在点击Debugger> Start process,然后等待main的断点被击中:而就是这样! 您现在可以探索进程内存,检查寄存器,单步等调试!

                       

                   6.ios_deploy

            我们建议Mac用户从十六进制下载页面下载“ios_deploy”:https://www.hex-rays.com/products/ida/support/ida/ios_deploy.zip这个帮助工具已经我们的开发周期中有效地取代了Xcode,并且可以执行所有的工作在iOS上可能很困难的日常任务 - 例如签名和安装应用程序,解压缩从dyld_shared_cache调试符号文件,并检索目标的安装路径可执行文件。

             请参阅ios_deploy -h以快速了解可以执行的操作。本教程的这一部分的目标是使用ios_deploy来安装预构建的示例应用程序在IDA中进行调试 - 对Xcode的依赖有限。

                   7.连接

             在我们开始之前,让我们进行一个健全的检查,以确保IDA能够识别和连接到您的设备。 通过USB将设备连接到Mac(目前ios_deploy无法工作

通过Wi-Fi),然后运行以下命令:

                 

               每当设备连接/断开连接时,ios_deploy应该会打印一条消息。 如果你看到一个

像你上面看到的消息,那么这么好。

                    7.安装调试服务器

       下一步是确保调试服务器已经安装在您的设备上,IDA将会被安装能够启动它。 您可以使用“诊断”阶段来检查这一点:

                  

               如果你的设备上没有调试服务器,你会得到一个“service is invalid”的信息诊断阶段将尝试自动安装DeveloperDiskImage.dmg并重试。如果诊断程序无法为您的设备找到匹配的DeveloperDiskImage.dmg(就像它一样上面),你可以手动找到一个。 他们通常位于:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/然后使用“mount -d <path>”来安装它:

                  

如果可以启动调试服务器,则应该看到“'Diagnostics completed. No issues to report”。 没有问题要报告“。

                     8.符号

            下一步是从dyld_shared_cache中提取调试符号。 IDA严重依赖这些符号文件,以实现快速和详细的调试(就像Xcode - 它通常存储当你第一次连接你的设备时,〜/ Library / Developer / Xcode / iOS \ DeviceSupport中的符号)。要将符号文件提取到主机,请运行“symbols”阶段:

                 

            当这个阶段完成时,它将把符号存储在〜/ Symbols中。现在我们可以通过在Debugger>Debugger options>Set specific options中设置'Symbol path'来告诉IDA在哪里找到它们

                       

                            9.安装

           现在是时候设置一个示例目标应用程序。 我们提供了一个预构建的iOS示例二进制“ios_demo”,位于https://www.hex-rays.com/products/ida/support/ida/ios_demo.zip与源代码。 您必须对此应用程序进行编码,才能在您的应用程序上进行安装和调试设备,这意味着你必须是iPhone Developer程序的一部分。如果应用程序与您的开发人员证书没有正确的协议,调试服务器将会拒绝调试,报告“无法获取进程的任务”错误消息。

           请参阅“ios_deploy codesign -h”了解更多关于这个过程如何工作。一旦你确认你有一个iPhone开发人员证书,你已经下载了示例应用程序,cd到ios_demo /并运行以下命令:

                troy @ mac : 〜/ ios_demo $ ios_deploy appify -e demo

           这将在./demo.app创建一个应用程序包,然后可以在您的设备上安装:

                 troy @ mac : 〜/ ios_demo $ ios_deploy install -b demo.app/

          然后您可以通过以下方式打印安装路径:

                 troy @ mac : 〜/ ios_demo $ ios_deploy paths -b demo -s

          /var/containers/Bundle/Application/132A825B-9EB8-4FA4-B49B-3722C0EBFF24/demo.app/demo

                          10.启动调试器

         最后是启动IDA并运行调试器的时候了。 首先在ida中打开示例应用程序:

               troy @ mac : 〜/ ios_demo $ idaq demo.app/demo

         一旦IDA完成加载文件,请执行以下操作:

             1.从主窗口顶部的组合框中选择“Remote iOS Debugger”

             2.在main处设置一个断点。

             3.打开菜单Debugger> Process options ...

             4.将“Application”和“Input file”设置为通过运行“ios_deploy paths”

         以上:

               

            在这种情况下,IDA将不会使用“主机名”和“端口”字段,空主机名。 只需将其设置为“本地主机”。现在点击Debugger> Start process,然后等待main的断点被击中:而就是这样! 你现在可以一步,探索进程内存,检查寄存器等。快速调试!

                               

                          11.故障排除

                 流程启动

                如果IDA由于某种原因无法启动目标进程,通常会打印一条错误消息到控制台窗口。 以下是一些常见的错误消息:

                   • Elocked -这意味着debugserver无法启动进程,因为该设备屏幕被锁定。 只需解锁屏幕,这个错误应该消失。

                    • 服务无效 - 这通常意味着IDA尝试启动一个调试实用程序没有安装在设备上。 请确保已经有DeveloperDiskImage.dmg安装在您的设备上(通过Xcode或“ios_deploy安装”)。

                    • Efailed获得进程的任务 - 这可能意味着调试服务器没有调试目标应用程序的权限。 请确保目标应用程序已正确用于调试的代码('ios_deploy codesign'可以为你做这个)。SA: http://iphonedevwiki.net/index.php/Debugserver和AUTOLAUNCH in dbg_ios.cfg

                   • 设备不支持无线同步 -这通常意味着您要求MacOS通过WiFi在设备上执行任务。 一些任务(如启动调试服务器)不能通过WiFi执行。 尝试关闭设备上的WiFi,或至少确保您的设备mac主机和设备没有连接到同一个WiFi网络。 那么,确保你是仍然通过USB连接,然后重试。

                 IDA_DEBUG_DEBUGGER

           此标志将使IDA在调试器打印非常详细的日志消息到控制台运行。 通过启动IDA来启用它:'/ path / to / idaq -z10000'如果在使用远程iOS调试器时启用此选项,则IDA将记录所有数据包IDA和调试服务器之间的通信。 寻找带有以下前缀的行:> ...(将数据发送到调试服务器)和<...(从调试服务器接收的数据)这些数据包通常会包含可能描述问题的消息或错误代码。

                   系统日志

您也可以使用dbg_ios.cfg中的SYSLOG_FLAGS选项指示打印调试服务器额外的调试消息到iOS系统日志。然后可以在IDA运行时使用“ios_deploy syslog”来获取系统日志。

                   使用多个设备

           使用连接到主机的多个iOS设备时要小心。 在这您可以通过菜单Debugger> Debugger options> Set specific来选择目标设备

          选项:

                    

          如果您连接了多个设备并且您没有指定目标设备,则IDA将简单地使用它找到的第一个设备。 使用的设备不能保证是确定性的,所以它是一个好主意明确告诉IDA使用哪个设备。










最新回复 (2)
landeaxm 2017-12-7 14:22
2
图全挂了
1
linso 2017-12-7 14:48
3
兄弟,你谷歌直译不改一下也就算了。。图全挂了也忍了。。。这样的问题文章http://blog.csdn.net/liumengdeqq/article/details/78739290  https://www.52pojie.cn/thread-672677-1-1.html还满大街挂....
返回