谈谈二进制安全学习路线

简介: 前言之前有个年轻的朋友问我二进制安全怎么学习,有没有什么学习路线,还问我有没有什么培训机构可以推荐,今天我特地写一篇文章来解答这个问题;笔者个人将二进制研究方向分为以下几个(可能不同的人有不同的看法):1.windows平台 2.Linux平台3.mac平台3.android和ios平台4.浏览器5.模糊测试(Fuzzing)技术(注意:这种技术可以在上面所有平台使用,不过不同的平台使用的工具方法有差异)

前言


之前有个年轻的朋友问我二进制安全怎么学习,有没有什么学习路线,还问我有没有什么培训机构可以推荐,今天我特地写一篇文章来解答这个问题;

笔者个人将二进制研究方向分为以下几个(可能不同的人有不同的看法):

1.windows平台  

2.Linux平台

3.mac平台

3.android和ios平台

4.浏览器

5.模糊测试(Fuzzing)技术(注意:这种技术可以在上面所有平台使用,不过不同的平台使用的工具方法有差异)


Fuzzing


先谈谈自学,这里泉哥曾经讲过一个以目标为导向的做法,个人比较赞同,这里我把这个做法大致讲一讲,这里以二进制安全中的Fuzzing为例:

入门Fuzzing涉及哪些系统性的技术内容呢?可以拿国外知名大会的培训课程为例,比如BlackHat、CanSecWest等等,这里以CanSecWest上的"Advanced Fuzzing and Crash Analysis"培训课程为例:

比如课程给出的前置条件:

这里给出其有效地址https://web.archive.org/web/20190406090229/https://cansecwest.com/dojos/2019/vulndisco.html

Students should be prepared to tackle challenging and diverse subject matter and be comfortable writing functions in in C/C++ and python to complete exercises involving completing plugins for the discussed platforms. Attendees should have basic experience with debugging native x86/x64 memory corruption vulnerabilities on Linux or Windows

涉及C/C++、Python和汇编,这里就需要先去找相应语言的经典书籍先入个门,至少保证先看得懂代码。

再看第一天的课程目录,用相关标题去搜索就可以得到相关的知识点,比如AFL、libFuzzer、Corpus generation等等,遇到不懂的就是一个知识点,自己设法去弄懂并实践它就是学习的过程。后面几天的课程按照如此逻辑去学习;

学习了课程之后就是要去实践(这里给出一个科学的模式):

学习=>应用=>反馈=>学习...如此反复循环;


浏览器漏洞挖掘学习路径


这里以挖Chrome漏洞为例:

0.学习git相关基础知识(在复现chrome漏洞时候需要用到),学习一下前端中的JS这门语言(原型链之类的你总要理解的吧)

1.学习一下编译原理(主要是V8引擎那边有用到编译原理相关知识)

2.学习一下C++语言(V8引擎是C++编写的)

3-1.看一下有关webkit相关的书籍(国内的话这里推荐《webkit技术内幕》这本书),主要是要理解v8引擎的主要逻辑,这个对调式chrome漏洞非常有帮助;

3-2.chrome 相关知识 https://www.youtube.com/watch?v=kNzoswFIU9M&list=PLNYkxOF6rcICgS7eFJrGDhMBwWtdTgzpx

3-3.Chromium Security architecture documentation https://docs.google.com/drawings/d/1TuECFL9K7J5q5UePJLC-YH3satvb1RrjLRH-tW_VKeE/edit

3-4.Permissions in Chrome

https://docs.google.com/document/d/1U8S5k9WRFC53R611CRGAlYVuHNxjZGph3WPonkCTuzk/edit#

3-5.App/extension permissions

https://docs.google.com/document/d/1gVNcET12tSsnMN0vADVTlM3OFFmY3Lpn7kB6k_QdoU8/edit#

3-6.Web browser engineering book

https://browser.engineering/security.html

3-7.Browser Security Whitepaper

https://t.co/wsyDoGmLKe

3-8.去复现漏洞,再去看看历史漏洞中大佬们的讨论,说不定你会发现什么...

以上顺序,0-2最好在3之前,3中顺序不分先后,看你兴趣了

其他


其他的平台的学习路线,再举个例子,以安卓平台为例: 你可以Google一下 awesome-android-security,里面一般都有教你怎样学习的资源;

