读书频道 > 网站 > 网页设计 > iOS应用逆向工程(第2版)
3.4.2 IDA使用说明
15-06-18    下载编辑
收藏    我要投稿   

本文所属图书 > iOS应用逆向工程(第2版)

仔细阅读了本书从字里行间可以感受到作者的认真,在当今这个浮躁的大环境中,这是非常难得的,单从认真这点来看,这本书绝不是一本水货,强烈推荐大家阅读,尤其是初学者。本书的前六章侧重于理论的介绍,但又不立即去当当网订购
IDA启动时会短暂地显示如图3-25所示的窗口。
 
 
这时可以点击“OK”,或等上几秒,它会自动关闭,之后就会看到IDA的主界面,如图3-26所示。
 
在该界面中,不用繁琐地在菜单里点击“打开文件”,然后一个目录一个目录地去翻找,只需把要分析的文件拖进IDA的灰色区域就行了。打开文件后,还需要做一些基本的配置,如图3-27所示。
 


有一个地方需要注意:对于一些fat binary(指的是为了兼容不同架构的处理器,而把多种指令集糅合到一个binary)来说,图3-27中最上面的白框内会出现多个Mach-O文件供我们选择。建议先迅速查阅第4章“dumpdecrypted”这一节的ARM对照表,找到设备对应的ARM信息,例如笔者的iPhone 5对应的是ARMv7s。如果设备的ARM没有出现在这些选项中,就选那个向下兼容的选项,即如果选项里有ARMv7S,就选它;否则选ARMv7。这种方法应该可以应对碰到的99%的情况,如果你恰巧是那1%,请来http://bbs.iosre.com分享这种百里挑一的喜悦,我们一起解决问题。
 
这里笔者选择了ARMv7S,然后点击“OK”,此时,会连续弹出好几个窗口,一路点击“Yes”和“OK”就可以了,如图3-28和图3-29所示。
 
因为试用版的IDA无法保存,所以即使在这些窗口上勾选“Don’t display this message again”,下次打开IDA还是会出现这些窗口;虽然有些麻烦,但这么强大的工具都让我们免费使用了,麻烦就麻烦点吧。
 
按钮都点完后,内容丰富的主界面再次进入我们眼帘,如图3-30所示。
 
在进入图3-30所示的界面时,你会看到上方的进度条不断滚动,下方的Output window也会打印出对文件的分析进度。当进度条的主色调变成蓝色(IDA界面上的颜色在黑白印刷页上看不出来,请谅解),Output window中显示“The initial autoanalysis has been finished.”时,表示IDA的初始分析已完成。
 
在初学阶段,由于主要用IDA作静态分析,基本用不上Output window,所以在开始分析之前,可以先关掉Output window。
 
现在看到的两个大窗口分别是左侧小部分的Functions window (如图3-31所示)和右侧大部分的Main window(如图3-32所示)。下面分别介绍一下这2个窗口的用途。
 


 


(1)Functions window
 
顾名思义,这个窗口展示了IDA分析出来的所有函数(规范地讲,Objective-C的function应该称为method,即方法,此处统称为函数,请大家注意),双击一个函数,Main window会显示它的函数体。在选中Function Window时点击菜单栏上的“Search”,会弹出如图3-33所示的子菜单。
 
 
选择“Search”,并在图3-34的对话框中输入要查找的内容,可以在所有函数名里查找指定的字符串,十分方便;当要查找的内容出现在多个函数名里时,还可以点击“Search again”来遍历这些函数名。当然,上面的操作也都可以用IDA中显示的快捷键完成。
 
Functions window中的Objective-C函数与class-dump导出的内容吻合。除了Objective-C函数外,IDA还将所有subroutine罗列了出来,这是class-dump做不到的。class-dump导出的内容都是Objective-C函数名,可读性高,容易上手,是iOS逆向工程初学者的乐园;
 
subroutine的名称只是一个代号,没有明显含义,分析难度大,大多数初学者看到这里就打了退堂鼓。但是,iOS的底层是用C和C++实现的,编译之后生成的大都是subroutine,class-dump拿它没辙,只能使用IDA这样的工具。要想深层次挖掘iOS中最有趣的部分,掌握IDA的用法是必经之路。
 
 
(2)Main window
 
