声明:
学习视频来自B站up主【泷羽sec],如涉及侵权行为请马上删除文章,文章所提及内容,均为学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则结果自负!!!
本文主要先容了操纵体系和驱动程序相关内容:
一、程序本质
程序是用代码(英文代码或如易语言等中文代码)编写,告知盘算秘密实行的操纵,软件类型多样,包罗脚本、二进制、web 程序等,但无论程序名称多高大上,底层都是代码。
二、操纵体系
- 与安全技能的关联
掌握操纵体系知识能得到相应安全技能。比方了解 Windows 操纵体系,可掌握内网渗透、域渗透,懂得其操纵机制就能进行逆向分析,发现潜伏问题、弊端和安全问题。但操纵体系知识对 web 渗透(二者不相关)并无资助。
- 常规内容
操纵体系构成复杂,安全人员只需掌握常规内容即可,特殊情况后续再研究。常规内容包罗注册表(Linux 没有,Windows 有),不同操纵体系(Linux、Windows、macOS)各有特点,但基本都有雷同功能(如自启动)。
Linux 防火墙
Netfilter:是 Linux 2.4 内核引入的包过滤引擎,位于内核中的包过滤功能体系,基于内核控制实现防火墙策略。它设有 5 个控制关卡,对应 5 个规则链,分别是 prerouting、input、forward、output、postrouting。数据包颠末本机时,必然颠末这 5 个链中的某个或某几个,链中的规则会对数据包进行查抄和处理 。
Iptables:是管理防火墙的工具,通过调用 Netfilter 来进行防火墙管理。它有和 Netfilter 中一模一样的 5 种规则链,还多了 4 个规则表,常用的是 filter 表,最常用的链是 input 和 output 链 。基本语法为iptables [-t表名] 选项 链名 条件 [-j控制类型],常见的控制类型有 accept 允许通过、drop 直接扬弃、reject 拒绝通过并给出提示、log 记录日志信息 。
Firewalld:是 Linux 体系中用于管理防火墙规则的守护进程和工具,它提供了一个动态的防火墙管理界面,支持运行时配置和持久化存储防火墙规则。相比 Iptables,Firewalld 更加直观和易于使用,尤其是在处理复杂的网络环境和频繁厘革的防火墙规则时。
Windows 防火墙
基本功能:Windows 防火墙是体系自带的软件防火墙,默认情况下,对于体系自带的网络应用程序,如 Internet Explorer、Outlook Express 等的网络毗连不干预。它主要阻截所有传入的未经哀求的流量,对主动哀求传出的流量不作理会,但如果间谍软件偷偷自动开放端口来让外部哀求毗连,防火墙会立刻阻断毗连并弹出安全警告。
设置界面:在 Windows 7 中,可从开始菜单进入控制面板,找到 “体系和安全” 项点击进入找到 “Windows 防火墙” 功能,可进行允许程序或功能通过防火墙、更改通知设置、打开或关闭防火墙、还原默认设置、高级设置等操纵。在 Windows 8 及以后体系,可将鼠标移动至屏幕右下角调出 “charm 栏” 选择设置,点击 “控制面板”,再点击 “体系和安全” 找到 “Windows 防火墙”。
高级设置:在 “高级设置” 中,可自定义收支站规则、毗连安全规则等。比方,可以针对每一个程序设置允许毗连、只允许安全毗连、阻止毗连三种网络毗连方式,还可以对特定的端口、协议等进行详细的规则配置2.
macOS 防火墙
体系自带防火墙:在 “体系偏好设置” 中的 “安全性与隐私” 里可找到 “防火墙” 选项卡,点击左下角的锁图标解锁后,可点击 “打开防火墙” 按钮开启防火墙,并可点击 “防火墙选项” 进行进一步配置,如设置是否允许已署名的软件自动担当传入毗连等。
Little Snitch:是一款非常实用的第三方防火墙软件,它可以资助用户控制应用程序和服务对网络的访问,防止未经授权的网络毗连,掩护用户的隐私和安全。用户可以根据自己的需求,指定哪些应用程序可以访问网络、访问哪些网络地点以及使用哪些端口等。
Hands Off!:也是一款受 mac 用户欢迎的防火墙工具,可以资助监督和管理盘算机上安装的所有应用程序的 Internet 或磁盘访问,从而掩护数据安全,防止未经授权的传输。
自启动:
Linux
添加自启动的位置和方式:
修改 /etc/rc.d/rc.local 文件:将需要自启动的脚本路径添加到该文件中,但需先确认有运行此文件的权限,如chmod +x /etc/rc.d/rc.local。
使用 init.d 脚本:在/etc/init.d/目录创建启动脚本,并使用update-rc.d命令将其添加到启动序列,如sudo cp my_service /etc/init.d/、sudo chmod +x /etc/init.d/my_service、sudo update-rc.d my_service defaults。
使用 systemd 服务:创建一个后缀为.service的文件放置在/etc/systemd/system/目录下,通过systemctl命令管理和配置服务,如sudo cp my_service.service /etc/systemd/system/、sudo systemctl enable my_service.service、sudo systemctl start my_service.service 。
用户级自启动:在用户主目录下创建.config/autostart目录,并将程序的.desktop文件放置其中,此文件需按特定格式编写,如指定程序名称、实行路径等信息。
能否通过筹划任务添加自启动及操纵方式:可以,使用crontab -e命令编辑筹划任务,添加@reboot /path/to/command如许的任务,即可在体系重启后自动运行指定脚本。
Windows
添加自启动的位置和方式:
从设置应用程序:按下Win + I打开 “设置” 应用程序,点击 “应用程序”,在右侧找到 “启动”,可在此处启用或添加要自启动的应用程序。
在启动文件夹中创建快捷方式:打开C:\Users\[用户名]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup文件夹,在其中为要自启动的程序创建快捷方式;也可先在其他位置创建快捷方式,再将其复制或移动到该文件夹。
使用任务筹划程序:按开始,键入taskschd.msc,然后按enter。右键单击左窗格中的Task Scheduler Library,选择Create Basic Task,按向导提示设置任务名称、选择 “当我登录时” 触发、实行操纵选择 “启动程序” 并欣赏选择要自启动的应用程序的可实行文件等,末了点击 “完成”。
使用注册表编辑器:对于当前用户,可在注册表中HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run位置添加字符串值,名称可自定义,数值数据为要自启动程序的文件路径;若要为所有用户添加,则在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run下操纵。
在任务管理器中启用启动应用程序:右键单击任务栏并选择任务管理器,或按下Ctrl + Shift + Esc打开任务管理器,单击左上角的汉堡包图标,选择 “启动应用程序”,在此处可启用或禁用相关应用程序。
能否通过筹划任务添加自启动及操纵方式:可以,创建一个筹划任务,将触发条件设置为用户登录等符合的条件,实行操纵设置为启动目标程序,从而实现开机自启动。
macOS
添加自启动的位置和方式:
通过体系偏好设置:打开 “体系偏好设置”,选择 “用户与群组”,点击 “登录项” 标签,点击锁形图标进行解锁后,点击 “+” 号可添加要自启动的应用程序。
使用服务管理框架或共享文件列表:苹果保举了使用服务管理框架和共享文件列表两种方式来添加登录项。使用服务管理框架添加的登录项在体系的登录项中不可见,只有卸载应用才气移除;而使用共享文件列表添加的登录项在体系登录项中可见,用户可直接控制其启用或禁用,但此 API 在 OS X 10.10 体系上有大量被弃用的情况。
能否通过筹划任务添加自启动及操纵方式:macOS 中的 “launchd” 可以用于管理自启动任务和筹划任务等,但通常不是像 Linux 或 Windows 那样直接通过简单的命令行添加雷同@reboot如许明白表现重启后运行的筹划任务来实现自启动,而是需要编写配置文件(plist)并放置到特定目录等方式来实现雷同功能 。
关于病毒启动及规避事件的问题
病毒启动时间:对于 Windows 体系,如果病毒通过上述自启动方式添加到体系中,那么在体系启动或用户登录时就可能会启动病毒,如通过注册表的Run键值添加自启动项的病毒,会在体系启动过程中,当读取注册表该键值时被触发启动9.
能否规避事件:
用户层面:保持精良的安全意识和使用习惯可在肯定程度上规避风险,如不随意下载和安装泉源不明的软件、定期更新体系和杀毒软件等。
体系层面:操纵体系自己也有一些安全机制来防止未经授权的自启动,如 Windows 的用户账户控制(UAC),当程序试图添加自启动项等需要管理员权限的操纵时,会提示用户确认,用户可借此发现可疑程序。同时,杀毒软件和安全防护工具也会监测和拦截可疑的自启动行为和病毒程序。
筹划任务:
Linux 筹划任务
crontab 命令:是 Linux 体系中用于设置周期性实行任务的工具。用户可以通过crontab -e命令编辑自己的筹划任务列表,格式为分 时 日 月 周 命令,每个字段代表不同的时间单位,取值范围和寄义如下:
分:0-59,表现分钟。
时:0-23,表现小时。
日:1-31,表现日期。
月:1-12,表现月份。
周:0-6,其中 0 和 7 都表现星期日,表现星期几。
命令:要实行的命令或脚本的路径。
比方,0 0 * * * /usr/local/bin/daily_backup.sh表现每天破晓 0 点 0 分实行/usr/local/bin/daily_backup.sh脚本。
at 命令:用于在指定的时间实行一次任务。使用at命令后,会进入一个交互界面,输入要实行的命令,末了按Ctrl + D组合键竣事输入,任务就会在指定的时间实行。比方,at 10:30 tomorrow表现明天上午 10 点 30 分实行输入的任务。
systemd 定时器:是 systemd 体系和服务管理器的一部门,用于代替传统的 cron 任务。它通过.timer和.service文件组合来定义定时任务和对应的服务。可以实现更精确的时间控制和依靠管理,以及更好的日志记录和错误处理。比方,创建一个名为my_task.timer的定时器文件,配置其定时触发时间,并关联一个对应的my_task.service服务文件来实行具体的任务逻辑。
Windows 筹划任务
任务筹划程序:通过在开始菜单中搜索 “任务筹划程序” 或运行taskschd.msc命令打开。在任务筹划程序窗口中,可以创建基本任务或高级任务。创建基本任务时,会有向导引导用户设置任务的名称、形貌、触发器(如每天、每周、每月、一次性等时间条件)、操纵(启动程序、发送电子邮件等)以及其他条件(如只有在盘算机空闲时运行等)。
schtasks 命令:是命令行下用于管理筹划任务的工具。比方,schtasks /create /tn "My Task" /tr "C:\Program Files\MyApp\MyApp.exe" /sc daily /st 09:00命令创建了一个名为 “My Task” 的筹划任务,每天上午 9 点启动指定路径的程序。
Windows PowerShell:使用New-ScheduledTask等相关命令来创建和管理筹划任务。比方,以下 PowerShell 脚本创建一个每天破晓 2 点实行notepad.exe的筹划任务:
macOS 筹划任务
launchd:是 macOS 体系中用于管理守护进程、代理程序和定时任务的基础架构。用户可以通过创建.plist配置文件并将其放置在特定的目录下来定义筹划任务。配置文件中包含了任务的标识、实行的程序路径、触发条件等信息。比方,创建一个名为com.example.my_task.pli
将该文件放置在~/Library/LaunchAgents/目录下,体系会根据配置文件中的设置在每天上午 9 点 30 分实行/usr/local/bin/my_task.sh脚本。
iCal:可以通过 iCal 应用程序创建提醒事项或事件,并设置其重复周期和提醒时间等,来实现雷同于筹划任务的功能。不外,iCal 主要侧重于日程安排和提醒,对于实行复杂的脚本或程序相对不太方便,但其界面较为直观,适合一些简单的定时提醒需求。
cron:macOS 体系也支持 cron 命令,其基本用法与 Linux 中的 cron 雷同。用户可以通过编辑crontab -e来添加筹划任务,格式和规则与 Linux 中的 cron 任务相同。不外,在 macOS 中使用 cron 相对较少,更多的是使用 launchd 来管理定时任务。
事件日志:
Linux 事件日志
常见日志文件及位置:
/var/log/messages:记录体系的常规信息,包罗体系启动、服务启动与停止、内核消息等。比方,硬件设备的检测和初始化信息会记录在此文件中,如磁盘设备的辨认和挂载情况。
/var/log/syslog:与/var/log/messages雷同,不同的 Linux 发行版和体系配置可能会将一些体系事件记录到这个文件中,是体系日志的一个常见存储位置。
/var/log/auth.log 或 /var/log/secure:主要记录体系的认证相关信息,如用户登录、注销,sudo 操纵,以及与认证相关的错误信息等。
/var/log/cron:用于记录 cron 任务的实行情况,包罗筹划任务的启动时间、实行结果等。
/var/log/dmesg:包含内核启动时的打印信息,如内核检测到的硬件信息、内存初始化情况、驱动加载信息等。
/var/log/audit/audit.log:是 Linux 审计体系的日志文件,记录了与体系安全相关的各种事件,如文件访问、进程实行、用户操纵等,可用于检测和分析潜伏的安全威胁。
日志检察方法:
使用文本检察命令:如cat、less、more等,直接检察日志文件的内容。比方,cat /var/log/messages可以快速检察messages日志文件的全部内容,但对于大型日志文件,使用less或more命令会更方便,可以逐页检察。
使用grep命令过滤查找:结合grep命令可以根据关键词快速查找特定的日志信息。比方,grep "error" /var/log/messages可以查找messages日志中包含 “error” 关键词的所有行,便于快速定位错误信息。
通过体系日志管理工具:一些 Linux 发行版提供了图形化的日志管理工具,如 GNOME Logs 等,方便用户直观地检察和搜索日志。
Windows 事件日志
日志分类及内容:
应用程序日志:记录与应用程序相关的事件,如应用程序的启动、停止、错误、警告等信息。当某个应用程序出现故障或异常时,会在该日志中生成相应的记录,包罗应用程序的名称、版本、错误代码等详细信息,有助于开发人员和管理员排查问题。
安全日志:主要记录与体系安全相关的事件,如用户登录、注销、账户锁定、权限更改、资源访问等操纵。通过对安全日志的分析,可以检测到是否有未经授权的访问实行,以及体系的安全策略是否被正确实行。
体系日志:包含体系组件和设备驱动程序等产生的事件,如体系启动和关闭、设备驱动程序的加载和卸载、硬件故障等信息。体系管理员可以通过检察体系日志来了解体系的运行状态,实时发现并解决潜伏的体系问题。
安装日志:记录体系和应用程序的安装过程及相关事件,包罗安装的时间、安装的软件名称、版本、安装过程中出现的错误等信息,对于排查安装过程中的问题非常有用。
检察方式:
事件检察器:通过在开始菜单中搜索 “事件检察器” 或运行eventvwr.msc命令打开。在事件检察器窗口中,可以欣赏不同类型的日志,检察详细的事件信息,还可以根据事件的级别(如信息、警告、错误、严峻等)、泉源、时间等条件进行筛选和排序,以便快速定位所需的事件记录。
PowerShell 命令:使用Get-EventLog等 PowerShell 命令来获取和检察事件日志。比方,Get-EventLog -LogName Application -Newest 10可以获取应用程序日志中的最新 10 条记录,方便在命令行环境下快速检察关键的应用程序事件。
macOS 事件日志
日志存储与特点:
在 macOS 10.12 之前,体系日志主要存储在/var/log目录下的多个文件中,如system.log、install.log等。从 macOS 10.12 开始,苹果引入了 “unified logging”(同一日志)体系,日志数据存储在/var/db/diagnostics目录下的 tracev3 格式化文件中,不外/var/log/system.log等文件仍然存在,但包含的有用信息相对较少。
检察方法:
控制台应用程序:通过点击 “前去” 菜单,选择 “应用程序”,再进入 “实用工具” 文件夹,双击 “控制台” 应用程序来打开。在控制台中,可以检察所有进程记录的体系诊断日志,还可以根据不同的日志级别(如信息、调试、错误等)进行筛选,以便快速定位和分析问题。
命令行工具:使用log命令来检察和搜索日志。比方,log show命令可以搜索保存的日志文件,通过添加不同的参数,如--predicate用于指定搜索条件,--last用于限定显示最近的指定时间内的日志等,可以机动地查询所需的日志信息。
sysdiagnose 工具:通过在终端中输入sudo sysdiagnose -f ~/desktop/命令或同时按下Shift + Control + Option + Command + Period组合键,可以生成一个包含体系各种信息的诊断文件,其中也包罗体系日志等详细信息,对于深入排查体系问题非常有资助。
内核驱动:
Linux 内核驱动
基本概念:Linux 内核驱动是内核的一部门,用于控制和管理硬件设备,使硬件设备能够与操纵体系进行通信和交互。它充当了硬件与操纵体系之间的桥梁,让操纵体系能够有效地利用硬件资源。
常见类型:
- 字符设备驱动:用于处理像字符流一样的数据传输,如串口、终端等设备。用户可以通过读写字符设备文件来与这些设备进行交互.
- 块设备驱动:主要用于处理以块为单位的数据存储设备,如硬盘、U 盘等。它提供了对设备的高效读写操纵,支持文件体系的挂载和访问。
- 网络设备驱动:负责控制网络接口卡,实现网络协议栈与硬件之间的通信,使盘算性能够毗连到网络并进行数据传输。
- 实现框架:通常基于 Linux 内核设备模子和相关的总线架构来实现。比方,使用 platform 平台总线来衔接硬件相关的驱动与上层的字符设备驱动等,在设备树中形貌设备的相关信息,如设备的地点、停止号、时钟资源等,驱动程序通过解析设备树来获取这些信息并进行相应的初始化和配置.
- 开发与加载:开发人员可以使用 C 语言等编写内核驱动代码,遵循 Linux 内核的编程规范和接口定义。编写完成后,将驱动模块编译成内核可加载的模块文件(通常以.ko 为扩展名),然后通过命令如insmod将其加载到内核中,使用rmmod命令可以卸载驱动模块 。
Windows 内核驱动
特点与运行环境:Windows 内核驱动运行在内核模式下,具有较高的权限,可以直接访问体系的硬件资源和内核数据结构。它是操纵体系的实行部门,作为支持受掩护子体系的基础组件运行,但调试难度相对较大,一旦出现问题可能会对体系造成损害。
分类:
- 文件体系驱动程序:实现尺度的文件体系模子,负责管理和控制文件体系的读写操纵,如 NTFS、FAT32 等文件体系的驱动。
传统设备驱动程序:用于在没有其他驱动程序资助的情况下控制硬件设备,如一些旧版本的硬件设备的驱动程序,通常可以在不同版本的 Windows 体系上运行。
- 视频驱动程序:用于控制显卡等视频设备,提供图形显示和视频播放等功能。
流驱动程序:支持多媒体设备,如声卡等,负责音频数据的处理和传输。
- WDM 驱动程序:即 Windows Driver Model,支持 Windows NT 的电源管理和即插即用功能,具有较好的兼容性和可扩展性。
- 开发与管理:Windows 内核驱动的开发需要使用特定的工具和开发环境,如 Windows Driver Kit (WDK)。开发人员需要熟悉 Windows 内核的架构和相关的编程接口,遵循微软的驱动开发规范。驱动程序通常以.sys 为扩展名,通过设备管理器等工具进行安装、更新和卸载等管理操纵。
macOS 内核驱动
相关技术与框架:macOS 的内核驱动开发主要基于 I/O Kit 框架。I/O Kit 提供了一套面向对象的编程接口,用于创建和管理内核扩展(Kernel Extensions,通常以.kext 为扩展名),这些内核扩展可以实现对硬件设备的驱动和体系功能的扩展。
开发文档与资源:苹果提供了丰富的官方文档来支持内核驱动开发,如《I/O Kit Fundamentals》《Threading Programming Guide》等,详细先容了 I/O Kit 的使用方法、内核编程的基本概念和本事等。此外,还可以参考苹果开源的内核相关项目标源码,如 AppleUSBCDCDriver、IOUSBFamily 等,从中学习和了解内核驱动的实现细节。
调试与分析:当内核驱动出现问题时,可以使用 Kernel Debug Kit 等工具进行调试。通过分析内核崩溃日志(Kernel Panic Log)来查找问题所在,确定是哪个内核扩展或驱动程序导致了体系错误,并进一步定位到具体的代码行。
体系服务:
Linux 体系服务
概念与作用:Linux 体系服务是指在操纵体系启动时自动运行的背景程序或进程,它们为体系提供各种功能和服务,如网络毗连、文件共享、打印服务、体系监控等,以确保体系的正常运行和用户的各种需求能够得到满意。
常见服务类型:
- 网络服务:如 SSH 服务(sshd)用于远程登录和管理体系,HTTP 服务(如 Apache、Nginx)用于提供网页欣赏服务,DNS 服务(如 BIND)用于域名解析等。
- 文件服务:比方 NFS 服务用于网络文件共享,Samba 服务可实现 Linux 与 Windows 体系之间的文件和打印机共享。
- 打印服务:如 CUPS 服务,用于管理和控制打印机,实现打印任务的排队和处理。
- 体系监控与管理服务:像 rsyslog 服务用于体系日志的记录和管理,cron 服务用于定时实行任务,systemd-journald 服务用于收集和存储体系日志等。
管理方式:
- 使用 systemctl 命令:这是 systemd 体系和服务管理器的主要命令。比方,systemctl start service_name用于启动服务,systemctl stop service_name用于停止服务,systemctl restart service_name用于重启服务,systemctl status service_name用于检察服务的状态,systemctl enable service_name用于设置服务开机自启,systemctl disable service_name则用于取消开机自启。
- 使用 service 命令:在一些较老的 Linux 体系或基于 SysVinit 的体系中,使用service命令来管理服务。如service httpd start、service httpd stop等,但在现代的 Linux 发行版中,systemctl 命令更为常用。
Windows 体系服务
功能与重要性:Windows 体系服务为操纵体系和各种应用程序提供了基础的支持和功能,涵盖了网络毗连、安全管理、打印、多媒体等多个方面。许多体系关键功能和应用程序的正常运行都依靠于相应的体系服务,比方 Windows Update 服务用于体系更新,Windows Firewall 服务用于网络安全防护等。
常见服务列举:
- DHCP Client 服务:自动获取网络配置信息,如 IP 地点、子网掩码、网关等,使盘算性能够快速接入网络。
- Windows Time 服务:用于同步盘算机的时间与网络时间服务器,确保体系时间的正确性。
- Print Spooler 服务:管理打印队列,将打印任务发送到打印机进行打印,支持本地和网络打印机的共享打印。
- Task Scheduler 服务:负责实行筹划任务,按照用户设定的时间和条件自动运行指定的程序或脚本。
管理工具与方法:
- 服务管理控制台:通过在开始菜单中搜索 “服务” 或运行services.msc命令打开服务管理控制台。在该控制台中,可以检察所有已安装的服务,手动启动、停止、暂停、规复服务,还可以设置服务的启动类型,如自动、手动、禁用等。
- PowerShell 命令:使用 PowerShell 中的相关命令来管理服务,如Start-Service、Stop-Service、Get-Service等。比方,Get-Service -Name "Spooler"可以获取打印服务的详细信息,Start-Service -Name "Spooler"可以启动打印服务。
macOS 体系服务
特点与应用场景:macOS 体系服务同样为体系的正常运行和各种功能的实现提供了支持,其设计注重用户体验和与硬件及其他体系组件的精麋集成。比方,Time Machine 服务用于自动备份用户数据,Spotlight 服务提供快速的文件和内容搜索功能等。
主要服务先容:
- AirPlay 服务:允许用户将音频、视频等内容从 macOS 设备无线投射到支持 AirPlay 的设备上,如 Apple TV 等。
- iCloud 服务:实现用户数据在不同设备之间的同步和共享,包罗照片、文档、联系人、日历等。
- Core Data 服务:为应用程序提供数据存储和管理功能,支持对象关系映射和数据持久化,方便开发者创建和管理应用的数据模子。
管理方式:
- 体系偏好设置:许多体系服务可以在 “体系偏好设置” 中的相应选项中进行配置和管理。比方,在 “共享” 偏好设置中可以开启或关闭文件共享、屏幕共享等服务,设置共享的名称、权限等参数。
- launchctl 命令:用于加载、卸载和管理体系的启动项和服务。通过launchctl list命令可以列出当前正在运行的服务和启动项,launchctl start service_name和launchctl stop service_name分别用于启动和停止指定的服务,但该命令的使用相对较为复杂,需要对服务的标识和相关配置有肯定的了解。
- 进程线程:
Linux 进程线程
进程:
- 概念:进程是正在运行的程序的实例,是操纵体系进行资源分配和调理的基本单位。每个进程都有自己独立的地点空间、内存地区、文件形貌符等资源,不同进程之间相互隔离,互不干扰。
- 创建与管理:在 Linux 中,可以使用fork()体系调用创建一个新的进程。fork()函数会复制当进步程的地点空间等资源,创建出一个与父进程几乎完全相同的子进程。父进程和子进程会分别从fork()函数的返回点继续实行,返回值不同,父进程返回子进程的 PID,子进程返回 0。通过exec()系列函数可以在子进程中加载并实行新的程序,替换子进程原来的代码段、数据段等。
- 进程状态:包罗运行态、停当态、睡眠态、僵尸态等。运行态表现进程正在 CPU 上实行;停当态是指进程已经准备好运行,只要分配到 CPU 资源就可以立刻实行;睡眠态是进程因等待某些事件而暂时停止运行,如等待 I/O 操纵完成;僵尸态是指子进程已经竣事,但父进程尚未回收其资源,子进程的进程控制块(PCB)等信息仍然保留在体系中。
线程:
- 概念:线程是进程中的一个实行单元,是 CPU 调理和分派的基本单位。一个进程可以包含多个线程,它们共享进程的地点空间、文件形貌符等资源,线程之间的切换开销相对较小,能够更高效地利用 CPU 资源,进步程序的并发实行能力。
- 创建与管理:使用pthread_create()函数创建新的线程,该函数需要传递线程函数指针、线程参数等信息。线程函数是线程实行的具体逻辑,在函数中可以实现各种任务。通过pthread_join()函数可以等待指定线程竣事,并获取线程的返回值,用于线程间的同步和资源回收。
- 线程同步机制:常见的线程同步机制包罗互斥锁、条件变量、信号量等。互斥锁用于掩护共享资源,确保同一时候只有一个线程能够访问共享资源;条件变量用于线程之间的等待和唤醒操纵,当某个条件满意时,可以唤醒等待在该条件变量上的线程;信号量用于控制对有限资源的访问,实现线程之间的互斥和同步。
Windows 进程线程
进程:
- 结构与特点:Windows 进程由进程控制块(PCB)、程序代码、数据段、堆、栈等构成。每个进程都有一个唯一的进程标识符(PID),操纵体系通过 PID 来管理和调理进程。Windows 进程具有相对独立的地点空间,不同进程之间的地点空间相互隔离,以保证体系的稳定性和安全性。
- 创建与实行:使用CreateProcess()函数创建新的进程,该函数可以指定要实行的程序路径、命令行参数、进程的安全属性、环境变量等信息。创建乐成后,新进程会在其独立的地点空间中开始实行指定的程序。
- 进程间通信:Windows 提供了多种进程间通信(IPC)机制,如管道、定名管道、邮槽、共享内存、动态数据交换(DDE)、COM/DCOM 等。不同的 IPC 机制适用于不同的应用场景,比方管道适用于父子进程之间的通信,共享内存适用于需要高效共享大量数据的进程间通信。
线程:
- 线程管理:Windows 线程是进程中的实行单元,每个线程都有自己的线程上下文,包罗程序计数器、寄存器、栈指针等。使用CreateThread()函数创建新的线程,线程创建后会立刻开始实行指定的线程函数。通过WaitForSingleObject()或WaitForMultipleObjects()函数可以等待线程竣事,实现线程间的同步。
- 线程同步与并发控制:Windows 提供了多种线程同步对象,如互斥体、信号量、事件等。互斥体用于掩护共享资源,确保同一时候只有一个线程能够访问共享资源;信号量用于控制对有限资源的访问,雷同于 Linux 中的信号量;事件用于线程之间的通知和同步,一个线程可以等待某个事件的发生,另一个线程可以设置事件的状态来通知等待的线程。
- 纤程:除了传统的线程外,Windows 还支持纤程(Fiber)。纤程是一种比线程更轻量级的实行单元,它在用户模式下实现,不需要内核的支持。纤程可以在同一个线程中调理实行,通过ConvertThreadToFiber()函数将线程转换为纤程,然后使用CreateFiber()函数创建新的纤程,并通过SwitchToFiber()函数在不同的纤程之间切换实行。
macOS 进程线程
进程:
- 构成与资源分配:macOS 进程同样由代码段、数据段、堆、栈、进程控制块等构成,体系会为每个进程分配独立的地点空间和各种资源,如内存、文件形貌符等。进程在运行过程中通过体系调用与内核进行交互,哀求内核分配和管理资源。
- 创建与启动:使用fork()体系调用创建新的进程,与 Linux 雷同,fork()会复制当进步程的大部门资源创建子进程。子进程可以通过exec()系列函数加载并实行新的程序。另外,macOS 也支持posix_spawn()函数来创建和启动新的进程,它提供了一种更轻便、更安全的方式来创建进程,并且可以在创建过程中设置进程的属性和环境变量等。
- 进程调理与优先级:macOS 的内核采用了多种调理算法来管理进程的实行,根据进程的优先级、资源需求等因素进行调理。进程的优先级可以通过nice()体系调用来调整,较高优先级的进程会得到更多的 CPU 时间片,从而更快地得到实行。
线程:
- 线程操纵:在 macOS 中,使用pthread_create()函数创建新的线程,与 Linux 中的线程创建函数雷同。线程创建后会独立实行指定的线程函数,多个线程可以并发实行,共享进程的资源。通过pthread_join()函数等待线程竣事,回收线程资源。
- 并发编程模子:除了传统的基于线程的并发编程外,macOS 还支持 Grand Central Dispatch(GCD)和 Operation Queue 等高级并发编程模子。GCD 是一种基于队列和任务块的并发编程框架,它可以自动管理线程的创建、调理和烧毁,大大简化了并发编程的复杂性。Operation Queue 则是基于面向对象的操纵对象和队列来实现并发任务的管理和调理,提供了更机动的控制和依靠关系管理。
- 线程安全与同步:为了保证多线程程序的正确性,需要注意线程安全问题。macOS 提供了与 Linux 雷同的线程同步机制,如互斥锁、条件变量等。同时,在使用一些高级并发编程模子时,也需要遵循相应的线程安全规则,比方在 GCD 中,对于共享资源的访问需要使用适当的同步机制或采用线程安全的方式来处理。
- 体系编程:
Linux 体系编程
基本概念与特点:Linux 体系编程主要是指针对 Linux 操纵体系底层功能和接口进行的编程开发工作。它涉及到对操纵体系内核的调用,以实现对体系资源的管理和控制,如进程管理、内存管理、文件体系操纵、设备驱动开发等。Linux 体系编程具有高度的机动性和可定制性,开发人员可以深入到体系底层,根据具体需求对体系进行优化和扩展。
常用编程接口与工具:
- 体系调用:是 Linux 操纵体系提供给用户程序的接口,通过体系调用,用户程序可以哀求内核完成各种操纵,如fork()用于创建进程,open()用于打开文件,read()和write()用于文件读写等。
- C 尺度库函数:在 Linux 体系编程中,C 尺度库函数也是常用的工具之一。比方,stdio.h中的printf()、scanf()等函数用于尺度输入输出操纵,stdlib.h中的malloc()、free()等函数用于内存分配和释放。
- GCC 编译器:是 Linux 下常用的编译器,用于将 C、C++ 等源程序编译成可实行文件。GCC 提供了丰富的编译选项和调试工具,方便开发人员进行代码优化和错误排查。
开发实践:
- 进程管理:通过体系调用fork()创建新的进程,使用exec()系列函数加载并实行新的程序,通过wait()或waitpid()函数等待子进程竣事,实现进程的创建、实行和同步。
- 内存管理:使用malloc()、calloc()等函数动态分配内存,使用free()函数释放内存。同时,还可以通过mmap()函数实现内存映射,将文件或设备的内存映射到进程的地点空间,方便进行文件读写和进程间共享内存。
- 文件体系操纵:使用open()、close()、read()、write()等体系调用对文件进行操纵,通过opendir()、readdir()等函数遍历目录,实现文件和目录的创建、删除、读写等功能。
- 网络编程:基于套接字(Socket)编程接口实现网络通信,使用socket()函数创建套接字,通过bind()、listen()、accept()等函数实现服务器端的监听和毗连处理,使用connect()函数实现客户端的毗连哀求,使用send()和recv()函数进行数据发送和吸取。
Windows 体系编程
焦点概念与特性:Windows 体系编程侧重于利用 Windows 操纵体系提供的丰富的 API 和框架来开发各种应用程序和体系级别的软件。Windows API 涵盖了图形界面、文件体系、网络通信、进程线程管理、内存管理等多个方面,为开发人员提供了强盛的功能和机动的控制能力。Windows 体系编程还注重与 Windows 操纵体系的集成和兼容性,能够充实发挥 Windows 平台的优势。
主要编程接口与开发环境:
- Windows API:是 Windows 操纵体系提供的一系列函数和数据结构,用于开发 Windows 应用程序和体系软件。比方,CreateWindow()函数用于创建窗口,MessageBox()函数用于显示消息框,CreateFile()函数用于打开文件等。
- Microsoft Visual Studio:是 Windows 下常用的集成开发环境,提供了丰富的开发工具和调试功能,支持多种编程语言,如 C++、C#、VB 等。Visual Studio 与 Windows API 精麋集成,方便开发人员进行 Windows 体系编程。
- .NET Framework:是微软推出的一个面向对象的编程框架,提供了丰富的类库和运行时环境,简化了 Windows 应用程序的开发。开发人员可以使用 C#、VB.NET等编程语言基于.NET Framework 进行快速开发,同时还可以方便地调用 Windows API 来实现更底层的功能。
编程实践:
- 图形界面编程:使用 Windows API 或基于.NET Framework 的 Windows Forms、WPF 等技术进行图形界面应用程序的开发,创建窗口、按钮、文本框等各种控件,实现用户与程序的交互。
- 进程线程管理:通过CreateProcess()函数创建新的进程,使用CreateThread()函数创建新的线程,通过WaitForSingleObject()或WaitForMultipleObjects()函数等待进程或线程竣事,实现多进程和多线程编程。
- 文件体系操纵:使用CreateFile()、ReadFile()、WriteFile()等函数对文件进行读写操纵,通过FindFirstFile()、FindNextFile()等函数遍历目录,实现文件和目录的管理。
- 网络编程:基于 Windows Sockets API 进行网络编程,使用socket()函数创建套接字,通过bind()、listen()、accept()等函数实现服务器端的监听和毗连处理,使用connect()函数实现客户端的毗连哀求,使用send()和recv()函数进行数据发送和吸取。
macOS 体系编程
特点与优势:macOS 体系编程结合了 Unix 的传统和苹果的创新技术,提供了丰富的编程接口和工具,使开发人员能够充实利用 macOS 体系的特性和功能。macOS 的体系编程注重用户体验和与硬件的精密结合,能够开发出高效、美观、具有精良用户体验的应用程序和体系软件。
关键编程接口与资源:
- Carbon 和 Cocoa 框架:Carbon 是早期 macOS 体系编程的主要框架,提供了对传统 Mac OS API 的访问。Cocoa 则是基于 Objective-C 语言的面向对象编程框架,提供了丰富的类库和工具,用于开发 macOS 应用程序。Cocoa 框架包罗了 Foundation、AppKit 等重要的框架,分别提供了基础数据类型、内存管理、对象序列化等功能和图形界面、用户交互等功能。
- Xcode 开发环境:是苹果官方保举的 macOS 和 iOS 应用开发环境,集成了编译器、调试器、界面设计工具等多种开发工具,支持 Objective-C、Swift 等编程语言,为开发人员提供了一站式的开发体验。
- Grand Central Dispatch (GCD):是一种强盛的并发编程框架,用于在 macOS 和 iOS 体系中管理并发任务。GCD 提供了简单易用的 API,能够自动管理线程的创建、调理和烧毁,大大进步了程序的并发性能和响应速率。
编程实践:
- Cocoa 应用程序开发:使用 Cocoa 框架中的 AppKit 等框架进行图形界面应用程序的开发,创建窗口、视图、控制器等对象,实现用户界面的设计和交互逻辑。通过 Objective-C 或 Swift 语言编写代码,实现应用程序的各种功能,如菜单操纵、按钮点击响应、文本输入处理等。
- 体系服务开发:基于 macOS 的体系服务框架,如 Launch Services、Core Data 等,开发各种体系级别的服务和应用扩展。比方,开发一个体系菜单栏应用程序,通过 Launch Services 实现开机自启,通过 Core Data 实现数据存储和管理。
- 文件体系与资源管理:使用NSFileManager类等相关类进行文件体系的操纵,如文件和目录的创建、删除、复制、移动等。同时,可以通过NSBundle类访问应用程序的资源文件,如图片、音频、视频等。
- 进程间通信与协作:使用NSDistributedNotificationCenter等机制实现进程间的通信和通知,通过NSXPCConnection实现进程间的远程过程调用(RPC),方便不同进程之间的数据共享和协作。
了解操纵体系可为内网渗透、逆向工程、病毒编写打基础,若只从事初级 web 渗透工作可不消了解,但对于红队人员来说必须掌握。
三、驱动程序
- 性质与作用
驱动程序是一种软件程序,主要用于操控硬件和操纵体系内核,运行在底层。
- 应用场景与必要性
在涉及内网渗透、逆向工程、病毒分析、安全对抗、外挂掩护等领域时,需要对驱动程序有所了解,特殊是安全对抗,不懂驱动程序无法进行分析和防御。若不涉及这些领域可不学习,但从长远看应拓宽视野。
https://www.bilibili.com/video/BV1biCoYoEAx/?
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |