Rootkits,黑客之颠!内核方向应该怎么学?

李志宽
• 阅读 1441

大家好,我是周杰伦。

继续咱们的三个月入门系列文章,上次的三个月入门Web安全发布后,有读者留言让我写一写内核方面的,今天就来了。

不过学习内核方向,需要的基本功确实有点多,梳理发现再怎么着压缩,三个月时间还是不够,最后压缩到了四个月。

Rootkits,黑客之颠!内核方向应该怎么学?

内核方向可能不如Web安全那么让人熟知,搞安全的学习内核干什么?

安全领域中,主要有这几个方向会需要学习内核技术:

1、Rootkit开发,开发内核级病毒木马程序

2、内核安全开发,比如ARK开发、安全软件开发,数据防泄漏、透明加解密等

3、内核漏洞攻击技术,Kernel Exploit

因为在安全领域研究内核技术主要是Windows比较多,所以本文讲述路线仅适用于Windows操作系统。

废话不多说,上学习路线!先来一个总览:

第一个月

  • 计算机系统基础
  • C语言编程一
  • C语言编程二
  • 系统编程初探

第二个月

  • x86汇编基础
  • 软件调试技术
  • 逆向分析技术
  • HOOK技术

第三个月

  • 系统编程深入
  • x86内核基础、内存管理
  • Windows进程与线程知识
  • 系统调用、中断与异常

第四个月

  • 驱动开发入门
  • ARK工具使用
  • 内核编程
  • Rootkit技术

第一个月:C语言基础

第一个月,主要是通过学习C语言编程来掌握一些计算机的基础知识。

第一周:计算机系统基础

新手小白一开始先从计算机基本概念学起,计算机的基础架构模型,冯诺伊曼体系是什么,CPU的基本工作原理,了解操作系统的基础概念,编程是怎么一回事。

第一周的工作主要是扫盲,了解计算机系统的一些基础名词和概念,可以不用掌握的非常深,但脑子里要有一个初步的印象。

第二周:C语言基础一

第二周开始来进入C语言的学习,现代主流操作系统基本都是使用C语言开发,系统编程也基本使用C语言,学习C语言对未来学习操作系统和内核知识是必须的基础。

这一周,主要掌握一些基本的语法,main函数、输入输出、基础数据类型、基本运算符、分支判断、循环、数组,宏···能编写一些简单的程序。

第三周:C语言基础二

这一周,还是学习C语言,因为C语言实在太重要了,一周时间根本不够。相比上一周,这一周会学的更深入一些。重点掌握函数、指针、结构体、联合体、位域、sizeof、typedef、malloc/free这些知识。

学习的时候不要光看书,一定要每一个知识点在编译器里动手写代码去实践,反复练习加深巩固对知识点的理解。

同时在这个阶段,学习使用编译器(Visual Studio、Clion等)自带的调试工具进行代码调试,学习打断点、查看变量、单步执行等基础操作。

第四周:系统编程初探

有了一定的C语言编程功底,是时候来学习一些跟操作系统相关的编程,在这个过程中接触一些操作系统相关的知识。

比如文件操作、多进程、多线程、堆内存分配与释放,了解Windows 32位平台上进程模型,内存地址空间格局,进程里有哪些内容等。

第二个月:二进制分析基础

第二个月,学习一些二进制安全的基础,这一些东西,做漏洞、破解PWN、内核都需要掌握。

第五周:x86汇编基础

这一周,开始来学习x86汇编语言,做内核安全,经常会进行逆向分析、HOOK挂钩等操作,所以需要具备一定的汇编语言功底。可以从16位汇编开始,了解CPU有哪些寄存器,每个寄存器是做什么的,了解内存分段机制等。

学习基本的常用指令语法:mov、add、sub、push、pop、call、ret、jmp、je/jle/jbe、xor、mul、div、nop···

有了16位的基础,拓展了解32位下的区别,寄存器的变化。

第六周:软件调试技术

前面在学习C语言编程等时候,学习过使用编译器自带的调试器进行简单的调试,在这一周,咱们再来系统的学习一下在汇编层面进行调试。

在VisualStudio中调试的时候,除了源码调试,还可以打开汇编窗口查看汇编指令,而且最关键的是,VS将每一行C语句都和汇编指令对照起来了,非常方便我们的学习。

除了在VS中学习调试,这一周主要学习OllyDbg、WinDbg两款调试工具的使用,有了汇编语言的基础和在VS中调试的经历,学习这两款调试工具应该会轻松不少。

Rootkits,黑客之颠!内核方向应该怎么学?

学习调试函数调用过程,分析函数调用过程中涉及到的传参、跳转、返回地址、堆栈变化,理解函数调用在底层的过程,了解线程的栈里面都有哪些东西。

第七周:逆向分析技术

有了汇编语言和操作系统的一些基础知识,现在可以正式的来接触逆向分析技术了。

首先了解高级语言编译成可执行文件的过程,然后学习PE文件格式。

之后学习反编译工具IDA,学习IDA的一些基础操作,查找字符串、查找函数、图形模式和非图形模式的使用、反编译成高级语言F5功能等。

