首页
社区
课程
招聘
[翻译]ida 6.95动态调试ios
发表于: 2017-12-7 13:14 8843

[翻译]ida 6.95动态调试ios

2017-12-7 13:14
8843

3e2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3N6s2g2@1L8%4u0A6j5h3I4K6i4K6u0r3K9h3!0K6i4K6g2X3k6r3g2T1N6h3N6Y4k6i4u0Q4y4h3k6@1N6i4c8G2M7X3W2S2L8q4)9J5k6i4m8V1k6R3`.`.

                       使用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”:c48K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3K9h3c8S2i4K6u0r3K9h3!0K6i4K6g2X3k6r3g2H3L8r3!0&6i4K6u0W2P5X3W2H3i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1#2i4@1t1^5i4@1q4q4i4@1f1#2i4K6S2m8i4@1p5&6i4@1f1#2i4@1t1%4i4@1p5#2i4@1f1#2i4K6R3#2i4@1t1%4i4@1f1#2i4@1t1%4i4@1t1J5i4@1f1%4i4@1u0n7i4K6S2r3i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1@1i4@1u0n7i4@1q4o6i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1#2i4@1u0o6i4K6R3H3i4@1f1#2i4K6S2r3i4K6V1I4i4@1f1#2i4K6V1I4i4@1p5^5i4@1f1$3i4K6W2o6i4K6W2r3i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1$3i4K6V1#2i4K6R3^5i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1#2i4K6S2r3i4K6V1$3i4@1f1@1i4@1u0n7i4@1p5K6i4@1f1@1i4@1u0m8i4K6R3$3h3r3y4G2k6r3g2Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7U0W2Q4b7U0k6Q4c8e0c8Q4b7U0S2Q4z5e0c8Q4c8e0g2Q4z5p5k6Q4b7f1k6Q4c8e0c8Q4b7V1u0Q4b7e0g2Q4c8e0k6Q4z5o6W2Q4b7e0N6Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0k6Q4z5o6W2Q4z5o6m8Q4c8e0k6Q4z5f1y4Q4z5o6W2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4b7U0N6Q4b7e0g2Q4c8e0c8Q4b7V1c8Q4z5f1y4Q4c8e0g2Q4z5f1y4Q4b7e0S2A6e0#2y4Q4c8e0c8Q4b7U0S2Q4z5p5q4Q4c8e0g2Q4z5p5k6Q4b7f1k6Q4c8e0S2Q4z5o6y4Q4b7V1c8Q4c8e0g2Q4b7V1g2Q4z5o6S2Q4c8e0g2Q4z5f1u0Q4b7U0m8Q4c8e0W2Q4z5f1q4Q4b7V1g2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0k6Q4z5e0N6Q4b7e0g2Q4c8e0g2Q4b7U0S2Q4b7U0S2Q4c8e0c8Q4b7V1u0Q4b7V1u0Q4c8e0g2Q4z5p5q4Q4b7e0p5`. - 例如签名和安装应用程序,解压缩从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”,位于b53K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3K9h3c8S2i4K6u0r3K9h3!0K6i4K6g2X3k6r3g2E0L8#2)9J5k6i4A6A6M7q4!0q4y4q4!0n7z5q4)9^5c8g2!0q4y4W2!0n7b7g2)9&6x3q4!0q4y4q4!0n7b7W2!0m8x3#2!0q4y4#2!0m8x3q4)9^5x3g2!0q4x3#2)9^5x3q4)9^5x3W2)9J5y4X3&6T1M7%4m8Q4x3@1u0Q4c8e0k6Q4z5o6u0Q4b7e0S2Q4c8e0g2Q4b7V1k6Q4z5o6g2Q4c8e0W2Q4b7e0q4Q4b7V1u0Q4c8e0g2Q4b7f1k6Q4b7U0W2Q4c8e0k6Q4b7f1c8Q4b7e0c8Q4c8e0g2Q4b7V1q4Q4z5e0c8Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0N6Q4b7e0S2Q4z5p5u0Q4c8e0g2Q4b7V1q4Q4z5p5k6Q4c8e0S2Q4b7V1k6Q4z5f1u0Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0N6Q4b7V1y4Q4z5e0k6Q4c8e0N6Q4b7e0m8Q4z5o6q4Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0k6Q4z5o6W2Q4z5p5c8Q4c8e0S2Q4z5o6y4Q4b7V1c8Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0k6Q4z5o6u0Q4b7e0S2Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4b7V1q4Q4z5e0c8Q4c8e0N6Q4z5e0c8Q4b7e0S2Q4c8e0N6Q4b7e0S2Q4z5p5u0Q4c8e0g2Q4b7V1q4Q4z5p5k6Q4c8e0c8Q4b7U0S2Q4z5p5q4Q4c8e0S2Q4b7V1k6Q4z5f1u0Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0g2Q4b7f1g2Q4z5o6W2Q4c8e0S2Q4b7e0y4Q4z5o6g2Q4c8e0g2Q4z5e0u0Q4z5p5y4Q4c8e0S2Q4b7U0m8Q4z5o6y4Q4c8e0S2Q4b7f1k6Q4z5e0g2Q4c8e0S2Q4b7f1g2Q4b7V1g2Q4c8e0g2Q4b7e0c8Q4z5o6N6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0k6Q4z5o6c8Q4z5p5k6Q4c8e0g2Q4z5e0q4Q4b7U0y4Q4c8e0N6Q4z5f1c8Q4z5o6m8Q4c8e0c8Q4b7V1c8Q4b7e0m8Q4c8e0g2Q4b7V1k6Q4z5o6g2Q4c8e0W2Q4b7e0q4Q4b7V1u0Q4c8e0k6Q4z5e0S2Q4b7f1k6A6f1r3S2G2L8X3f1`. 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: abcK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3W2H3K9r3!0F1k6h3c8W2N6Y4N6A6K9$3W2Q4x3X3g2F1k6i4c8Q4x3V1k6A6L8X3c8W2P5q4)9J5k6i4m8Z5M7q4)9J5c8V1c8W2j5Y4g2Y4M7$3g2J5N6X3g2J5i4@1f1#2i4K6V1J5i4K6S2o6b7g2g2f1e0@1I4m8g2f1&6o6d9l9`.`. 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使用哪个设备。