绝大多数没有用过IDA的iOS开发者,包括笔者,在第一次看见初始分析完成后的Main window时都懵了——这都是些什么玩意儿?这是人类文字吗?还是把IDA关了,刷会儿微博压压惊吧。这跟很多工程师在写第一行代码时不知如何下手的感觉很类似。其实,跟写代码时需要定义一个入口函数一样,在逆向工程里,也需要找到自己感兴趣的入口函数。在Functions window中双击这个入口函数,使得Main window跳转到函数体,然后用鼠标选中Main window,按一下空格,界面会瞬间变清爽,可读性一下就强了起来,让人感觉到“我的天空,星星都亮了”(如图3-35所示)。
 
 
Main window有两种显示模式,分别是Graph view和Text view,它们之间可以通过空格键切换。Graph view把被分析的程序逻辑用方块的形式表现出来,方便我们分析程序各个分支之间的关系。各个方块之间的执行顺序用带箭头的线表示,当执行出现分支时,满足判断条件分支的线是绿色的,否则是红色的;当执行没有分支时,线是蓝色的。比如,在图3-36中,当最上面的方块执行完后,会判断R0是否为0,如果R0 != 0,则满足判断条件(BNE,即Branch if Not Equal to zero),走绿色的那条路接着执行右边的方块;否则走红色的路执行左边的方块。此处是IDA的难点之一,后面的实例中会再次讲解。
 
 
细心的读者也一定注意到了,IDA中的字体色彩缤纷,事实上,不同颜色的字体表示的含义也各不相同,如图3-37所示。
 
 
当选中一个符号时,相同的符号都会用黄色高亮显示,方便跟踪这个符号的轨迹,如图3-38所示。
 
 
双击符号,可以查看它的实现,效果与图3-35类似。在任意符号上点击鼠标右键,会弹出如图3-39所示的菜单。
 
 
其中,常用的功能有“Jump to xref to operand...”(快捷键“x”),点击后出现的窗口罗列了这个文件中显式引用这个符号的所有信息,如图3-40所示。
 
 
如果觉得这种表示方法不够直观,更喜欢Main window里的Graph view形式,可以选择菜单下面的“Xrefs graph to...”,但如果运气不好,这个符号被引用过多的话,就会看到类似图3-41这样的一团乱麻的界面,真是剪不断,理还乱。
 
 
在图3-41中,黑色的部分都是由一根根直线构成的,两侧基本已经黑成了一片,可以看出_objc_msgSendSuper2_stret这个符号被大量引用。
 
相对地,“Xrefs graph from...”则会显示这个符号显式引用的所有符号,如图3-42所示。

 
从图3-42可以看到,sub_1DC1C是个subroutine,它显式引用了j__objc_msgSend、_OBJC_CLASS_$_UIApplication和_objc_msgSend,而_objc_msgSend又显式引用了__imp__objc_msgSend。双击Main window里的_objc_msgSend,再双击__imp__objc_msgSend,可以看到它来自libobjc.A.dylib,如图3-43所示。
 
在多数情况下,找到一个感兴趣的符号时,会想进一步查找与这个符号相关的所有线索。一种笨拙但有效的方法是鼠标选中Main Window时点击菜单栏上的“Search”,此时会弹出如图3-44所示的子菜单。
 
然后选择“text...”,会弹出如图3-45所示的窗口。
 
 
 
这时,可以根据自己的情况选择搜索是否对大小写敏感,搜索格式是不是正则表达式等,然后勾选“Find all occurences”,点击“OK”,IDA会将文件中所有满足搜索条件的符号列出,供我们一一查看。
 
Graph view提供的功能非常多,以上只是简单介绍了几个常用的功能,熟练地使用它们是进行更深入研究的保障。Graph view的界面比较简洁,各代码块间逻辑清晰,适合肉眼观看。相对来说,现阶段切换到Text view的机会比较少,一般是在配合LLDB进行动态调试时,才会在Text view中对界面左侧罗列的符号地址特别关注,如图3-46所示。
 
 
需要注意的是,IDA的某些Bug会导致Graph view的末端显示不全(例如一个subroutine本来有100行指令,但只显示了80行),当你对某一个Graph view块中的指令产生明显怀疑时,可切换到Text view看看Graph view是不是漏显示了某些代码。这类Bug出现的概率不大,如果你不幸中彩,欢迎来http://bbs.iosre.com交流解决方案。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站