国内的话有个叫看雪的论坛不错,里面也有一些培训机构的广告,你可以去看看那些培训机构的目录,按照里面的路径来学也可以


有关培训


上面的自学适合没钱但是有毅力的朋友,有钱但是自觉性稍微差一点的朋友可以考虑培训班培训一下,据笔者多年观察,大多数培训只是教你入门, 市场上有关二进制培训的广告不少,但是靠谱的讲师不多,各位小白需要注意(家里有矿当我没说),至于谁谁谁靠谱,谁谁谁不靠谱,我这里不说具体名字,但是我这里教你甄别的一些方法:

具体操作如下:

1.在google/bing/知乎里面输入: xx机构靠不靠谱?诸如此类的问题

2.注意:一定要查看多个人的意见或者观点,自己进行归纳分析,找出哪个对你是靠谱的,哪个是合适你的;

总结起来就是一句话:要懂得信息搜集啊,兄弟。。。

目录
相关文章
|
11月前
|
算法 程序员 C++
C++语言学习知识点总结
C++语言学习知识点总结
72 0
|
11月前
|
算法 C语言 C++
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
253 0
|
30天前
|
存储 前端开发 JavaScript
前端语言串讲 | 青训营笔记
前端语言串讲 | 青训营笔记
20 0
|
12月前
|
算法 安全 程序员
程序员的主要基本功是编码么?
对于大多数人而言,程序员通常是简单地理解为能够编写代码的一类技术人群,那么对于一名程序员来说,编码是否是最主要的基本功呢?我个人不否认编码对于程序员的重要性,但我也认为一个合格的程序员应该具备更多的基本功,编码能力只是程序员应该具备的基本功之一。与此同时,在大多数企业的面试过程中,使用“手撕代码”来考验应聘者的代码能力已经成为一种趋势,这种现场编码的方式让很多应聘者感到压力很大,因为他们必须在短时间内接受考验,同时还要展示自己的代码能力,那么接下来就来聊聊程序员的基本功。
95 1
程序员的主要基本功是编码么?
|
4月前
|
存储 缓存 算法
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
95 0
Java入门高频考查基础知识4(字节跳动面试题18题2.5万字参考答案)
|
4月前
|
消息中间件 NoSQL 算法
Java入门高频考查基础知识8(18问1.5万字参考答案)
最重要的是保持自信和冷静。提前准备,并对自己的知识和经验有自信,这样您就能在面试中展现出最佳的表现。祝您面试顺利!Java 是一种广泛使用的面向对象编程语言,在软件开发领域有着重要的地位。Java 提供了丰富的库和强大的特性,适用于多种应用场景,包括企业应用、移动应用、嵌入式系统等。下是几个面试技巧:复习核心概念、熟悉常见问题、编码实践、项目经验准备、注意优缺点、积极参与互动、准备好问题问对方和知其所以然等,多准备最好轻松能举一反三。
65 0
Java入门高频考查基础知识8(18问1.5万字参考答案)
|
4月前
|
存储 Java 编译器
Java入门高频考查基础知识2(超详细28题2.5万字答案)
多态是面向对象编程中的一个重要概念,它允许不同类的对象对同一消息作出不同的响应。在具体实现上,多态允许一个父类的引用指向其子类的对象,并根据实际指向的对象的类型来调用相应的方法。在 Java 中,多态可以通过以下几种方式实现:在同一个类中,方法名相同,但形参列表不同,实现了多态。子类可以重写(覆盖)其父类的方法,实现多态。在父类引用中调用该方法时,根据实际指向的子类对象的类型来调用相应的方法实现。
70 0
|
11月前
|
算法 程序员 C语言
从C语言的使用转换到C++(下篇)——刷题、竞赛篇
我们上篇文章讲述了C++中的一些基础语法和常用函数(从C语言的使用转换到C++(上篇)——刷题、竞赛篇),我们本篇文章讲述C++STL的使用。
197 0
|
存储 人工智能 安全
C语言入门基础知识(万字笔记)
本篇文章,将会主要介绍c语言的基本数据类型、基本运算符、语句,三大结构、数组、指针、宏定义等内容
|
存储 安全 测试技术
Go语言入门 - 工程实践|青训营笔记
上一节课程讲解了Go语言进阶的一些知识(并发、依赖管理、测试),以及带大家初探工程实践的流程,下面是笔记,以及课后实践的完成内容。
152 0
Go语言入门 - 工程实践|青训营笔记