[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 14868
活跃值: (3678)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
图全挂了
2017-12-7 14:22
0
雪    币: 349
活跃值: (125)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
兄弟,你谷歌直译不改一下也就算了。。图全挂了也忍了。。。这样的问题文章10bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3L8r3W2#2L8h3g2F1k6$3c8W2M7i4q4Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0M7^5y4K6x3&6x3U0V1H3i4K6t1$3L8X3u0K6M7q4)9K6b7R3`.`. 596K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3f1#2x3Y4m8G2K9X3W2W2i4K6u0W2j5$3&6Q4x3V1k6@1K9s2u0W2j5h3c8Q4x3X3b7$3y4K6t1$3y4K6N6Q4x3X3b7I4i4K6u0V1x3g2)9J5k6h3S2@1L8h3I4Q4c8e0S2Q4b7V1k6Q4z5e0S2Q4c8e0k6Q4b7V1u0Q4b7e0q4Q4c8e0g2Q4b7e0c8Q4b7e0N6Q4c8e0S2Q4b7e0q4Q4z5e0N6Q4c8e0k6Q4z5p5y4Q4z5o6u0Q4x3X3g2Q4x3X3g2Q4x3X3g2Q4x3X3f1`.
2017-12-7 14:48
0
雪    币: 348
活跃值: (486)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
在看看图是否有问题
2017-12-25 12:00
0
雪    币: 348
活跃值: (486)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
我是翻译这篇文章  925K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2Z5k6i4S2Q4x3X3c8J5j5i4W2K6i4K6u0W2j5$3!0E0i4K6u0r3M7s2u0G2k6s2g2U0N6s2y4Q4x3V1k6A6k6r3q4Q4x3V1k6K6N6i4m8H3L8%4u0@1i4K6u0r3N6s2g2@1L8%4u0A6j5h3I4K6i4K6u0r3K9h3!0K6i4K6g2X3k6r3g2T1N6h3N6Y4k6i4u0Q4y4h3k6@1N6i4c8G2M7X3W2S2L8q4)9J5k6i4m8V1k6W2)9J5y4X3&6T1M7%4m8Q4x3@1t1`.
2017-12-25 12:01
0
游客
登录 | 注册 方可回帖
返回