liumengdeqq 发表于 2017-12-7 13:17

ida 6.95动态调试ios

                      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应用程序模板:            http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANTIzODQzY2U=.png

         单击下一步,当询问项目选项时,请使用以下值:
http://note.youdao.com/src/FDAB8F2A6C7343BABE6B63194CDC3AC1
         Product Name: demo
         Organization Identifier: me
            Language: Objective-C
          对于其余的字段,您可以使用默认值。
                     3.符号
          一旦你的项目已经创建,确保你的设备连接到你的主机,并且是选择为Xcode窗口左上角的当前设备:                http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANDVhZjU1M2U=.png

http://note.youdao.com/src/5FFD717F1CDA4A03B6DA9A1A18546E77
         当你第一次选择你的设备时,Xcode将执行两个重要的任务。 首先它会安装你的设备上的调试服务器(IDA需要进行调试),它也会提取符号来自dyld_shared_cache的文件。
         符号处理通常需要一段时间,您可以检查Xcode顶部的进度窗口:            http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANzkyMTJjNGM=.png

http://note.youdao.com/src/DA959E6E274049DCB015992396ED57DA
         当这个过程完成后,Xcode将把符号存储在:〜/ Library / Developer / Xcode / iOS DeviceSupport / <iOS version> / Symbols在IDA中,将此路径复制到Debugger>Debugger options>Set specific options中的“符号路径”                           http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMjExNGNlNg==.png

http://note.youdao.com/src/4679514B7C2A41B6B2FE0F94F2C12942
                           4.安装
            为了让IDA调试这个应用程序,它必须知道应用程序可执行文件的路径。 但是,iOS往往隐藏这些关于文件系统的细节,据我们所知,没有办法正式 请问Xcode究竟在哪里安装了你的设备上的应用程序。所以,我们使用以下解决方法:打开源文件AppDelegate.m,并在函didFinishLaunchingWithOptions中插入以下行:
                        NSLog ( @“app安装路径:%@” ,[[ NSBundle mainBundle ] executablePath ]);
            这将确保安装路径将在应用程序运行时在Xcode控制台中打印。现在点击Xcode窗口左上角的大播放按钮。 这将构建,安装和在目标设备上启动应用程序。 一旦你看到该应用程序已经启动和应用程序路径已经打印到控制台,请按左上方的“停止”按钮。
                           5.启动调试器
            现在是时候在IDA中打开我们的示例应用程序。 在Xcode窗口的左边,在Project Navigator选项卡,点击Products文件夹下的demo.app:                     http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANzBlMDgzZmM=.png

http://note.youdao.com/src/3027F389754B419CB94CB4E34A780204
         然后,在“实用程序”选项卡下的Xcode窗口的右侧,可以找到新的路径建立应用程序包。 使用此路径在IDA中打开应用程序的可执行文件:                      http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMmNhMWFjYWM=.png

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

             现在点击Debugger> Start process,然后等待main的断点被击中:而就是这样! 您现在可以探索进程内存,检查寄存器,单步等调试!                     http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANzFmOTA1NDc=.png

                   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),然后运行以下命令:               http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAODM2NTY4Zg==.png

http://note.youdao.com/src/56F01EB22A8C41D980B08A3A05422A6D
               每当设备连接/断开连接时,ios_deploy应该会打印一条消息。 如果你看到一个
像你上面看到的消息,那么这么好。
                  7.安装调试服务器
       下一步是确保调试服务器已经安装在您的设备上,IDA将会被安装能够启动它。 您可以使用“诊断”阶段来检查这一点:                  http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMTYwYzE0MWY=.png

http://note.youdao.com/src/C7C023329EFB45D58F690550FA2774B8
               如果你的设备上没有调试服务器,你会得到一个“service is invalid”的信息诊断阶段将尝试自动安装DeveloperDiskImage.dmg并重试。如果诊断程序无法为您的设备找到匹配的DeveloperDiskImage.dmg(就像它一样上面),你可以手动找到一个。 他们通常位于:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/然后使用“mount -d <path>”来安装它:
http://note.youdao.com/src/18078483382348B59811D78C639B9883
                  http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMmY1ZjQ5NjA=.png

如果可以启动调试服务器,则应该看到“'Diagnostics completed. No issues to report”。 没有问题要报告“。
                     8.符号
            下一步是从dyld_shared_cache中提取调试符号。 IDA严重依赖这些符号文件,以实现快速和详细的调试(就像Xcode - 它通常存储当你第一次连接你的设备时,〜/ Library / Developer / Xcode / iOS \ DeviceSupport中的符号)。要将符号文件提取到主机,请运行“symbols”阶段:               http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANmE4YzI2NTU=.png

http://note.youdao.com/src/89DB1838F88F41818DA6F5969DCEA869
            当这个阶段完成时,它将把符号存储在〜/ Symbols中。现在我们可以通过在Debugger>Debugger options>Set specific options中设置'Symbol path'来告诉IDA在哪里找到它们                     http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMjZjNTkwNDk=.png

http://note.youdao.com/src/31FCA6A3D4104652A1763F3A890EC834
                            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”         以上:               http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JAMjhhM2U2NTg=.png

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

http://note.youdao.com/src/205B7A7609A941FFBEC99927BD6D1BA6
                        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来选择目标设备          选项:                  http://stor.corp.qunar.com/v1/AUTH_fshqblog/qblog_img/W0JANTYyNDk4ZDc=.png

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

















逝去的诺言 发表于 2017-12-7 13:22

感谢分享~

size2009 发表于 2017-12-7 18:30

图片全挂了

身体坏了丶丶 发表于 2017-12-8 12:16

可以 我试试

545400m 发表于 2017-12-9 10:21

看帖是一种态度,,,回帖是一种美德

Hmily 发表于 2017-12-11 14:57

@liumengdeqq 图片都盗链了吧,无法显示,上传下本地吧。

heang567 发表于 2018-9-10 14:40

模拟环境写代码还是不错的
页: [1]
查看完整版本: ida 6.95动态调试ios