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

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

仔细阅读了本书从字里行间可以感受到作者的认真,在当今这个浮躁的大环境中,这是非常难得的,单从认真这点来看,这本书绝不是一本水货,强烈推荐大家阅读,尤其是初学者。本书的前六章侧重于理论的介绍,但又不立即去当当网订购
说了IDA的这么多使用方法,下面用一个简单的例子向大家演示IDA的威力。越狱iOS的用户都知道,在Cydia中安装完一个tweak后,Cydia会建议我们“Restart SpringBoard”,那么这个respring的操作是如何实现的呢?请大家快速浏览3.5节,用iFunBox将iOS中的“/System/Library/CoreServices/SpringBoard.app/SpringBoard”拷贝到
OSX中,并用IDA打开它,等待初始分析结束后在Function window里搜索“relaunch SpringBoard”,定位到这个函数,双击跳转到它的实现代码中,如图3-47所示。
 
 
可以看到,这个函数的实现流程既简单又清晰。根据从上到下的执行顺序,首先调用beginIgnoringInteractionEvents,开始忽略所有用户交互事件;然后调用hideSpringBoardStatusBar来隐藏状态栏;接着连续执行2个subroutine,分别是sub_35D2C和sub_350B8。接下来,双击sub_35D2C,跳转到它的实现,看看它做了什么,如图3-48所示。
 
在图3-48中,一眼就能看到好多含有“log”字样的关键词,先“initialize”,然后判断是否“enabled”,最后“log”。稍微懂一点英语的朋友都能猜到,sub_35D2C的作用是将respring的一些操作记录下来,与respring的主体功能无关。点击IDA菜单栏上的蓝色后退按钮(如图3-49所示),或直接按ESC,回退到relaunchSpringBoard函数体中,继续往下分析。
 
 
双击sub_350B8,跳转到如图3-50所示的界面。

 
从图3-50可以看到,这个subroutine只是在为调用sub_350C4作一些准备工作而已。双击sub_350C4,跳转到它的实现,你会发现sub_350C4的上半部分与图3-48所示的sub_35D2C非常类似,都只是做了一些操作记录。但与sub_35D2C不同的是,sub_350C4还做了一些实际工作,如图3-51所示。
 
我们现在还不了解汇编语言,只能大致浏览一下这些关键词,不过,可以猜测出这个subroutine的作用是生成一个名为“TerminateApplicationGroup”的事件,指定其处理方法为sub_351F8,然后把生成的事件加入一个处理队列里,并依次处理队列里的事件,从而关掉所有的App——商城关门之前,要关闭里面的所有店铺;respring之前,自然也要关掉所有的App。现在去看看sub_351F8的实现,如图3-52所示。
 


 
从BKSTerminateApplicationGroupForReasonAndReportWithDescription的名字来看,其作用已经很明显了,它印证了刚刚对sub_350C4的分析。再次回退到relaunchSpringBoard函数体里,到这里,分析已经接近尾声了:函数调用_relaunchSpringBoardNow,完成respring操作。
 
不需要了解汇编代码,也不用熟悉调用规则,我们以几乎零基础的水平成功完成了这次逆向工程,不是吗?当然,这不能说明我们的水平有多么高深,而是提醒我们应该为拥有IDA这样强大且免费的神器感到幸运,从而激励我们加倍努力。在绝大多数情况下,对IDA的使用跟上面的示例没有本质区别,你只需要耐着性子,仔细咀嚼IDA呈现出的每一行代码,要不了多久,你就会深切感受到逆向工程的艺术之美。
 
IDA的用法远不止本节所示的这么简单,如果你在使用过程中有任何疑问,都欢迎来http://bbs.iosre.com讨论交流。
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

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