二进制方向
二进制方向安全更关注底层原理,无论是安全研究或者红队渗透,对整体架构和底层原理的学习能力要求一定是非常高的,所以这也就是为什么在CTF中一般二进制方向(RE、PWN)都比较难入门
以下,我分享以下学过的内容和走过的弯路,如有更好的内容请指正:)
首先是计算机基础,二进制方向更关心操作系统、协议等更底层的内容
- CS:APP
- 相信相关专业的一定不陌生,如果培养计划没有更改的话,大三左右会开一门计算机体系结构的课程,其中大部分内容在CS:APP上都有,并且由于网安学院太新,没有服务器,学校无法为同学们提供良好的Lab环境,所以缺少了很多锻炼的机会,对于每一个同学来说,这门课是非常有必要且必须要完成的
- Kernel
- 无论是xv6,还是清华的ucore,亦或是南京大学的OS课程,其目的都是为了让同学更好的了解操作系统底层是如何实现的,而并非背PPT式的完成课程。我更推荐南京大学蒋炎岩老师的课程,更新、资料更多
- 如有可能,请搭配陈海波教授的「现代操作系统:原理与实现」一起看,效果更好:)
- Compiler
计算机学院是有这个课的,所以为什么推荐CS呢(- CS143,经典,好用,详细
- 其实对于学习编译器来说,先从写一个简单编译器开始比从词法分析、语法分析、语义分析、中端优化、代码生成这一套学下来更好,前者已经有相当多的教程了,比如七天写一个可以自举的简单C编译器,先整体了解编译器是干什么的,编译到底在做什么,然后再开始学习每一个环节会更好
- 龙书依旧是经典,但是现在可能有更好的书?我不敢随意推荐,看的很少
- Programming
- 优先锻炼C/C++能力,tinySTL也好,Webserver也好,总之先模仿着写一个出来
- 不要拘泥于C++98和C with STL了,现在已经是C++20甚至23了,26都在提案了(,学习更新的特性和用法
- 适当写一写算法
在以上四个基础上,其实大部分就已经能有个比较感兴趣的方向了,下面以Compiler为主要方向继续介绍
- Programming Language | Optimization
- CSCD70,基于LLVM的中端Pass优化
- NJU软件分析,一套基于Java的程序分析框架Tai-e,里面的Assignment很有意思,对数据流分析、指针分析能有个全面的了解
- CodeQL,与程序分析相关的Datalog,Github有关的博客内容质量也非常高
- Fuzzing
- AFL,通过这篇文章可以了解Fuzzing的过程以及是如何在实战中进行漏洞挖掘的https://evilpan.com/2023/06/10/fuzzing-qrcode/
- libFuzzer,LLVM的Fuzzing库
- 阅读近年的Fuzzing相关论文,顺便一提,如果你想了解某一个方向的学术内容,可以在Github上面搜索「Awesome-xxx」,xxx是你想了解的内容
再往下Linux方向和Windows的Kernel方向其实看个人兴趣了,大佬可以都深入:)