二进制安全研究人员技术体系与学习规划
这是博客的第一篇文章,还是要比较认真对待的。作为一名二进制安全方向的爱好者和研究者,这里主要是介绍我认知下二进制安全研究人员需要构建的知识体系和学习策略,当然这也是我未来的学习路线。计算机领域的学习核心是“随机应变,动态学习”,而一个全面的知识体系就像“九阳真经”,可以帮助你快速地触类旁通。
在大学的学习中,很多学校都将重点放在了理论和考试上,我认为这是国内计算机教育的悲哀。粉饰的各类数据也改变不了能力的苍白,这样培养出来的不过是一群只会夸夸其谈的白痴,不是一名真正的技术领域的开拓者和研究者。在下面的技术体系中,我会以理论知识划分,但会更强调在实践中需要达到的标准。只有追求真实的落地的技术,才能获得真正的技术带来的快乐。
技术体系构建

1.底层七大件
最底层的是计算机任何领域都需要的核心基础知识,结合网安的特点,我重点认为应该是“七大件”。分别是计算机体系结构、操作系统、计算机网络、数据结构与算法、编译原理、数据库原理和设计模式。
这一部分我认为每个标准都要精而且深,我认为的标准上:
- 计算机体系结构:可以独立在《图灵完备》的游戏上设计一个基于自己体系结构的计算机
- 操作系统:可以设计实现一个简单的操作系统内核
- 计算机网络:可以设计实现一个计算机协议栈
- 数据结构与算法:这里可能比较偏应试,至少要能独立完成大公司的面试算法题
- 编译原理:可以简单设计一个自己的高级语言
- 数据库原理:可以简单实现一个自己的数据库系统
- 设计模式:这个没有什么重点的,主要就是掌握不同的设计模式
2.汇编语言学习
基础性我认为是依托各个指令集架构的汇编语言,因为汇编语言是二进制分析领域直接面临的语言,未来无论是逆向分析还是漏洞分析,都是基于汇编语言的,我重点认为需要熟悉各类的指令集架构。需要熟悉的指令集架构及其对应的汇编语言包括,包含x86/64,ARM、MIPS和RISC-V。
这一步其实主要是需要比较深入地掌握各个汇编语言的特点,可以轻松读懂反汇编代码。
3.高级语言学习
进一步正向开发的经验同样不可或缺,特别是对于各种不同的高级语言,对于不同的语言特点进行的开发也是不可或缺的。特别其实二进制对抗的过程,就是在逆向分析出他人逻辑的基础上,构建自己的逻辑来夺取程序控制权。所以编程能力非常重要,是划分安全研究员和脚本小子的重要区别。我认为至少需要熟悉目前排行较为靠前的各种语言,包括C/C++(最重要、最基础)、python(许多基础的利用解密脚本都是基于python写的}、java(很多安卓逆向和常见的软件都需要)、go、C#、PHP、RUST。
这一部分的标准是,每个语言都可以实现一些具体的项目。
4.逆向学习
然后才能初步踏入二进制安全的大门,最基础和最需要应对的第一关就是逆向分析。这一步是踏入二进制安全领域的门槛,也是最为重要的基础,我认为其中主要的核心包括:
- 逆向思维的构建:什么是逆向分析,怎样进行逆向分析,要有一个较为充分的逆向工程能力
- 分析工具的使用:逆向核心无非就是静态分析和动态调试,各类常用的逆向分析工具如何使用,如何针对不同的程序使用不同的工具,充分发挥工具的效能;
- 密码学原理:逆向分析中会经常遇到各类基础的密码学算法,如何正确识别、处理加解密算法也是十分重要的技术。
- 对抗各类加密混淆机制:逆向分析的还需要对抗各类常见的加密混淆机制,比如说OLLVM,花指令,代码加壳等各类复杂技术。
这一部分的标准,我认为至少可以独立逆向和调试在野病毒,进行完整的逆向分析。
5.0day漏洞挖掘与工具开发
在扎实的逆向基础上,下面才真正进入一个中高级二进制安全研究者的阶段。我认为这个阶段的主要是两点:
- 有独立的漏洞挖掘、分析和利用能力,能够构造完整的漏洞攻击链条
- 有较强的工具开发能力,可以独立开发出红队工具,将自身漏洞能力与红队完美结合
这里的标准,我认为是可以独立挖掘出高危0day漏洞,可以独立开发高级开源工具。
6.高级理论研究者和开拓者
再进一步,才能算一个真正的高级二进制安全研究者,这一点可能我也没有接触目前,我认为可能核心:
- 建立系统的程序分析理论,可以使用各类先进手段包括模糊测试、污点分析和符号执行等技术与理论结合
- 有宽广的技术视野,可以将各类不同的技术与二进制安全相互结合,比如人工智能技术与漏洞挖掘结合,对于卫星、车联网等先进的二进制分析
- 有强大的红队意识,可以将二进制分析技术与红队行动牢牢结合起来,有着强大的实践能力
这一部分我也很遥远暂时也不知道
学习提升规划
我认为学习提升的话,可能主要聚焦在几个点上:
1.固定基础训练。
就像是运动员日常的体能训练一样,日常的训练非常有助于保持研究人员的热情和能力。我认为CTF就是不错的路径,每天训练一到两道逆向或者pwn的题目,就可以有效地保持和提高技术水平,保持技术敏感性;
2.技术书籍阅读。
每个月至少可以阅读两本技术类书籍。书籍的学习比较博客来说,更为系统和详细,阅读书籍建立的知识体系更为详实;
3.定期有一个慢速专题研究。这一点是借鉴知乎上看到的一个博主春哥
慢速研究专题这个词是我发明的,如有雷同实属巧合。什么意思呢。举个例子,我有段时间每个月,都会慢速分析一个漏洞。慢速分析一个漏洞,就是真正慢下来,给自己定个时间预算,比如2个星期。2个星期之内,绝对不许完工。这样逼迫自己去深入分析透彻遇到的每个问题。一般来说到3-4个,就能感觉自己知识体系的由点到线,从线到面,从面到立体的质的飞跃。
4.保持笔记和博客的习惯。
笔记比较推荐obsedian可以帮助形成自己的第二大脑,博客则是一种“费曼学习法”通过输出的方式来加深学习的印象。