Rootkits,黑客之颠!内核方向应该怎么学?

第八周:HOOK技术

这一周学习HOOK技术,HOOK技术是搞二进制安全和内核技术方向的基本功。

学习常见的HOOK技术原理,并编程实践:inline HOOK、IAT HOOK、Windows消息HOOK。

第三个月:Windows内核入门

进入第三个月,开始全面接触Windows平台系统编程的这一套东西,为进一步学习内核打前站。

第九周:系统编程深入

学习Win32编程,掌握DLL编写、文件读写、文件遍历、进程遍历、线程遍历、模块遍历、远程线程注入等基础操作。

通过这些编程,熟悉Windows上进程、线程、模块、句柄等基础概念,了解kernel32.dll、user32.dll、ntdll.dll这些文件是做什么的。

学习使用工具:ProcMon监控进程行为。

第十周:x86内核基础、内存管理

这一周开始接触内核的基础知识,从x86的特权级别和内存管理方式入手,了解现代操作系统和CPU管理内存的底层原理。

学习x86平台特权级Ring0-Ring3模型,了解分段式内存管理机制、分页式内存管理机制,虚拟内存原理。

第十一周:Windows进程与线程知识

这一周,学习Windows内核中管理进程和线程的知识,学习进程和线程的基础数据结构EPROCESS、ETHREAD、PEB。

重点学习:Windows创建一个进程的基本过程,细节可以不用深究,但基本流程要知道,有哪些关键的步骤。

这一周完成后,对一个进程在Windows系统中是一个怎样的存在,从应用层到内核,有一个基本的认识。

第十二周:系统调用、中断与异常

这一周,重点弄懂系统调用和中断与异常两个最基本的内核概念,弄清楚它们的详细过程,Win32 API进入内核的路径和原理,内核分发系统调用的SSDT、SSDTShadow,分发中断的IDT。通过查看内核源码分析详细过程。

这一个阶段,可以结合微软曾经开源的Windows部分内核源码WRK来学习。

第四个月:内核技术进阶

进入第四个月,正式进入神秘的内核区域实战了!

第十三周:驱动开发入门

这一周,终于要开始正式编写Windows驱动啦!

首先学习使用WDK开发Windows内核驱动的基本步骤,了解DriverEntry函数、DriverObject、DeviceObject、SymbolLink、IRP这些基本概念。

然后学习驱动安装加载和卸载,同时学会使用工具加载和自己编程加载。

同时,学习内核日志输出,使用DebugView查看驱动输出的日志。

最后,掌握VirtualKD + VMware进行虚拟机内核调试,学会调试自己的驱动程序。

第十四周:ARK工具使用

这一周来学习一下ARK工具的使用,如PChunter,学习使用这些工具查看内核中的进程、驱动、系统调用表、内核钩子、应用层钩子等信息,并对前几周学习的内核知识进行复习巩固。

Rootkits,黑客之颠!内核方向应该怎么学?

第十五周:内核编程

这一周继续来深入学习内核编程,掌握使用DeviceIoCtrol与内核通信的编程,掌握内核中内存分配与释放。

学习内核的一些基本过滤框架和回调通知(进程、线程、模块、注册表等),实现一些安全防御功能(如进程保护、文件保护、注册表防护)。

第十六周:Rootkit技术

这一周,主要来学习一些Rootkit经常用到的技术:文件隐藏、进程隐藏等。

学习内核中一些关键数据结构:比如SSDT、IDT、GDT、全局进程列表、全局驱动模块列表、关机回调等,编程操作对这些数据结构进行操作(HOOK、Patch、断链等),通过修改内核数据结构,达到隐藏、回写等功能。

最后,再学习了解下64位下内核技术的一些区别,学习了解PatchGuard。

推荐学习资料

1、《windows核心编程》

Rootkits,黑客之颠!内核方向应该怎么学?

2、《深入解析Windows操作系统》

Rootkits,黑客之颠!内核方向应该怎么学?

3、《天书夜读:从汇编语言到Windows内核编程》

Rootkits,黑客之颠!内核方向应该怎么学?

4、《寒江独钓 windows内核安全编程》

Rootkits,黑客之颠!内核方向应该怎么学?

5、《Rootkits--Windows内核的安全防护》

Rootkits,黑客之颠!内核方向应该怎么学?

总结

以上就是四个月入门内核安全的学习路线了,需要说明的是,四个月的时间可能还是不太够,很多东西只能学个皮毛,但足够大家摸到这个门槛了。

大家在学习的时候,可以结合自己的实际情况进行缩短和增加学习时间。

比如你对C语言已经有基础了,就可以跳过这一部分。又比如你觉得汇编部分,一周不够,那就多加一周,适合自己的节奏就好。

大家对这份学习路线有什么疑问都可以在评论区告诉我哦。

上面的学习资料,以及Web安全学习路线图&入门学习视频 我已经整理好了,需要的可以点击下方即可领取

【Web安全学习】

Rootkits,黑客之颠!内核方向应该怎么学?

