软件的逆向工程指的是通过分析一个程序或系统的功能、结构或行为,将它的技术实现或设计细节推导出来的过程。当我们因为工作需要,或是对一个软件的功能很感兴趣,却又拿不到它的源代码时,往往可以通过逆向工程的方式对它进行分析。
照着配方包饺子,是正向开发 吃着饺子推配方,是逆向工程
配方:API 调用顺序
效果:实现原理
固若金汤的城堡
上帝模式
通过分析和篡改接口数据,可以有效的通过接口数据来控制客户端行为,常用的抓包工具有 tcpdump, WireShark, Charles 等,Windows平台有 Fiddler
静态分析法是在不运行行 iOS 应用的情形下,对应用进行静态分析的一种方法。比如获取应用的文件系统结构,本地文件的分析、使用反汇编工具(Disassembler,比如 Hopper Disassembler)查看内部代码,分析代码结构也是静态分析
动态分析法是在 iOS 应用的运行过程中进行动态分析的一种方法,通过调试来分析代码,获得内存的状态等等。通过动态分析法,可以在观察应用的文件、网络等。动态分析中还常使用调试器(Debugger,比如LLDB)分析应用的内部结构与原理。甚至可以使用工具(比如Cycript,后面会详细介绍该工具)动态修改内存,给内存打补丁。
class-dump 是用来 dump 目标对象的 class 信息的工具。它利用 Objective-C 语言的 runtime 特性,将存储在 Mach-O 文件中的 @interface 和 @protocol 信息提取出来,并生成相应的 .h 文件
Theos 是一个基于 Unix 平台(OS X,iOS…)和大多数的 Linux 平台下进行越狱开发的集成开发环境,由 Dustin Howett 大神开发并开源到 GitHub 上,它的特点是搭建简单、Logos语法简单、编译发布简单
编译打包,这个过程可能会遇到问题,比如 make package 过程,可以通过 make package message=yes 输出详细错误信息
iOSOpenDev 是基于 Theos 开发的,被整合到 Xcode 中,编译更方便,不用自己写 Makefile,另外同样提供了很多模版
iOSOpenDev 提供的模板
安装过程中可能遇到的问题
IDA 是逆向工程中最负盛名的神奇之一,它可以把 class-dump 的点连成线,它支持 Windows、Linux 和 Mac OS X 的多平台反汇编器/调试器,功能非常强大
IDA 启动界面
IDA 主界面
Hopper,它有Mac OS X和 Linux 版本,能够反汇编32/64位 Mac,Linux,Windows 和 iOS 可执行文件。
Hopper 生成的伪代码
MachOView 是可视化的 Mach-O 文件浏览器,它提供了浏览和编辑 Intel 和 ARM 二进制的功能
MachOView 主界面
MachOView 查看加密信息
iFile 是运行于 iOS 上的文件管理软件,它能实现文件的各类操作,甚至可以安装 deb 插件, 安装源是 BigBoss。
MobileTerminal 是开源的 iOS 版 Terminal,比较实用的场景是在没有计算机的情况下结合 Cycript 进行代码测试。
从 AppStore 获取 IPA 文件无法直接通过 class-dump 获取 .h 文件,也无法通过前面介绍的静态分析工具 IDA 进行反汇编。这种情况我们就需要对文件砸壳,AppCrackr 就是一款对 App 破解去壳的工具,AppCrackr 的成功率要远远高于 dumpdecrypted 和 Clutch。但正是由于它功能太过强大,引起公愤,导致其核心功能被迫关闭。
dumpdecrypted 脱壳 App 的过程
Cycript 是一门脚本语言,可以看做Objective-JavaScript,它可以很方便的帮忙测试函数和验证一下猜想。
LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的开源调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。
截获网络请求,破解通信协议并模拟客户端登录,伪造用户行为,对 iOS 用户数据造成危害
移动端本地文件中常常会存储一些敏感信息,包括 NSUserDefaults,Plist,缓存和日志文件,而如果没有做好防御措施,就会造成数据泄露