本课程将从OC语言特性,文件格式,Hook原理等理论基础出发,通过实际的案例,从不同的切入点,结合class-dump、IDA、LLDB等工具的具体使用深入理解iOS逆向的整个流程,最后教你怎么去保护自己的应用不被破解。
在校计算机专业学生,iOS开发工程师,对逆向有兴趣的开发者,希望扩展个人知识和理解iOS系统机制。
-
什么是逆向工程?
逆向工程的概念、逆向工程需要的基础、逆向工程的一般流程、需要使用到的一些工具、逆向工程的作用(促进正向开发和评估软件安全性)。
-
iOS安全机制
介绍iOS系统的安全机制权限隔离,代码签名,DEP,ASLR,沙盒机制。
-
认识越狱设备
越狱环境下各种目录的作用,文件权限,iOS越狱程序类型(Application、Dynamic Library、Daemon)以及组成。
突出理论知识,能让学员对逆向中用到的理论知识有所了解
-
UIViewcontroller和UIView
为了让学员理解两者的关系,为了后面分析不要局限于界面,从Controller去找逻辑实现。生命周期,从界面事件到Controller的响应流程,responder传递
-
数据储存
认识数据存储,数据储存的方式,数据存储的作用,Demo实例,安全性(keychain、NSUserDefault、SQLite3)
-
GCD和Block
GCD的特性和使用,Block的结构和使用,Demo演示
-
类与方法
类的结构,类的继承关系,类的执行流程,方法结构,方法查找流程。
-
runtime特性
OC 运行时特性,objc_msgsend,KVC
-
认识Hook
介绍几种hook方式,swizzle、fishhook、Cydia Substrate,给出Demo
-
Hook原理
swizzle、fishhook 原理解析,Cydia Substrate原理解析
-
ARM汇编
介绍arm汇编指令,ARM/THUMB指令的区别,静态分析arm汇编,静态调试arm汇编,通过修改汇编指令篡改程序功能
-
Mach-O文件格式
介绍Mach-O文件介绍(otool...),类名方法名构成,动态库依赖,分析dyld加载代码
-
ipa打包签名
ipa打包流程,签名原理,重签名
-
静态库
什么是静态库,作用,构成,链接方式
-
动态库
什么是动态库,作用,构成,链接方式,dlopen、dldlsym的应用,通过动态库去修改主程序逻辑
这部分主要讲工具的使用,原理,简单的Demo实战
-
应用砸壳
为什么要砸壳,砸壳工具介绍,砸壳的原理,砸壳工具的具体使用,怎么对Extension砸壳
-
MachOView
介绍通过MachOView去流程文件结构,可以获取哪些有用的信息,这些信息的利用。
-
class-dump
class-dump的原理,class-dump的具体使用,怎么从头文件寻找有用的信息
-
Reveal查看界面结构
Reveal介绍,Reveal在正向和逆向开发中的作用,Reveal的具体使用
-
Cycript
Cycript介绍与安装,使用Cycript查看界面构成,查看当前ViewController继承关系,通过Cycript修改程序
-
抓包工具
中间人攻击,抓包工具介绍,抓包工具的使用,篡改数据包,拦截https
-
静态分析
介绍IDA,Hopper的使用,静态分析程序实例,静态修改程序逻辑
-
LLDB调试
lldb的使用,lldb脚本,lldb调试技巧,lldb实际应用分析,过反调试。
-
theos
theos简介,安装与编译,用法实例,开发Tweak,iOSOpenDev的使用,使用Xcode编译生成iOS的动态库
-
其它iOS越狱工具
介绍其它在越狱iOS设备上的工具,包括OpenSSH、iFile、SQLite、syslogd...
这部分具体的实例待定,主要教学员寻找突破口,逆向的思维,切入点,切入方法,利用到不同的分析技能,提高乐趣。
-
跟踪程序执行流程
tweak代码注入某app,增强log、在UI上提示跟踪信息
-
监听上传网络请求
注入某app,监听网络请求、并将记录上传服务器
-
分析某App实现XXX功能
逆向分析的思路,过反调试,寻找切入点,寻找目标函数,调试技巧,应用重签名,增加程序功能,篡改程序逻辑
-
迁移到非越狱机
将Tweak的功能移植到非越狱手机,直接迁移或代码进行重构。
为学员了解下有哪些保护方案和措施,一方面能应对一些简单的保护,另一方面知道怎么去加固自己的应用。
-
移动安全现状
介绍移动安全如今的现状,存在哪些安全问题,开发者对于安全的意识,市面上利用安全漏洞的黑产链
-
应用安全的重要性
介绍为什么应用安全如此重要,当前哪些应用存在安全问题,还有哪些潜在的安全问题,对于这些问题我们应该如何应对
-
数据传输与文件存储
列举现有很多不安全的数据传输和文件存储方案,可能造成的安全问题,如何去保证数据的安全
-
加密字符串
为什么需要加密字符串,使用密钥保存为例,加密字符串前后的对比,加密字符串的方案
-
混淆类名方法名
为什么需要混淆类名方法名,常见的类名方法名突破口,如何混淆,混淆前后的效果对比
-
增加反调试,越狱检测等
怎么增加反调试以及各种检测,如何写代码难以逆向,怎么去保护自己的应用不被破解
学完这些课程后你能:
- 能让你的简历脱颖而出,获得面试官的青睐
- 能够独立进行逆向分析和逆向开发并深入理解原理
- 能加深对移动应用安全的认识,学会审计应用安全性
- 能够促进正向开发并从优秀应用中增加经验