点赞
收藏
评论区
推荐文章
李志宽 李志宽
2年前
网络安全的学习方向和路线是怎么样的?
大家好,我是周杰伦!最近有同学问我,网络安全的学习路线是怎么样的?废话不多说,先上一张图镇楼,看看网络安全有哪些方向,它们之间有什么关系和区别,各自需要学习哪些东西。在这个圈子技术门类中,工作岗位主要有以下三个方向:安全研发安全研究:二进制方向安全研究:网络渗透方向下面逐一说明一下。下面的卡片可以免费领取网络安全相关的学习资料,帮助大家在学习的过程
李志宽 李志宽
2年前
新手入门二进制安全和网络渗透,该选哪个比较好?
大家好我是周杰伦1方向选择最近,有很多粉丝都不约而同的问到了我一个问题:二进制安全和网络渗透,怎么选?今天这篇文章,就是尝试解答这个问题,希望对大家选择方向上有所帮助。首先先来理清楚,这两个方向分别是干嘛的。一般来说,二进制安全方向,主要是做逆向分析、漏洞挖掘与Exploit、内核安全、破解等工作。网络渗透主要是Web安全、内网渗透、漏洞扫描与利用、安全审
亚瑟 亚瑟
3年前
IO多路复用
用户空间和内核空间Userspace(用户空间):用户程序的运行空间Kernelspace(内核空间):Linux内核的运行空间当进程运行在内核空间时就处于内核态,当进程运行在用户空间时就处于用户态。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。Kernelspace可以执行任意
李志宽 李志宽
2年前
小白怎么成为一个黑客?按照这个路线来!
大家好,我是周杰伦。接下来我会写系列的文章,给大家整理下网络安全的详细的学习步骤和学习资源推荐。今天的主题是——Web安全。Web安全是网络渗透中很重要的一个组成部分,今天跟大家聊一下,如何在三个月内从零基础掌握Web安全。第一个月第一周:HTMLCSS,学会网页基本格式,学会编写基本网页,表单,学会用浏览器F12检查元素,查看源码推荐学习地址:H
李志宽 李志宽
2年前
小白怎么混安全圈子?
大家好,我是周杰伦。在之前的网络安全如何学习的文章中,我曾经提到,除了技术学习,还要经常混安全圈子。光技术学习,如同闭门造车,混圈子,才能打开眼界,真正了解这个行业。那这个圈子该怎么混呢?主要有几个途径,下面依次说一下。一、安全论坛安全论坛上,大家会分享学习经历经验、学习资源工具,讨论遇到的问题等等,除此之外,还有很多人会在上面直接发布招聘,比什么拉勾、b
Wesley13 Wesley13
2年前
KARMA带你看攻防:WrongZone从利用到修复
!(https://static.oschina.net/uploads/space/2020/0702/190930_0Fya_4501957.jpg)内核是一个操作系统的核心所在,它的安全性直接影响着整个操作系统的安全性。Linux内核作为目前绝大多数IoT设备的内核,其安全性直接影响着包括Android、Linux等多种平台的设备。一旦Li
Stella981 Stella981
2年前
Linux内核(2)
透过现象看本质,兽兽们无非就是一些人体艺术展示。同样往本质里看过去,学习内核,就是学习内核的源代码,任何内核有关的书籍都是基于内核,而又不高于内核的。既然要学习内核源码,就要经常对内核代码进行分析,而内核代码千千万,还前仆后继的不断往里加,这就让大部分人都有种雾里看花花不见的无助感。不过不要怕,孔老夫子早就留给我们了应对之策:敏于事而慎于言,就有道而正焉
胖大海 胖大海
1年前
Linux centos7 删除多余内核
Linux下可能会存在有多个内核的情况,通过某一内核启动会出现无法登录的情况,这时我们就要选择可以正常登录的内核,成功进入系统后,将多余的内核删除。检查系统中的内核 使用yumremove或rpme删除无用内核 然后可以继续搜索验证一下这样多余的内核就删除了,千万一定要注意删错了系统就打不开了,如果大家缺乏机器练手的话可以去3A服务器看看!
胖大海 胖大海
1年前
Linux Centos7 selinux故障
首先进行selinux文件破坏,修改配置文件vi/etc/selinux/config重启,读条界面按方向键盘,可查看启动进程重启,选择内核界面,按e进入,进入命令编辑模式在倒数第二行添加selinux0 ,直接退到最后一行,然后方向键左键选择位置,最后Ctrlx继续启动这样就能成功进入系统了,进去后就可以还原原先的配置文件,大家缺乏机器练手的话可以3A看看!
程昱 程昱
2星期前
开源力量 Linux内核源码深度解析与开发实战|完结
开源力量Linux内核源码深度解析与开发实战|完结download》quangnengit.com/2586/学习Linux内核源码深度解析和开发实战需要一定的计算机科学和系统编程的基础。这个领域的学习通常分为以下步骤:1.基础知识C语言和汇编语言:熟悉C
李志宽
李志宽
Lv1
男 · 长沙幻音科技有限公司 · 网络安全工程师
李志宽、前百创作者、渗透测试专家、闷骚男一位、有自己的摇滚乐队
文章
89
粉丝
25
获赞
43