如何学习iOS逆向工程(干货!!!)

如何学习iOS逆向工程(干货!!!)_第1张图片

逆向工程

       逆向工程是一种产品设计技术再现的过程,对某一目标产品进行静态或动态分析研究,从而演绎得出该产品的处理流程,功能结构以及技术构成等设计要素,然后把分析出来的技术用于自己的产品。

        逆向分析的作用:

                    ①:缩短开发周期

                    ②:降低开发成本

                    ③:寻找技术突破

语言入门

       如果你要逆向分析iOS应用相关的东西,当然你得熟悉Object-C这门语言,不要求对开发了解的多么深入,但是首先得能理解它的语法,看懂Object-C的代码,并能够自己用这门语言写一些简单的应用及功能模块。

熟悉工具

       逆向工程往往需要借助一些工具,首先需要准备一台越狱的机器,能够熟练使用以下工具:

            ①openSSH:登录越狱机器,进行文件传输等等。

            ②Cycript:运行一些动态js脚本。

            ③lldb:动态调试应用,查看运行时变量的值。

            ④class-dump: 导出应用头文件,查看应用类和成员信息。

            ⑤Keychain dumper:导出越狱设备的keychain。

            ⑥Snoop-it,introspy:动态追踪分析工具。

            ⑦Hopper,IDA:静态反汇编分析工具。

            ⑧theos:开发tweak,进行动态hook。

推荐《iOS应用逆向工程》这本书,作者拥有多年逆向开发实践经验,可以跟着里面讲的知识慢慢学习。总之,一定要实践,一定要实践,一定要实践!(重要的事说三遍)

继续深入

文件结构

       再深入一些的话,需要熟悉macho文件结构,包括它的构成,每一部分的作用,以及动态加载过程,然后可以进一步看看class-dump的源码。

深入原理

       使用工具,决不能只停留在工具的表面,一定要知道工具内部是怎么实现的,它的原理的是什么,自己是不是可以对它进行改进等等,比如theos的原理,Method Swizzling,fishhook等等。

知己知彼

       再说到逆向分析其实就是一个“攻”的过程,那么肯定不是一帆风顺的,有攻就有防,现在很多应用对于防止被逆向分析也做了很多不同的措施比如:反注入,反调试,反反汇编这些。作为一个逆向分析者,同时也需要对防的过程和可能使用的方法有一定的了解,才能更好的去寻找突破口。

熟悉汇编

       静态分析中难免需要去阅读汇编代码,知道各种寄存器的作用,以及对堆栈的操作过程。

后续建议

             ① 多关注一些github开源项目,包括上面说的那些

             ② 多关注国内国外博客论坛,比如:逆向未来,iosre

             ③ 多实践,看再多的东西,都要实践出来

我博客的部分笔记:


            iOS 安防 优化

优化iOS小技巧

iOS 内存管理总结

iOS开发---数据结构

iOS安全攻防—常用工具

iOS 多线程 线程间的状态

iOS安全:Mach-O Type

iOS 各种UI控件属性设置

iOS安全基础之钥匙串与哈希

iOS自动化布局-AutoLayout约束优先级

你可能感兴趣的:(ios,逆向工程)