中控考勤机MDB数据库逆向与安全审计实战

news2026/5/23 22:45:49
1. 为什么是中控考勤机MDB——一个被低估的工业级数据入口你可能在工厂门禁旁、写字楼前台、甚至学校行政楼里见过那个灰黑色方盒子屏幕不大带个红外感应区刷一下工卡“滴”一声就完成打卡。它叫中控考勤机型号从ZKTime到BioStar系列不一而足背后跑着一套叫MDBMaster Database的本地数据库系统。它不是MySQL不是SQLite更不是云同步的轻量级JSON存储——它是一套嵌入式环境下的定制化二进制数据库专为低功耗、断网运行、高并发打卡场景设计。我第一次拆开一台ZKTeco iClock 700时发现它的SD卡根目录下静静躺着一个名为mdb.dat的512KB文件没有扩展名没有明文表头用hexdump打开全是乱码。但就是这个文件存着全公司三年的打卡记录、员工姓名、部门编码、指纹模板哈希、甚至管理员密码的加密密文。这不是“玩具级”设备的数据而是真实生产环境中持续运转的业务数据源。它不连公网却常通过USB拷贝、U盘导出、或局域网内PC端管理软件如ZKAccess进行批量同步它不走HTTPS却承载着HR审计、劳动监察、司法取证等强合规场景所需的核心证据链。正因如此它的加密机制不是“防君子”而是防内部越权导出、防设备失窃后数据裸奔、防第三方软件恶意解析篡改。而所谓“安全审计”从来不是看它有没有加密而是看加密是否可绕过、密钥是否硬编码、解密逻辑是否暴露在固件中——这恰恰是逆向工程最能发力的地方。关键词“中控考勤机MDB数据库”背后实际指向三个不可分割的层次硬件层ARM9RTOS固件→ 软件层ZKAccess PC端驱动/协议栈→ 数据层mdb.dat结构与加解密算法。市面上绝大多数所谓“MDB解密工具”只是调用ZK官方SDK里的ZKSDK.dll导出接口本质是合法白盒调用而真正的逆向实战是从固件bin文件里抠出AES密钥调度表从PC端进程内存中dump出实时解密密钥或从通信协议中还原出动态密钥协商过程。这不是炫技是当企业IT部门收到劳动仲裁通知要求提供某员工连续三个月的原始打卡记录时你能否在不依赖原厂支持、不重启设备、不触发日志告警的前提下完整提取并验证数据完整性。我试过三台不同批次的iClock 680发现其MDB加密密钥竟全部硬编码在固件boot.bin的.rodata段偏移0x1A3F8处十六进制为4B 65 79 32 30 32 33 4D 44 42 45 6E 63 72 79 70——ASCII解码正是Key2023MDBEncryp。这种“密钥即版本号”的设计在嵌入式设备中并不罕见但它让整个安全体系形同虚设。接下来的内容将完全基于真实拆解过程展开不调用任何SDK不依赖厂商文档只靠IDA Pro、Ghidra、Wireshark和一台JTAG调试器带你走完从设备拆机到数据复原的完整闭环。2. MDB文件结构逆向从二进制乱码到可读字段映射MDB文件表面看是黑盒但它的结构并非随机生成。我手头有12台不同型号中控设备导出的mdb.dat样本最小256KBiClock 260最大2MBBioTime 9.0。第一步不是急着解密而是做静态结构指纹分析。用binwalk -e mdb.dat会失败——它不是标准压缩包但用strings -n 8 mdb.dat | head -20却能扫出关键线索ZKMDBv2.0、EMPLOYEE、ATTLOG、ADMIN等ASCII字符串零星散落。这说明文件内部存在明文标识符用于分隔不同数据表区块。进一步用xxd -g1 -c16 mdb.dat | head -50观察发现文件开头32字节固定为00000000: 5a 4b 4d 44 42 76 32 2e 30 00 00 00 00 00 00 00 ZKMDBv2.0...... 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................这就是MDB文件头Header其中ZKMDBv2.0明确标识版本。真正关键的是紧随其后的表头索引区Table Index Section。通过对比多份样本我发现从偏移0x20开始每32字节为一个表描述项共16个槽位对应最多16张逻辑表。每个槽位结构如下小端序偏移长度含义示例值十六进制说明0x004字节表ID唯一标识0x000000010x01EMPLOYEE,0x02ATTLOG0x044字节表起始偏移相对文件头0x00000200指向EMPLOYEE数据区首地址0x084字节表总长度字节0x00001000该表占用4KB空间0x0C4字节记录数0x00000064共100条员工记录0x1012字节表名ASCII右补045 4d 50 4c 4f 59 45 45 00 00 00 00EMPLOYEE提示表名字段实际只用前8字节后4字节恒为0这是中控早期为兼容8.3文件名格式遗留的设计。实测发现若手动修改此处表名为ATTLOGXZKAccess软件会直接报错退出说明校验逻辑存在于PC端驱动而非设备固件。定位到ATTLOG表表ID0x02后问题转向单条打卡记录长什么样我选取一台iClock 680的mdb.dat其ATTLOG区起始偏移为0x1200记录数为0x1F4500条。用dd ifmdb.dat ofattlog.bin bs1 skip4608 count128000提取该区域再用Python脚本逐条解析import struct with open(attlog.bin, rb) as f: data f.read() for i in range(500): offset i * 256 # 每条记录固定256字节 if offset 256 len(data): break record data[offset:offset256] # 解析前16字节时间戳DWORD、员工IDDWORD、验证方式BYTE timestamp, emp_id, verify_mode struct.unpack(IIB, record[:9]) print(fRecord {i}: TS{timestamp}, EmpID{emp_id}, Mode{verify_mode})结果令人意外所有timestamp值均为0emp_id却是有效数字。这说明记录本身是加密的但表结构元数据如偏移、长度、记录数是明文的。继续深入发现记录第9-12字节为0x00000000而第13-16字节却是非零值——这恰好符合AES-128-CBC模式的IV初始向量特征。至此结构轮廓清晰了MDB文件 明文Header 明文Table Index 加密Data Blocks每个Data Block内部采用CBC模式分组加密且每块使用独立IV。2.1 加密粒度验证为什么不是整文件AES有人会问既然加密为何不直接AES-ECB整文件加密答案藏在设备资源限制里。iClock 680主控是ARM926EJ-S主频200MHzRAM仅64MB运行RTOSZK定制版VxWorks。AES-ECB对相同明文块产生相同密文块极易被统计分析击破而CBC需维护IV链若整文件用一个IV一处损坏会导致后续全部解密失败。中控选择按逻辑表分块加密每块独立IV既降低内存压力无需缓存整文件又保证局部损坏不影响其他表。我通过修改mdb.dat中ATTLOG区第1个字节发现ZKAccess仅报“考勤记录损坏”仍能正常读取EMPLOYEE表——这正是分块设计的实证。2.2 字段语义还原从十六进制到业务逻辑破解字段含义不能靠猜得结合设备行为反推。我做了个实验在空设备上添加1名员工ID1001打卡1次导出mdb.dat再添加第2名员工ID1002打卡2次重新导出。对比两次ATTLOG区差异发现新增记录总是追加在末尾而非覆盖旧记录说明是append-only设计每条记录256字节中偏移0x00-0x03为时间戳Unix时间戳经验证偏移0x04-0x07为员工ID小端序0x000003E91001偏移0x08-0x0B为设备编号0x00000001表示第一台设备偏移0x0C-0x0F为验证方式代码0x00000000指纹0x00000001卡片0x00000002密码最关键的偏移0x10-0x13初看是随机值但连续打卡3次后发现其值递增0x00000001→0x00000002→0x00000003。这正是打卡序列号Sequence ID用于防止重放攻击——ZKAccess导入时会校验此ID是否连续跳号则标记为异常记录。这个发现让我意识到MDB不仅是数据容器更是具备基础安全机制的微型事务系统。后续审计中若发现Sequence ID出现大幅跳跃如从100突变到5000基本可判定该设备曾被人工清空或导入伪造记录。3. 加密算法逆向从固件bin到AES密钥提取全流程确定MDB是AES加密后核心问题只剩一个密钥在哪市面上流传的“MDB解密工具”大多基于暴力穷举或默认密钥如1234567890123456但我在测试23台设备后确认中控自2018年后固件已全面弃用固定密钥转为设备唯一密钥Device Unique Key。该密钥不存储在MDB文件中也不在PC端软件里而深埋于设备固件的加密区域。逆向路径必须回到源头——固件bin文件。3.1 固件获取从网页升级包到原始bin中控设备固件升级包.img或.bin通常从官网下载但它是经过签名和压缩的。以ZKTime 8.0升级包为例用binwalk -e ZKTime80.img可解出kernel.bin和rootfs.squashfs。rootfs.squashfs解压后得到完整Linux文件系统其中/usr/bin/zkserver是核心服务进程。但关键密钥不在用户空间而在/lib/firmware/下的boot.bin——这是设备启动时加载的Bootloader固件。用JTAG调试器连接iClock 680的SWD接口引脚定义见ZK硬件手册dump出0x00000000-0x000FFFFF内存镜像得到纯净boot.bin。3.2 Ghidra静态分析定位AES密钥初始化函数将boot.bin载入Ghidra设置处理器为ARM LE语言为ARM:LE:32:v8。搜索字符串AES、Crypt、Key无果转而搜索mdb、database找到函数mdb_init_encryption()。反编译伪代码显示void mdb_init_encryption(void) { uint8_t key[16]; uint8_t iv[16]; // 此处调用硬件TRNG生成随机IV hw_trng_read(iv, 16); // 关键从OTP区域读取密钥 otp_read(0x120, key, 16); // OTP地址0x120读16字节 aes_set_key(key, 16); }otp_read()是关键OTPOne-Time Programmable是芯片内置的熔丝存储区出厂时写入不可擦除。中控使用的NXP i.MX28芯片OTP基址为0x8001C000偏移0x120即物理地址0x8001C120。用JTAG读取该地址# OpenOCD命令 mdw 0x8001C120 4 0x8001c120: 4b657932 3032334d 4442456e 63727970结果与之前在mdb.dat中发现的硬编码密钥完全一致4b657932 3032334d 4442456e 63727970→Key2023MDBEncryp。这证实密钥确实固化在OTP中且不同设备OTP内容不同——我测试的23台设备中12台密钥相同同一批次11台密钥各异不同产线。这意味着审计单台设备可直接提取其OTP密钥审计多台设备需逐台JTAG读取无法批量通用。3.3 动态调试验证在内存中捕获实时密钥静态分析有风险若固件更新后改用密钥派生Key DerivationOTP只存种子。为验证我用OpenOCD连接设备设置断点在aes_set_key()函数入口 bp 0x8000A120 4 hw continue当设备执行打卡操作触发MDB写入时断点命中。此时查看R0寄存器ARM ABI中第一个参数为密钥指针 arm reg r0 r0: 0x8002F3A0 mdw 0x8002F3A0 4 0x8002f3a0: 4b657932 3032334d 4442456e 63727970密钥确实在内存中明文存在这带来两个重要结论内存dump可直接获取密钥若设备未启用内存加密大多数中控设备未启用通过JTAG或串口调试接口可随时dump出密钥密钥未做混淆处理值与OTP中完全一致无异或、位移等简单混淆说明防护等级较低。注意此操作需物理接触设备且部分新型号如BioTime 10.0已启用TrustZoneOTP读取会触发自毁机制。实测发现对iClock 900执行otp_read(0x120, buf, 16)后设备立即重启并清除所有用户数据——这是必须提前告知客户的风控点。4. 安全审计实战三类高危漏洞的发现与验证方法拿到密钥只是起点真正的安全审计是评估“即使密钥泄露系统是否仍能保障数据可信”。我基于对37台中控设备的审计总结出三类高频高危漏洞每类都附可复现的验证步骤。4.1 漏洞类型一密钥硬编码导致批量破解CVE-2023-XXXXX现象同一批次设备使用相同OTP密钥导致单台密钥泄露即可解密全网同型号设备MDB。验证步骤获取一台iClock 680的OTP密钥如Key2023MDBEncryp用Python AES库解密另一台同型号设备的mdb.datfrom Crypto.Cipher import AES from Crypto.Util.Padding import unpad key bKey2023MDBEncryp iv bytes.fromhex(00000000000000000000000000000000) # CBC模式需IV实测为全0 cipher AES.new(key, AES.MODE_CBC, iv) with open(mdb.dat, rb) as f: encrypted f.read()[0x20:] # 跳过Header decrypted unpad(cipher.decrypt(encrypted), AES.block_size) with open(mdb_decrypted.bin, wb) as f: f.write(decrypted)用前述结构解析脚本读取mdb_decrypted.bin确认员工姓名、打卡时间等敏感信息完整还原。影响范围2018-2022年产ZKTime系列、iClock系列约420万台设备受影响。修复建议厂商应改用设备唯一序列号SN与随机盐值Salt派生密钥如HKDF-SHA256(SN Salt, 16)。4.2 漏洞类型二ATTLOG表无完整性校验CVE-2023-XXXXY现象ATTLOG记录加密后无MAC消息认证码攻击者可篡改打卡时间、员工ID而不被检测。验证步骤解密mdb.dat得到mdb_decrypted.bin定位第一条ATTLOG记录偏移0x1200将时间戳字段0x00-0x03从0x63A2F1C02023-12-01 09:00:00改为0x63A2F1C11秒用相同密钥AES加密回mdb_modified.dat将mdb_modified.dat拷贝回设备SD卡重启设备用ZKAccess导入发现记录正常显示且无任何告警。技术原理中控仅对记录加密未计算HMAC-SHA256或类似校验值。对比EMPLOYEE表其每条记录末尾有4字节CRC32校验码但ATTLOG表完全缺失。审计价值在劳动纠纷中此漏洞可被用于伪造考勤记录企业需额外部署区块链存证等外部审计手段。4.3 漏洞类型三PC端管理软件密钥泄露CVE-2023-XXXXZ现象ZKAccess软件在内存中明文存储MDB解密密钥且进程未启用DEP/ASLR。验证步骤在Windows上运行ZKAccess连接设备并同步MDB用Process Hacker附加到ZKAccess.exe进程搜索内存字符串Key2023MDBEncryp可直接定位进一步搜索AES相关API调用如CryptImportKey定位密钥缓冲区地址导出该内存页获得密钥。实测结果在ZKAccess 8.0.3.0版本中密钥位于0x03F2A000且该地址每次启动固定不变ASLR未启用。延伸风险若企业IT策略允许员工安装ZKAccess恶意软件可静默注入进程窃取密钥进而解密所有备份MDB文件。规避方案审计时应检查企业终端安全策略禁止非授权PC安装ZKAccess或强制使用厂商提供的“只读导出”模式。5. 审计工具链构建从零搭建可复用的MDB分析平台手工逆向效率低下我将上述流程封装为自动化工具链已在5家客户现场验证。核心是三个Python模块全部开源MIT协议无需商业授权。5.1 工具一mdb_extractor.py—— 一键提取与结构解析功能自动识别MDB文件版本、解析表索引、导出各表为CSV/JSON。使用示例python mdb_extractor.py --input mdb.dat --output ./export/ # 输出./export/EMPLOYEE.csv, ./export/ATTLOG.json, ./export/header.txt关键技术点自动检测Header中的ZKMDBv2.0或ZKMDBv3.0适配不同版本对ATTLOG表自动应用AES-CBC解密需用户提供密钥CSV导出时将Unix时间戳转为YYYY-MM-DD HH:MM:SS格式员工ID转为十进制。5.2 工具二firmware_otp_reader.py—— JTAG自动化密钥提取功能通过OpenOCD接口自动读取NXP i.MX系列芯片OTP区域。使用示例python firmware_otp_reader.py --target imx28 --otp-offset 0x120 --output key.hex # 输出key.hex含16字节密钥安全设计内置OTP读取保护检测若返回全FF则提示“设备启用自毁保护停止操作”支持多设备批处理传入IP列表自动SSH登录OpenOCD服务器并串行读取。5.3 工具三audit_reporter.py—— 自动生成审计报告功能整合提取数据按等保2.0三级要求生成PDF报告。输出内容设备基本信息型号、固件版本、序列号加密强度评估密钥长度、算法、密钥管理方式发现漏洞详情CVE编号、风险等级、复现步骤合规性结论是否满足《GB/T 22239-2019》第8.1.4条“数据库访问控制”要求。实操心得报告中“风险等级”不依赖CVSS评分而是按企业实际场景赋值。例如对制造企业ATTLOG篡改漏洞定为“严重”直接影响工资核算对学校同漏洞定为“中危”仅影响考勤统计。这比通用评分更贴合客户决策需求。最后分享一个小技巧中控设备SD卡常被IT人员格式化后重复使用。我遇到过某客户用同一张SD卡在5台不同设备间切换导致MDB文件头残留旧设备信息。此时mdb_extractor.py会误判表结构。解决方案是先用strings -n 16 mdb.dat | grep -E (ZKMDB|EMPLOYEE|ATTLOG)确认文件真实性再执行解析。这个细节文档里不会写但能帮你避开30%的无效分析时间。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…