当前位置: 首页 > news >正文

【Windows】在任务管理器中隐藏进程

在此前的一篇,我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook  NtQuerySystemInformation 并进行断链的方法实现进程隐身,实测支持 taskmgr.exe 的任意多进程隐身。

任务管理器

代码:

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include <detours/detours.h>
#include <winternl.h>
#include <string>
#include <iostream>
#include <stdio.h>
#include <vector>
#include <shared_mutex>#pragma comment(lib, "detours.lib")
#pragma comment(lib, "user32.lib")typedef struct _VM_COUNTERS
{SIZE_T        PeakVirtualSize;SIZE_T        VirtualSize;ULONG         PageFaultCount;SIZE_T        PeakWorkingSetSize;SIZE_T        WorkingSetSize;SIZE_T        QuotaPeakPagedPoolUsage;SIZE_T        QuotaPagedPoolUsage;SIZE_T        QuotaPeakNonPagedPoolUsage;SIZE_T        QuotaNonPagedPoolUsage;SIZE_T        PagefileUsage;SIZE_T        PeakPagefileUsage;
} VM_COUNTERS;// 线程信息结构体
typedef struct _MY_SYSTEM_THREAD_INFORMATION
{LARGE_INTEGER   KernelTime;LARGE_INTEGER   UserTime;LARGE_INTEGER   CreateTime;ULONG           WaitTime;PVOID           StartAddress;CLIENT_ID       ClientId;KPRIORITY       Priority;KPRIORITY       BasePriority;ULONG           ContextSwitchCount;LONG            State;// 状态,是THREAD_STATE枚举类型中的一个值LONG            WaitReason;//等待原因, KWAIT_REASON中的一个值
} MY_SYSTEM_THREAD_INFORMATION, * PMY_SYSTEM_THREAD_INFORMATION;typedef struct _MY_UNICODE_STRING
{USHORT Length;USHORT MaximumLength;PWSTR  Buffer;
} MY_UNICODE_STRING, * PMY_UNICODE_STRING;typedef struct _MY_SYSTEM_PROCESS_INFORMATION
{ULONG            NextEntryOffset; // 指向下一个结构体的指针ULONG            ThreadCount; // 本进程的总线程数ULONG            Reserved1[6]; // 保留LARGE_INTEGER    CreateTime; // 进程的创建时间LARGE_INTEGER    UserTime; // 在用户层的使用时间LARGE_INTEGER    KernelTime; // 在内核层的使用时间MY_UNICODE_STRING   ImageName; // 进程名KPRIORITY        BasePriority; // ULONG            ProcessId; // 进程IDULONG            InheritedFromProcessId;ULONG            HandleCount; // 进程的句柄总数ULONG            Reserved2[2]; // 保留VM_COUNTERS      VmCounters;IO_COUNTERS      IoCounters;SYSTEM_THREAD_INFORMATION Threads[5]; // 子线程信息数组
}MY_SYSTEM_PROCESS_INFORMATION, * PMY_SYSTEM_PROCESS_INFORMATION;// 定义一个指针函数类型
typedef NTSTATUS(WINAPI* __NtQuerySystemInformation)(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength);// 定义一个存放原函数的指针
PVOID fpNtQuerySystemInformation = NULL;
// 读写锁
std::shared_mutex ppNameListMutex;
// 受保护进程名列表
std::vector<std::wstring> ppNameList;// 声明函数
extern "C" {__declspec(dllexport)void StartHookingFunction();__declspec(dllexport) void UnmappHookedFunction();__declspec(dllexport) bool SetProtectedProcessListFromBuffer(const wchar_t* buffer, size_t length);
}NTSTATUS WINAPI HookedNtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength
);void OpenDebugConsole()
{AllocConsole();FILE* fDummy;freopen_s(&fDummy, "CONOUT$", "w", stdout);freopen_s(&fDummy, "CONOUT$", "w", stderr);freopen_s(&fDummy, "CONIN$", "r", stdin);std::wcout << L"Debug console opened.\n";
}BOOL APIENTRY DllMain(HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{// 禁用 DLL 模块的通知DisableThreadLibraryCalls(hModule);switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:{OpenDebugConsole();  // 打开控制台进行调试std::wcout << L"DLL injected, setting up hooks.\n";// 设置受保护进程列表,此函数也可以从远程进程注入线程来调用const WCHAR ppName[] = L"cmd.exe;conhost.exe";if (SetProtectedProcessListFromBuffer(ppName, wcslen(ppName) + 1)){std::wcout << L"Protected process list set successfully.\n";}else{std::wcout << L"Failed to set protected process list.\n";}// 启用 HOOKStartHookingFunction();std::wcout << L"Hooking started.\n";}break;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:break;case DLL_PROCESS_DETACH:UnmappHookedFunction();std::wcout << L"Hooking detached.\n";break;}return TRUE;
}extern "C"
__declspec(dllexport)
void StartHookingFunction()
{//开始事务DetourTransactionBegin();//更新线程信息  DetourUpdateThread(GetCurrentThread());fpNtQuerySystemInformation =DetourFindFunction("ntdll.dll","NtQuerySystemInformation");//将拦截的函数附加到原函数的地址上,这里可以拦截多个函数。DetourAttach(&(PVOID&)fpNtQuerySystemInformation,HookedNtQuerySystemInformation);//结束事务DetourTransactionCommit();
}extern "C"
__declspec(dllexport)
void UnmappHookedFunction()
{//开始事务DetourTransactionBegin();//更新线程信息 DetourUpdateThread(GetCurrentThread());//将拦截的函数从原函数的地址上解除,这里可以解除多个函数。DetourDetach(&(PVOID&)fpNtQuerySystemInformation,HookedNtQuerySystemInformation);//结束事务DetourTransactionCommit();
}// 从缓冲区解析多个进程名的函数
extern "C"
__declspec(dllexport)
bool SetProtectedProcessListFromBuffer(const wchar_t* buffer, size_t length) {if (buffer == nullptr || length == 0) {return false;  // 返回错误状态}std::unique_lock lock(ppNameListMutex);  // 写锁ppNameList.clear();  // 清空原列表std::wstring tempName;for (size_t i = 0; i < length; ++i) {if (buffer[i] == L';' || i == length - 1) {// 遇到分号或者到达缓冲区末尾,表示一个进程名结束if (i == length - 1 && buffer[i] != L';' && buffer[i] != L'\0') {tempName += buffer[i];  // 处理最后一个字符不是分号的情况}if (!tempName.empty()) {std::wcout << L"Parsed process name: " << tempName << L"\n";  // 输出调试信息std::wcout << L"Length: " << tempName.size() << L"\n";ppNameList.push_back(tempName);  // 将进程名存入列表tempName.clear();  // 清空临时字符串以解析下一个进程名}}else {// 继续读取进程名字符tempName += buffer[i];}}std::wcout << L"Total protected processes: " << ppNameList.size() << L"\n";  // 输出调试信息return !ppNameList.empty();  // 返回成功标志,如果解析后列表为空则返回false
}// 检查进程是否在受保护列表中的函数(带读锁)
static bool IsProcessProtected(const std::wstring& processName) {std::vector<std::wstring> localPpNameList;{std::shared_lock lock(ppNameListMutex);localPpNameList = ppNameList;  // 将受保护列表复制到局部变量}// 在局部变量中进行比较return std::find(localPpNameList.begin(), localPpNameList.end(), processName) != localPpNameList.end();
}static bool IsHandleValidate(const LPVOID lpAddress)
{MEMORY_BASIC_INFORMATION Buffer{};VirtualQuery(lpAddress, &Buffer, 0x30u);//std::wcout << L"HandleValidate Buffer.Protect: " << Buffer.Protect << L"\n";return Buffer.State == MEM_COMMIT && Buffer.Protect != PAGE_NOACCESS;
}static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {DWORD processId;GetWindowThreadProcessId(hwnd, &processId);// 检查窗口是否属于当前进程if (processId == GetCurrentProcessId()) {// 检索指向窗口句柄向量的指针std::vector<HWND>* pWindowHandles = reinterpret_cast<std::vector<HWND>*>(lParam);// 检查指针是否有效if (pWindowHandles && IsHandleValidate(pWindowHandles)) {pWindowHandles->push_back(hwnd);}else {// (可选)记录错误或处理无效指针情况std::cerr << "Invalid pointer passed to EnumWindowsProc." << std::endl;}}return TRUE; // 继续枚举
}static void FlushProcessWindows() {std::vector<HWND> windowHandles;// 枚举所有顶级窗口,通过lParam将指针传递给EnumWindowsProcEnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(&windowHandles));// 向每一个窗口发送 F5 来刷新窗口for (HWND hwnd : windowHandles) {// 模拟 F5PostMessage(hwnd, WM_KEYDOWN, VK_F5, 0);Sleep(10);PostMessage(hwnd, WM_KEYUP, VK_F5, 0);}
}// NtQuerySystemInformation的Hook函数,用于隐藏受保护的进程
NTSTATUS WINAPI HookedNtQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength,PULONG ReturnLength
) {//std::wcout << L"NtQuerySystemInformation hook called.\n";static bool isNotFirstHook;const size_t nodeSize = sizeof(MY_SYSTEM_PROCESS_INFORMATION);// 先调用原始的 NtQuerySystemInformationNTSTATUS status = ((__NtQuerySystemInformation)fpNtQuerySystemInformation)(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);//std::wcout << L"Original NtQuerySystemInformation returned: " << status << L"\n";// 只处理 SystemProcessInformation 类型的信息if (SystemInformationClass == SystemProcessInformation && NT_SUCCESS(status)) {//std::wcout << L"Processing SystemProcessInformation.\n";PMY_SYSTEM_PROCESS_INFORMATION pCurrentNode = (PMY_SYSTEM_PROCESS_INFORMATION)SystemInformation;PMY_SYSTEM_PROCESS_INFORMATION pPreviousNode = nullptr;bool isFirstNode = true;while (pCurrentNode != nullptr && IsHandleValidate(pCurrentNode)) {if (pCurrentNode->NextEntryOffset == 0) {  // 到达末尾break;}if (pCurrentNode->ImageName.Buffer == nullptr || pCurrentNode->ImageName.Length == 0) {// 跳过无效的进程名//std::wcout << L"Skipping invalid process name.\n";pCurrentNode = (PMY_SYSTEM_PROCESS_INFORMATION)((PUCHAR)pCurrentNode + pCurrentNode->NextEntryOffset);continue;}// 获取当前进程名std::wstring processName(pCurrentNode->ImageName.Buffer, pCurrentNode->ImageName.Length / sizeof(WCHAR));//std::wcout << L"Processing process: " << processName << L"\n";// 检查该进程名是否在受保护列表中if (IsProcessProtected(processName)) {std::wcout << L"Process is protected: " << processName << L"\n";// 如果在受保护列表中,则将该进程从链表中移除if (pPreviousNode) {pPreviousNode->NextEntryOffset += pCurrentNode->NextEntryOffset;std::wcout << L"Process removed from list: " << processName << L"\n";}else if (isFirstNode) {  // 第一个节点是受保护进程,// 替换为下一个节点的数据if (pCurrentNode->NextEntryOffset == 0) {// 如果没有下一个节点,表示列表中只有一个受保护// 将进程信息列表清空memset(pCurrentNode, 0, SystemInformationLength);std::wcout << L"Only one protected process, clearing list.\n";break;}else {PMY_SYSTEM_PROCESS_INFORMATION pNextNode =(PMY_SYSTEM_PROCESS_INFORMATION)((PUCHAR)pCurrentNode + pCurrentNode->NextEntryOffset);if(!IsHandleValidate(pNextNode)) {std::wcout << L"HandleValidate failed.\n";break;}// 将下一个节点的数据拷贝到当前节点memcpy(pCurrentNode, pNextNode, sizeof(MY_SYSTEM_PROCESS_INFORMATION));pCurrentNode->NextEntryOffset = pNextNode->NextEntryOffset;std::wcout << L"First process was protected, replaced with next process.\n";continue;  // 保持 pPreviousNode 不变,重新检查当前节点}}}else {// 如果没有被保护,移动到下一个节点pPreviousNode = pCurrentNode;}// 如果下一个节点超出缓冲区范围,停止处理if (((PUCHAR)pCurrentNode + pCurrentNode->NextEntryOffset + nodeSize) >(PUCHAR)SystemInformation + SystemInformationLength) {std::wcout << L"Reached end of buffer.\n";break;}// 继续下一个进程信息节点pCurrentNode = (PMY_SYSTEM_PROCESS_INFORMATION)((PUCHAR)pCurrentNode + pCurrentNode->NextEntryOffset);}}// 只在第一次调用 hook 函数后强制刷新窗口if (!isNotFirstHook) {isNotFirstHook = true;FlushProcessWindows();}return status;
}

可以删除 dllmain 里面的hook 函数以及所有输出字符串。从外部进程通过注入远程线程的方式来实现动态调整隐身策略。主要利用下面三个函数:

导出函数

执行效果:

隐身效果(调试输出模式)

本文出处链接:[https://blog.csdn.net/qq_59075481/article/details/142676712]。

本文发布于:2024.10.02。

相关文章:

【Windows】在任务管理器中隐藏进程

在此前的一篇&#xff0c;我们已经介绍过了注入Dll 阻止任务管理器结束进程 -- Win 10/11。本篇利用 hook NtQuerySystemInformation 并进行断链的方法实现进程隐身&#xff0c;实测支持 taskmgr.exe 的任意多进程隐身。 任务管理器 代码&#xff1a; // dllmain.cpp : 定义 …...

【TypeScript学习】TypeScript基础学习总结二

主要记录ts中的类、接口与泛型 1.类 无论是在哪种语言中&#xff0c;类都是面向对象编程(OOP)的一个主要实现方式。能够实现代码更加灵活&#xff0c;更具有结构化。类作用都是提供一个模板&#xff0c;通过类可以创建多个具有相同结构的对象。 // 类的定义&#xff0c;与对象…...

中国电信解锁万亿参数大模型:TeleAI的创新与突破

首个由万卡集群训练出来的万亿参数大模型&#xff0c;已被一家央企解锁。 具体而言&#xff0c;为了推动纯国产人工智能的探索&#xff0c;带来这条新路径的正是中国电信人工智能研究院&#xff08;TeleAI&#xff09;。 该研究院由中国电信集团的CTO、首席科学家兼院长李学龙…...

戴尔PowerEdge R840服务器亮黄灯 不开机

最近接修到一台东莞用户的DELL PowerEdge R840 服务器因为意外断电后&#xff0c;无法正常开机的问题&#xff0c; 大概故障现象是 插上电源线 按卡机按钮无响应&#xff0c;无法开机&#xff0c;无显示输出&#xff0c;工程师到现场检修&#xff0c;经过idrac中日志分析&#…...

【前端安全】js逆向之微信公众号登录密码

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 随着发展&#xff0c;越来越多的登录页面添加了密码加密的措施&#xff0c;使得暴力破解变得不在简单&a…...

C# 泛型使用案例_C# 泛型使用整理

一、系统自带常用的泛型 1.字典&#xff0c;集合 //字典 Dictionary<string, int> dic new Dictionary<string, int>(); //泛型集合 List<int> list new List<int>(); 2.泛型委托&#xff0c;输入参数&#xff0c;输出参数 //泛型 委托---输出参…...

Docker 安装 Citus 单节点集群:全面指南与详细操作

Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作 文章目录 Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作一 服务器资源二 部署图三 安装部署1 创建网络2 运行脚本1&#xff09;docker-compose.cituscd1.yml2&#xff09;docker-compose.cituswk1.…...

Arthas redefine(加载外部的.class文件,redefine到JVM里 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine&#xff08;加载外部的.class文件&#xff0c;redefine到JVM里 &#xff09;举例1&#xff1a;加载新的代码&#xff0c;jad/mc 命令使用举例2&#xff1a;上传 .class 文件到服务器的技巧 本人其他相关文章…...

C++教程(三):c++常用的配置文件类型

目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件&#xff08;Protocol Buffers, MessagePack, Avro 等&#xff09; 总结 在 C 项目中&#xff0c;常用的配置文件类型有多种选择&#xff0c;具体选择取决于项目的复杂性、可读性…...

Arduino Uno控制雨滴传感器模块的设计方案

以下是Arduino Uno控制雨滴传感器模块的设计方案&#xff1a; 一、硬件准备&#xff1a; 1. Arduino Uno 开发板一块。 2. 雨滴传感器模块一个。 3. 杜邦线若干。 4. 9V直流电源一个。 二、硬件连接&#xff1a; 1. 将Arduino Uno板的Vin引脚、GND引脚分别连接到9V直流电…...

华为常见命令手册

常见命令 display ip interface brief —> 查看设备上的每个接口的IP地址【地址/掩码/状态】 display interface gi0/0/0 → 查看该接口的MAC 地址 ipconfig → 查看 PC 上面的 IP地址 display arp → 查看设备的 ARP 表 arp -a → 查看 PC 上面的 ARP 表 display m…...

TinyAP:使用TinyML对抗Wi-Fi攻击的智能接入点

论文标题&#xff1a; 英文&#xff1a;TinyAP: An intelligent Access Point to combat Wi-Fi attacks using TinyML中文&#xff1a;TinyAP&#xff1a;使用TinyML对抗Wi-Fi攻击的智能接入点 作者信息&#xff1a; Anand Agrawal 和 Rajib Ranjan Maiti&#xff0c;来自印…...

grafana频繁DataSourceError问题

背景 随着 Grafana 数据量的不断增加&#xff0c;逐渐暴露出以下问题&#xff1a; Grafana 页面加载缓慢&#xff1b;Grafana 告警频繁出现 DatasourceError 错误。 对于第一个问题&#xff0c;大家可以参考这篇文章&#xff1a;Grafana 加载缓慢的解决方案。 不过&#xf…...

python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)

在软件开发中&#xff0c;数据结构是组织和存储数据的方式&#xff0c;对算法的效率和程序的性能至关重要。Python 提供了许多内置的数据结构&#xff0c;但在一些复杂的应用场景中&#xff0c;原生数据结构可能无法满足特定需求。这时&#xff0c;一个功能强大、易于使用的数据…...

AccessoriesqueryController

目录 1、 AccessoriesqueryController 1.1、 库存配件查询 1.2、 查询仓库 1.2.1、 //把数据库数据加到表格&#xff1a;跟默认然一行数据进行合并 1.3、 /// 查询 1.3.1、 配件编码查询 1.3.2、 配件名称查询 1.3.3、 配件类型查询 AccessoriesqueryControlle…...

M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?

该文章前面三节主要介绍M3u8视频是什么&#xff0c;视频播放错误(找不到地址)的解决方法在后面 M3U8是一种多媒体播放列表文件格式&#xff0c;主要用于流媒体播放。 一、文件格式特点 1. 文本文件&#xff1a;M3U8是一个采用 UTF-8 编码的文本文件&#xff0c;这意味着它可…...

【分布式微服务云原生】windows+docker+mysql5.7.44一主一从主从复制

目录 1. 主库设置2. 从库设置3. 验证主从复制内容汇总表格 摘要&#xff1a; 在Windows系统上通过Docker部署MySQL主从复制&#xff0c;以下是详细的步骤和命令&#xff0c;帮助你设置一主一从的MySQL复制环境。 1. 主库设置 步骤1&#xff1a;运行MySQL主库容器 docker run …...

鸿蒙NEXT开发-界面渲染(条件和循环)(基于最新api12稳定版)

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

TypeScript 设计模式之【状态模式】

文章目录 状态模式&#xff1a;优雅切换的交通信号灯状态模式的奥秘状态模式有什么利与弊?如何使用状态模式来优化你的系统代码实现案例状态模式的主要优点状态模式的主要缺点状态模式的适用场景总结 状态模式&#xff1a;优雅切换的交通信号灯 当你站在繁忙的十字路口&#…...

MongoDB 聚合管道

参考: 聚合管道 - MongoDB 手册 v7.0 介绍 聚合管道由一个或多个处理文档的阶段组成&#xff1a; 每个阶段对输入文档执行一个操作。例如&#xff0c;某个阶段可以过滤文档、对文档进行分组并计算值。 从一个阶段输出的文档将传递到下一阶段。 一个聚合管道可以返回针对文档…...

python-patterns:Python 设计模式大全

python-patterns 是一个开源的 Python 项目&#xff0c;它提供了各种经典的设计模式的 Python 实现。设计模式是一种针对常见软件设计问题的可复用解决方案&#xff0c;通过使用设计模式&#xff0c;开发者可以编写出结构更加合理、易于维护和扩展的代码。 Python 是一门动态语…...

Nginx编译所需基本库pcre、zlib、openssl

一、基本库介绍 pcre&#xff1a;&#xff08;Perl Compatible Regular Expressions&#xff09; 是一个用 C 语言编写的正则表达式库&#xff0c;用于进行文本匹配和搜索。它提供了与 Perl 正则表达式兼容的功能&#xff0c;并且广泛用于许多不同的软件项目中&#xff0c;如网…...

C#进阶:探索嵌套类、匿名类及对象初始化器的强大运用

在C#中&#xff0c;嵌套类、匿名类以及对象初始化器是几种强大的特性&#xff0c;它们可以极大地提高代码的可读性和灵活性。下面分别介绍这些特性的运用。 1. 嵌套类 嵌套类是指定义在另一个类内部的类。内部类可以访问其外围类的所有成员&#xff08;包括私有成员&#xff…...

匈牙利算法模板

P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配&#xff0c;否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…...

ubuntu 安装harbor

#安装包 wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz.asc#导入签名公钥 gpg --keyserver hkps://ke…...

Python/大数据/机器识别毕业设计选题题目推荐

基于Python和Diango在线购物商城系统报告文档指导搭建视频 基于深度学习的人脸识别与管理系统&#xff0c;Python实现 基于Python/机器学习链家网新房数据可视化及预测系统 Python豆瓣电影情感分析推荐系统爬虫可视化&#xff0c;过滤算法 基于python的django框架生鲜商城管…...

基于Python的人工智能应用案例系列(17):LSTM正弦波预测

概述 本案例展示了如何使用LSTM&#xff08;长短期记忆网络&#xff09;来预测正弦波序列的未来值。由于正弦波具有周期性&#xff0c;传统的神经网络难以准确预测其上升或下降趋势&#xff0c;而LSTM则能够通过学习值的模式来进行更精准的预测。本案例将训练LSTM模型并预测正弦…...

Python空间地表联动贝叶斯地震风险计算模型

&#x1f3af;要点 使用贝叶斯推断模型兼顾路径和场地效应&#xff0c;量化传统地理统计曲线拟合技术。使用破裂和场地特征等地质信息以及事件间残差和事件内残差描述数学模型模型使用欧几里得距离度量、角距离度量和土壤差异性度量确定贝叶斯先验分布和后验分布参数&#xff…...

虚幻引擎-设置UI自适应屏幕大小

在游戏中&#xff0c;如果想实现不同分辨率下&#xff0c;都可以支持当前的UI界面布局&#xff0c;都需要用到锚点功能。 ‌虚幻引擎中的UI锚点&#xff08;Anchor&#xff09;是指控件在屏幕或父物体上的固定点&#xff0c;用于确定控件的位置和布局。‌ 锚点的作用是确保UI元…...

C++继承的三种方式[ACCESS]

C继承的定义 两个类的继承关系在派生类中声明&#xff0c;派生类定义使用以下语法&#xff1a; class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号&#xff08;:&#xff09;后的[ACCESS]是继承的最高权限级别符&#xff0c;可以是以下三个值&#xff08;存取权限级别&am…...

wordpress 更改icon/营销型网站建设推广

最根本的原因就是&#xff0c;走弯路是自然界的一种常态&#xff0c;走直路而是一种非常态。佛学院的一名禅师在上课时把一幅中国地图展开&#xff0c;问:“这幅图上的河流有什么特点?”“都不是直线&#xff0c;而是弯弯的曲线。”“为什么会是这样呢?也就是说&#xff0c;河…...

wordpress基本插件/seo关键词是什么意思

我们比较熟知从当前场景切换到另一个场景&#xff0c;然而&#xff0c;其实可以在不卸载前一个场景的同时&#xff0c;再加载一个新的场景“资源”并叠加到当前游戏场景中去。可以通过SceneManager.LoadScene()函数的LoadSceneMode参数进行切换。一般的认知中&#xff0c;我们可…...

旅游景区英文网站建设研究/seo属于什么职业部门

很棒的插件&#xff0c;开发中能大大节省时间&#xff0c;喜欢的童鞋可自行下载研究源码 点击下载 名人不说暗话&#xff0c;上图...

wordpress 两步认证/seo快速排名工具

目录 第3章 Data语意学3.1 Data Member的绑定3.2 Data Member的布局3.3 Data Member的存取Static Data MembersNonstatic Data Members通过origin存取和通过pt存取有什么差异?3.4 继承与Data Member(1) 不使用继承(2) 只要继承不要多态(3) 加上多态(4) 多重继承(5) 虚继承3.5 …...

b2b 网站开发/seo流程

关注公众号&#xff1a; TSparks 名称&#xff1a;尧字节 发送"10年" 不包括引号获取十年架构师文集 发送"23" 获取23种Java设计模式 发送"大咖" 获取大咖视频会议分享 发送"机器" 获取机器学习很棒的入门pdf&#xff0c;讲的非常详…...

顺企网是什么网站/代发软文

本文目录1.数据库备份2.数据库恢复3.数据库权限管理4.视图测试5.数据库功能测试6.数据操作和更新7.数据的完整性8.数据的有效性9.数据库安全测试10.并发处理测试11.数据库性能测试12.空数据库测试13.SQL语句优化14.存储过程的接口测试15.触发器的接口测试16.结合业务逻辑做关联…...