安全见闻(4)——开阔眼界,不做井底之蛙
内容预览 ≧∀≦ゞ
- 安全见闻四:操作系统安全机制深度解析
- 声明
- 操作系统机制
- 1. 注册表
- 2. 防火墙
- 3. 自启动与计划任务
- 4. 事件日志
- 5. 内核驱动与设备驱动
- 6. 系统服务
- 7. 进程与线程
- 8. 系统编程
- 从操作系统机制看病毒设计
- 1. 自启动:病毒如何在系统启动时运行?
- 2. 有多少种方式可以实现自启动?
- 3. 计划任务能否添加自启动?
- 4. 病毒何时启动?
- 5. 如何规避事件日志?
- 驱动程序的潜在漏洞
- 总结
安全见闻四:操作系统安全机制深度解析
声明
学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
操作系统的安全机制构建了网络安全防护的基石,涵盖从注册表、防火墙、自启动机制到内核驱动等多个层面。对于安全人员而言,深入理解这些机制是防范内网渗透、逆向工程和病毒编写等高级攻击技术的关键。本篇文章将详细阐述操作系统各个核心组件的安全风险与防护要点,同时结合Windows系统的实际应用场景,展示病毒编写等高级操作技术的实现途径。
操作系统机制
1. 注册表
注册表是Windows系统中至关重要的核心数据库。它以树状结构组织,包含“键”和“子键”,类似于磁盘文件系统中的目录结构。Windows注册表中的根键包括五大部分,分别存储着与系统和应用程序运行密切相关的信息:
- HKEY_CLASSES_ROOT (HKCR):存储文件类型和应用程序关联。
- HKEY_CURRENT_USER (HKCU):存储当前用户的个性化配置。
- HKEY_LOCAL_MACHINE (HKLM):包含系统、硬件和所有用户的全局配置信息。
- HKEY_USERS (HKU):存储所有用户的设置。
- HKEY_CURRENT_CONFIG (HKCC):管理当前硬件的配置。
注册表作为Windows核心组件,控制了系统的启动、驱动加载及应用程序的运行,是操作系统安全与稳定性的保障。例如,恶意软件可能通过注册表实现自启动或持久化攻击。攻击者可以通过向注册表的自启动键值添加条目,使恶意软件在系统启动时自动运行。
相比之下,Linux系统采用分布式配置文件管理系统设置,类似于Windows的注册表,但更加开放和灵活。Linux中的配置文件散布于文件系统中,并通过文本文件管理各项配置信息。
2. 防火墙
防火墙是操作系统的第一道安全屏障,负责监控和控制进出系统的网络流量。它通过配置规则,允许或拒绝特定的网络连接,防止外部攻击。然而,防火墙并非万无一失。由于它主要基于数据包包头信息进行检测,防火墙无法识别通过合法端口流入的恶意流量,也无法阻挡绕过防火墙的攻击。在这种情况下,防火墙应结合其他安全机制,如入侵检测系统(IDS)和入侵防御系统(IPS),以提高防护效果。
3. 自启动与计划任务
自启动机制让系统能够在启动时自动运行某些程序,提升用户体验。然而,对于攻击者来说,自启动也是实现持久性控制的理想途径。Windows下有多种方式可以实现自启动,常见的包括修改注册表、启动文件夹或服务。
此外,恶意软件还可以通过计划任务实现自启动。攻击者可以利用任务计划程序(Task Scheduler),创建在系统启动或指定时间运行的任务。计划任务的灵活性较高,能够设置复杂的触发条件,如系统空闲时或特定事件触发时启动。
这些机制使得攻击者可以在系统启动时或用户登录时运行恶意程序,并通过清除事件日志、伪装为系统进程、进程注入等方式规避安全检测和日志审查。通过这些技术,病毒能够在系统中隐藏自己,逃避管理员的监控。
4. 事件日志
事件日志是系统运行过程中的“日记”,记录着系统、应用程序和安全事件。对于防御者而言,事件日志是溯源攻击、发现异常行为的重要工具。通过分析事件日志,可以确定攻击者的进入路径、所执行的操作及系统的反应。然而,红队攻击中常见的一个策略是清理或禁用事件日志,掩盖攻击痕迹。确保事件日志的完整性和及时备份是事件溯源的重要手段。
Windows 使⽤“事件查看器”管理⽇志⽂件,记录的信息包括应⽤错误、系统警告等。在 Linux 中,⽇志通常存储在 /var/log ⽬录下,常⻅的⽇志⽂件如 syslog 和 dmesg。
5. 内核驱动与设备驱动
内核驱动程序是操作系统与硬件设备之间的桥梁,它运行在操作系统的内核层面,能够直接访问硬件资源。由于内核驱动拥有高权限,攻击者可以通过漏洞或恶意的内核驱动程序实现对系统的全面控制。例如,恶意内核驱动可能绕过安全防护机制,直接操纵系统资源。此外,设备驱动程序负责与特定硬件设备(如显卡、网卡等)通信,其安全性同样至关重要。恶意设备驱动或驱动程序中的安全漏洞也可能被攻击者利用,破坏系统安全。
在 Windows 中,设备驱动如显卡驱动通过 Device Manager 管理。⽽在 Linux 中,内核模块可以通过命令 lsmod 查看和 modprobe 加载。
6. 系统服务
系统服务是操作系统中以后台方式运行的程序,用于执行网络服务、打印服务、安全服务等功能。攻击者可通过修改或劫持系统服务实现持久化攻击,或通过暂停防护软件的服务启动恶意程序。因此,定期审查系统服务的配置与状态,尤其是网络和安全相关的服务,对防止攻击者滥用系统资源非常重要。
Windows 的服务可以通过“服务管理器”(services.msc)查看和管理,常⻅的服务如
Windows Update。在 Linux 中,systemd 管理服务,命令如 systemctl 可以⽤于启动、停⽌
服务。
7. 进程与线程
进程是操作系统中执行的基本单位,而线程是进程中的执行路径。攻击者常通过创建恶意进程或隐藏线程来执行恶意操作,利用多线程技术加速恶意代码的执行效率。在网络安全防护中,监控系统中的异常进程和线程活动,尤其是具有高权限的进程,是识别攻击的重要手段。
Windows 的任务管理器可以显⽰系统中的所有进程。在 Linux 中,命令 ps 或 top 可以查看进程和线程的信息。
8. 系统编程
系统编程涉及与操作系统底层服务的交互,通过编写程序实现对硬件、文件系统、内存等资源的管理。系统编程是高级安全技术,如漏洞利用、病毒编写、内核开发等领域的重要基础。熟练掌握系统调用和API接口,不仅有助于编写高效的系统应用程序,还能深入理解操作系统的内部机制和安全弱点,为应对复杂的网络攻击提供技术支持。
在 Windows 中,开发者可以使⽤ WinAPI 进⾏系统编程,⽐如控制⽂件、进程、线程。在 Linux 中,POSIX 标准的 API 如 fork()、exec() 提供进程管理功能。
从操作系统机制看病毒设计
在设计和分析恶意软件时,操作系统的底层机制为病毒的传播和隐藏提供了多种途径。在Windows系统中,病毒可以利用自启动机制、计划任务、事件日志等功能实现持久化存在并规避检测。同时,驱动程序的潜在漏洞也是攻击者利用的重要切入点。以下将通过几个关键问题详细分析病毒设计的常见方式。
1. 自启动:病毒如何在系统启动时运行?
在病毒设计中,自启动功能是保证恶意代码在系统每次重启后依然能够自动运行的关键技术。Windows提供了多个位置和方式来添加自启动项:
-
注册表:病毒可以通过修改注册表的自启动键(如
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
或HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
)添加自身为自启动项。每次系统启动时,Windows会自动加载这些键中指定的程序。 -
启动文件夹:病毒还可以将自身或其启动脚本放置在用户的启动文件夹中(
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
),这样在用户登录时也会自动运行。 -
服务:通过伪装为系统服务,病毒可以添加到Windows服务列表中,并设定为自动启动。通过命令行(
sc create
)或修改注册表(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
),病毒能够持久地在系统后台运行,不易被发现。
2. 有多少种方式可以实现自启动?
除了上述常见的注册表键和启动文件夹,Windows还支持许多其他实现自启动的机制:
-
RunOnce、RunServices等注册表键:这些键值在不同的启动阶段运行程序。RunOnce只在下一次启动时运行,之后会被删除;而RunServices则在更早的阶段加载服务。
-
计划任务:通过Windows任务计划程序,病毒可以创建复杂的计划任务,指定其在系统启动、用户登录或特定的时间和事件发生时自动运行。
-
WMI事件订阅:病毒还可以利用WMI(Windows Management Instrumentation)事件机制,创建事件订阅,触发条件后启动恶意程序。这种方法相对隐蔽,能够逃避传统的安全防护。
-
修改系统文件:病毒可以替换或注入到系统关键文件中,例如DLL注入,利用合法的系统调用机制来实现自启动。
3. 计划任务能否添加自启动?
计划任务是Windows提供的一种功能强大的自动化机制。病毒可以通过命令行工具(schtasks
)或者任务计划程序图形界面创建一个新任务,设定在系统启动、用户登录或特定时间点执行恶意代码。这种方式的灵活性使得恶意软件可以在较为隐蔽的情况下定期运行。
计划任务的优势在于其触发条件可以设置得非常复杂,病毒能够在用户不活跃时或特定事件发生时(例如网络连接建立或文件系统变化)启动,这样大大降低了被用户发现的几率。
4. 病毒何时启动?
恶意软件的启动时机通常选择在以下几种情况之一:
-
系统启动时:通过注册表、计划任务或服务的方式,病毒可以在系统启动时第一时间加载,确保恶意行为的持续执行。
-
用户登录时:通过启动文件夹或用户级别的注册表键(如
HKEY_CURRENT_USER
),病毒可以在用户每次登录系统时自动启动。 -
特定时间或事件触发:如果使用计划任务,病毒可以在设定的时间段或间隔时间启动。此外,通过WMI事件订阅,恶意软件可以在系统检测到特定事件(如网络连接、磁盘挂载)时触发运行。
5. 如何规避事件日志?
事件日志是系统记录所有操作和异常的工具,能够帮助管理员溯源恶意行为。为避免被日志记录和分析,病毒通常会采取以下措施:
-
禁用或清除日志:一些病毒会尝试禁用系统的事件日志服务,或者定期清除日志文件,防止管理员通过日志发现异常行为。
-
伪装为系统进程:通过将自身伪装成常见的系统进程(如
svchost.exe
),病毒可以隐藏在正常的系统进程列表中,降低被发现的可能性。 -
进程注入:病毒还可以将自身代码注入到合法进程中运行,通过使用系统进程来隐藏恶意行为,进一步逃避安全软件的检测。
-
规避虚拟环境:一些高级恶意软件能够检测其是否处于虚拟机或沙盒环境中,如果发现自己被监控,恶意代码会延迟执行或不执行,从而规避自动化的安全分析工具。
驱动程序的潜在漏洞
除了自启动机制,驱动程序的漏洞也是病毒编写者的常用攻击手段之一。驱动程序是操作系统与硬件设备之间的桥梁,分为内核驱动和设备驱动两类。它们运行在系统的核心层,拥有极高的系统权限,这使得它们一旦被恶意利用,能够直接控制硬件设备和操作系统的核心功能。
-
内核驱动漏洞:内核驱动程序能够直接访问系统的硬件资源和内存,任何未加防护的内核驱动都可能被攻击者利用,实现内核级别的漏洞攻击或提权。这类攻击能够绕过大部分的安全防护机制,因为它们直接控制了系统的核心。
-
设备驱动漏洞:设备驱动程序负责与特定硬件(如显卡、网卡等)通信。攻击者可以通过逆向工程分析这些驱动程序的漏洞,进而开发针对特定设备的恶意代码。例如,在内网渗透中,攻击者可以利用未修补的驱动程序漏洞,提升权限或进行恶意操作。
-
安全对抗与外挂保护:了解驱动程序的运行机制是病毒编写者和安全研究人员在安全对抗中的重要技术。例如,很多安全软件会使用内核驱动程序来保护系统,而攻击者可以通过开发特定的内核级漏洞攻击工具,绕过这些防护机制。
总结
操作系统安全是网络安全防护的基础,也是最复杂的一环,涉及内核漏洞、驱动程序等多层面技术。虽然这些技术对新手来说可能显得高深,但提前掌握相关知识有助于明确学习方向,逐步深入理解网络安全的核心原理。从注册表管理、防火墙控制,到自启动、计划任务和事件日志,每个组成部分都对系统安全有重要影响。对于安全人员而言,熟悉这些底层机制不仅是理解攻击技术的基础,也是有效防御的关键。通过持续学习这些核心技术,安全从业者能够更好地应对复杂网络攻击,确保系统稳定与安全。
相关文章:
安全见闻(4)——开阔眼界,不做井底之蛙
内容预览 ≧∀≦ゞ 安全见闻四:操作系统安全机制深度解析声明操作系统机制1. 注册表2. 防火墙3. 自启动与计划任务4. 事件日志5. 内核驱动与设备驱动6. 系统服务7. 进程与线程8. 系统编程 从操作系统机制看病毒设计1. 自启动:病毒如何在系统启动时运行&a…...
(二十二)、k8s 中的关键概念
文章目录 1、总体概览2、第一层:物理机、集群、Node、Pod 之间的关系2、第二层:命名空间 Namespace3、定义4、控制平面(Control Plane)5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践,结合实践&…...
python基础综合案例(数据可视化-地图可视化)
1.基础地图使用 注意写名字的时候要写全名,比如上海市不能写出上海,不然看不到数据 鼠标点击即可看到数据 设置属性的时候不要忘记导包 # 演示地图可视化的基础使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准…...
基于SpringBoot足球场在线预约系统的设计与实现
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...
操作系统笔记(二)进程,系统调用,I/O设备
什么是进程? 一个正在执行的程序一个包含运行一个程序所需要的所有信息的容器进程的信息保存在一个进程表中( Process Table)。进程表中的每一项对应一个进程,称为进程控制块(Process control block,PCB)。 PCB信息包括: 用户ID(UID)、进程ID(PID)…...
DevOps实践:在GitLab CI/CD中集成静态分析Helix QAC的工作原理与优势
基于云的GitLab CI/CD平台使开发团队能够简化其CI/CD流程,并加速软件开发生命周期(SDLC)。 将严格的、基于合规性的静态分析(如Helix QAC所提供)作为新阶段添加到现有的GitLab CI/CD流程中,将进一步增强SD…...
前端面试题-token的登录流程、JWT
这是我的前端面试题的合集的第一篇,后面也会更新一些笔试题目。秋招很难,也快要结束了。但是,不要放弃,一起加油^_^ 一、token的登录流程 1.客户端用账号密码请求登录 2.服务端收到请求,需要去验证账号密码 3.验证成…...
【软考高级架构】关于分布式数据库缓存redis的知识要点汇总
一.分布式数据库的含义 分布式数据库缓存指的是在高并发的环境下,为了减轻数据库的压力和提高系统响应时间,在数据库系统和应用系统之间增加一个独立缓存系统。 二.常见的缓存技术 (1)MemCache: Memcache是一个高性能的分布式的内…...
构建自然灾害预警决策一体化平台,筑牢工程安全数字防线
近年来,国家和部委也强调了要切实加强地质灾害监测预警。作为国内智慧应急领域的先行者,Mapmost持续探索利用数字孪生技术,推进自然灾害风险预警精细化,强化对监测数据的综合分析和异常信息研判处置。建立健全区域风险预警与隐患点…...
随机题两题
逆序对 题目 给定一个数组,求其中有多少逆序对,要求时间复杂度不超过nlogn。 思路 使用归并排序的分治思想,将数组递归地分为左右两部分。在合并两个有序子数组时,若左侧数组中的某个数大于右侧数组中的某个数,则可…...
信息安全工程师(69)数字水印技术与应用
前言 数字水印技术是一种在数字媒体中嵌入特定信息的技术,这些信息可以是版权信息、元数据等。 一、数字水印技术的定义与原理 数字水印技术(Digital Watermarking)是将一些标识信息(即数字水印)直接嵌入数字载体&…...
知识点框架笔记3.0笔记
如果基础太差,搞不清基本交规的(模考做不到60分),建议找肖肖或者小轩老师的课程看一遍,内容差不多(上面有链接),笔记是基于肖肖和小轩老师的科目一课程以及公安部交管局法规…...
Android组件化开发
Android组件化开发 组件化开发概念组件化开发的由来组件化开发有什么优势?组件化开发如何拿到入口参数?如何解决相同资源文件名合并的冲突?模式切换,如何使APP在单独调试跟整体调试自由切换?多个Module之间如何引用一些共同的library以及工具类?我们如何实现依赖关系及组…...
centos-LAMP搭建与配置(论坛网站)
文章目录 LAMP简介搭建LAMP环境安装apache(httpd)安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux操作系统,网页服务器Apache,…...
Python 实现日期计算与日历格式化输出
目录 一、引言 二、需求分析 三、实现思路 四、代码实现 五、代码分析 六、测试与验证 七、总结与展望 在日常的编程中,我们经常会遇到与日期相关的问题,比如计算两个日期之间的天数差、确定某个特定日期是星期几以及格式化输出日历等。本文将详细…...
npm install 安装很慢怎么办?
安装源管理器nrm sudo npm install -g nrm #macOSnpm install -g nrm #Windows以管理员身份运行 安装完毕之后通过以下命令可以切换你想要的源 nrm ls #查看源列表* npm ---------- https://registry.npmjs.org/yarn --------- https://registry.yarnpkg.com/tencent ------…...
【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据)
【WRF数据处理】基于GIS4WRF插件将geotiff数据转为tiff(geogrid,WPS所需数据) 数据准备:以叶面积指数LAI为例QGis实操:基于GIS4WRF插件将geotiff数据转为tiff警告:GIS4WRF: Input layer had an unexpected …...
python+大数据+基于Hadoop的个性化图书推荐系统【内含源码+文档+部署教程】
博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…...
修改huggingface的缓存目录以及镜像源
执行以下语句查看当前配置 huggingface-cli env默认输出应该如下 (py39-transformers) PS D:\py_project\transformers_demo> huggingface-cli envCopy-and-paste the text below in your GitHub issue.- huggingface_hub version: 0.26.1 - Platform: Windows-10-10.0.22…...
散列表:如何解决哈希表装载因子过高导致的性能下降问题?
散列表:如何解决哈希表装载因子过高导致的性能下降问题? 当哈希表装载因子过高时,会导致性能下降,可以通过以下几种方法来解决: 一、扩容哈希表 (一)原理 当装载因子超过一定阈值时,增加哈希表的大小,然后将现有的元素重新哈希到新的哈希表中。这样可以降低装载因…...
Vue Router进阶学习
各位程序员1024节日快乐~ Vue Router 是 Vue.js 的官方路由管理器,它和 Vue.js 的核心深度集成,让构建单页面应用(SPA)变得简单。以下是 Vue Router 的基本用法 Vue Router 基本用法 安装 Vue Router 首先,你需要安…...
Linux巡检利器xsos的安装和使用
一、 一般项目基本完成的时候,后期运维工作的重点就是及时的,合理的频率巡检了,巡检的目的主要是及时发现各种各样的问题 那么,自己编写shell脚本是大部分人的第一选择,这里有个比较麻烦的地方,shell脚本…...
Django+Vue项目搭建
一、使用脚手架工具搭建项目 使用脚手架工具搭建Vue项目是一个快速且高效的方式,它能够帮助开发者自动配置好项目所需的环境和依赖。 一、安装Node.js和npm 1、下载Node.js: 前往Node.js官网下载并安装最新版本的Node.js。Node.js是一个基于Ch…...
【NLP自然语言处理】Attention机制原理揭秘:赋予神经网络‘聚焦’与‘理解’的神奇力量
目录 🍔 注意力机制原理 1.1 注意力机制示意图 1.2 Attention计算过程 1.3 Attention计算逻辑 1.4 有无Attention模型对比 1.4.1 无Attention机制的模型 1.4.2 有Attention机制的模型 🍔 Self-attention演变过程 2.1 Self-attention介绍 2.2 S…...
PHP依赖注入的原理
PHP中的依赖注入(Dependency Injection,简称DI)是一种设计模式,旨在解耦和管理对象之间的依赖关系,使得代码更加灵活、可测试和可维护。其原理及关键要点如下: 一、原理 依赖注入的原理是通过外部传递依赖…...
文本相似度方案
文章目录 SequenceMatcher余弦相似度基于逆向文档频率向量化 SequenceMatcher from difflib import SequenceMatcher s1 "1.2 章节标题【abc】" s2 "1.2 章节标题【abc】、【she】、【this】" SequenceMatcher(None, s1, s2).ratio() # 0.6666666666666…...
appium 的工作原理
** 安卓: ** 1.1 appuim 基于 uiautomator2 的原理 appium 服务启动后默认在 4723 端口上创建一个 http 服务,脚本通过服务地址 http://xxxx:4723/wd/hub 和 appium 进行通信 在 初 始 化 脚 本 和 appium 连 接 的 过 程 中 appium 会 向 手 机 就 …...
ECharts饼图-富文本标签,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个饼图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供详…...
关于在windows10系统64位安装luasocket问题
luarocks install luasocket 原本以为按下enter键就会一帆风顺:结果事事出人意料之外。 C:\Users\40341>luarocks install luasocket Installing https://luarocks.org/luasocket-3.1.0-1.src.rockluasocket 3.1.0-1 depends on lua > 5.1 (5.4-1 provided …...
模型拆解(二):GeleNet
文章目录 一、GeleNet1.1编码器:PVT-v2-b21.3D-SWSAM:方向-置换加权空间注意力模块1.4KTM:知识转移模块1.5解码器模块 一、GeleNet 论文:Salient Object Detection in Optical Remote Sensing Images Driven by Transformer&#…...
快递网站推广怎么做/seo优化工作怎么样
本篇介绍的方法,参考了网上的代码。 在递归过程中,计算level,是受到了这种方法的启发。 CSDN上有篇关于树的算法,目标是把一个无序的树,变成有序的。 我看了下代码,并运行了下,感觉是可行的。 …...
wordpress去掉tag/百度收录查询api
最近松松编辑杰哥从站长圈了解到,百度搜索近期又开始整活了,不知什么情况,突然开始针对内容低质,包含色情低俗、赌博等内容的违规网站开始降权和回收百度站长平台权限行动,大量网站中招流量暴跌! 根据杰哥从百度搜索的…...
上海网络做网站公司/b2b十大平台排名
为什么80%的码农都做不了架构师?>>> 通过Spring工具类获取classpath下的文件资源 1、资源文件不在jar中 File cfgFile ResourceUtils.getFile("classpath:test.txt"); 或者 org.springframework.core.io.Resource fileRource new ClassPat…...
做网站哪个公司好/扫图片识别图片原图
C中函数是一种类型!C中函数是一种类型!C中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名。。。囧) ÿ…...
北京运营推广网站建设/搜索竞价托管
struts中核心类:ActionServlet,其中最主要的操作是RequestProcessor类中的process方法。 上篇博客提到struts实现mvc的框架图: struts实现mvc的细粒度图如下: 首先:Tomcat一启动,根据web.xml加载ActionSer…...
wordpress做api接口/seo优化系统
文章目录1、by_id定位2、by_name定位3、by_class_name定位4、by_xpath定位5、by_accessibility_id定位6、by_android_uiautomator定位在APP的原生页码中进行元素定位。 如果页面是Web(移动端里的浏览器)、混合(APP与WEBVIEW)里含…...