一阶段
| C、C++ | 编译、链接、装载运行的过程;基本数据类型、用户自定义数据类型在内存中的表现形式;泛型编程、异常处理。 C中的分支语句、循环语句等语句的汇编层次的实现原理 C++中各类语法(糖)的实现原理 |
数据结构 | 常用的数据结构及其相关算法;标准模板库的使用与STL源码学习。 |
项目: 高效数据引擎仿真 | 面向对象的思想设计,内外存中合理的数据表示,大规模数据的高效操作。在项目中不允许使用STL和其他任何三方代码 |
“勿在浮沙筑高台”,此阶段即是之后阶段的铺垫,也是学员真正理解计算机语言的开端。掌握此阶段的内容后,学员会发现自己不会再挑剔编程语言,不再挑剔编程框架;毕竟抛去表面的“语法糖”后,他们从原理上,都是同一回事。 |
二阶段 | SDK编程 | Windows SDK窗口编程;Windows消息驱动机制;对话框编程;控件编程。 |
MFC/QT程序设计 | MFC中数据绑定、子类化、控件、序列化或者QT中信号槽机制,对象树,对象属性系统,字符串翻译机制,事件和事件过滤器,动态对象转换机制等核心技术的原理及实现。 |
Windows编程 | 静态库、动态库的使用;配置文件、注册表编程;多线程编程;进程间通讯;DLL注入。 |
网络编程 | TCP套接字编程、UDP套接字编程、Socket模型、原始套接字、各种网络包格式、http、池技术。 |
数据库 | 数据库基础理论、SQL语言、ADO编程、SQL注入。 |
COM原理 | COM的基本接口、COM内部原理、自动化接口、手写COM实践。 |
项目: 自制CAD软件 | DC的概念及使用、双缓冲机制、设计模式:类工厂、命令模式、插件模式。 |
项目: 自制任务管理器 | 利用软件开发框架及Windows API,自制一个具有查看进程/线程状态,修改指定进程内存,查看各窗口信息等功能的任务管理器。 |
项目: 聊天室 | 编写C/S结构的聊天室软件,要求实现私聊、公聊、账号/昵称管理等功能。 |
项目: 远程监控软件 | 编写软件,实现远程监控功能。 |
项目: 远程信息管理系统 | 编写一个客户端/服务端架构的信息管理系统,要求有缓存机制、线程池机制,并采用三层网络通信架构。 |
第二阶段的核心目的是提高学员的开发能力。一个优秀的逆向人员,一定深谙软件开发的技巧。这个阶段所学习的知识与技巧(如常见调试手段,数据关系分析方法),均可直接帮助真实工作。学习完这个阶段,进可一鼓作气学习逆向,退可拿开发offer先工作。 |
三阶段
| 汇编 | 16位汇编;32位汇编;64位汇编;OllyDbg调试器的使用;C与汇编的相互调用。 |
调试器 | Windows异常处理框架;Windows系统的调试框架。 |
PE文件格式 | PE文件格式及其在技术对抗中的利用;壳。 |
逆向 | IDA的使用;算数运算及编译器优化;逻辑运算;流程控制语句;字符串操作;对象特征;虚表等汇编语句的识别与还原。 |
PWN | 主要讲解Pwn的分析和利用。 |
MFC/QT原理 | 深入了解MFC/QT框架的设计原理。 |
内核及驱动 | 异常处理;内核编程入门;内存管理;驱动开发框架;x86处理器中的任务执行与切换;x86处理器中的特权级别切换;内核结构体;Win64内核。 |
项目: API内联HOOK
| 内联HOOK的原理及实践,通过内联HOOK,实现对某个API的监控;并将监控信息写文件。 |
项目: 内存Dump | 从内存中Dump出指定的程序,并对导入表等进行修复,得到能够正常运行的exe文件。
|
项目: PE解析软件 | 编写软件,解析PE格式,功能包括但不限于:转换RVA / VA /偏移;解析节信息;解析导入表、导出表、资源表等。 |
项目: 手写PE文件 | 依据所学的PE格式及Windows加载PE文件的知识,利用十六进制编辑器,纯手工写一个exe文件。要求能正常运行并显示欢迎界面。 |
项目: 分析WinDbg某功能 | WinDbg的命令窗口,即使短时间刷新了大量文字显示,也不会闪烁。通过调试分析 WinDbg,找出其技术核心。 |
项目: 自己编写调试器 | 编写三环调试器,要求支持单步、步过、内存断点、反汇编指令、查看/修改内存、记录运行指令等功能。 |
项目: 驱动级的任务管理器 | 编写驱动级的任务管理器,要求具有查看进程、线程、窗口信息,对指定进程的内存进行查看与修改等功能。 |
第三阶段重在方法,授人以渔,不重剑招,但重剑意。学习完这个阶段,可以了解C/C++特性的底层机制,可以从有限的时间中推导出各类操作系统、流行框架解决问题的基石。精修此阶段,有望达到“草木竹石,皆可为剑”的高层境界。 |
四阶段 | Android开发 | Java语言 Kotlin语言 Android应用程序开发 Android网络编程 |
NDK开发 | Android C/C++开发 Linux SDK开发 Android JNI编程 |
ARM汇编 | 32位ARM汇编开发 64位ARM汇编开发 代码注入 Inline Hook |
Android逆向 | 反编译工具介绍 Smali汇编指令 Java/kotlin代码还原 APK重打包、调试 |
NDK逆向 | Android C代码还原 Android C++代码还原 Android NDK调试 Android网络协议分析 |
DEX文件格式 | DEX文件格式讲解 ODEX文件格式讲解 OAT文件格式讲解 VDEX文件格式讲解 |
ELF文件格式 | ELF文件格式讲解 ELF文件格式对抗 ELF文件代码注入 ELF文件Hook |
Android加壳 | Android一代壳原理及实现 Android二代壳原理及实现 Android三代壳原理及实现 Android VMP壳原理及实现(指令转换) Android VMP壳原理及实现(指令模拟) OLLVM原理及使用 |
Android HOOK | Android ROOT原理 Xposed原理及使用 Frida原理及使用 Unicorn原理及使用 Unidbg原理及使用 |
Android内核 | Android源码编译 Android系统定制 |
科锐于2012年开设了Android系列的开发和逆向相关专题课程,经过多年的教学摸索以及和用人单位的积极沟通,Android系列教学体系已经成熟,很多毕业学员已经入职阿里、腾讯、360、金山、安天等公司从事Android安全和开发相关的工作岗位。 |