凌晨两点接到客户电话主机被入侵了日志被清空磁盘翻遍也找不到攻击者的工具。我让现场同事用DumpIt给机器拍了一张内存快照半小时后我坐在镜像前volatility的netscan输出里跳出一条指向境外IP的连接记录——PID还在进程挂着svchost.exe的名字命令行却指向一个空目录下的异常服务。攻击者删了文件、清了日志但内存把他来过这件事记得清清楚楚。后来我常跟新人讲磁盘是装样子的内存才是什么都瞒不住的取证富矿。这篇文章把我这些年用volatility做内存取证的经验从安装到每个常用命令的用法和坑尽量一次讲透。适合这几类朋友对照参考做应急响应的、搞渗透测试验后排查的、分析恶意样本的以及想入门内存取证但不知道从哪下手的人。1. 内存取证是什么为什么要做1.1 内存里的证据价值内存取证Memory Forensics简单说就是把运行中机器的物理内存抓下来做成一份镜像再用工具对这份镜像进行分析。很多人习惯先查磁盘、查日志但内存里的信息密度远比磁盘高原因在于只要机器还在运行进程、网络连接、命令行参数、打开的句柄、剪贴板内容、甚至磁盘上已经删除的文件的残留都会以某种形式存在于内存里。打个比方磁盘像仓库东西入库了才留得下来被搬走了就没了内存是工作台你刚才在上面干过什么、碰过哪些东西就算你飞快收拾干净桌面上的印痕、胶带残留、桌角磕碰都还在。攻击者可以删掉恶意文件、清空事件日志、抹掉计划任务但他执行过的那条命令、连过的那个C2地址、加载过的那个驱动对象只要内存还在就很难彻底抹掉。这是内存取证最核心的价值它擅长捕捉“正在发生”和“刚刚发生过”的状态补上磁盘取证补不了的拼图。1.2 内存取证的典型场景结合我自己的经历内存取证最常见的场景有这几类应急响应主机失陷排查服务器被入侵谁干的、干了什么、现在是否还在这类问题磁盘答案经常不完整内存却能给出进程级、时间线级的线索。恶意软件分析免杀木马、无文件攻击fileless attack、注入型木马所有恶意行为都要在内存中展开dump内存中的恶意代码片段做逆向比硬啃混淆后的样本高效得多。APT追踪高级攻击者经常用rootkit隐藏进程和文件常规API看不到但按内存池扫描能找到被“摘链”的隐藏对象。内部违规调查员工是否运行了违规软件、是否访问了特定网站、是否向剪贴板复制了敏感数据这些证据大多存在于内存。司法取证虽然取证流程合规非常严格但内存镜像的哈希校验、时间线重建同样是案件里的关键材料。2. 环境准备Volatility 2.x 还是 3.x2.1 为什么有这么多版本怎么选提起内存取证Volatility是绕不开的名字。这个开源工具目前分成两大代际Volatility 2.x和Volatility 3.x。Volatility 2.x是最经典的一代2.6版本至今被大量教程和工具书使用。它的工作方式是先通过镜像识别出操作系统版本即profile再带着这个profile去解析内存结构。优点是可用的插件极其丰富很多老牌优秀的插件比如moddump、messagehooks、timeliner都只维护在2.x系缺点是需要Python 2环境且新操作系统Win10较新版本、Win Server 2019/2022支持滞后。Volatility 3.x是官方主推的新一代Python 3编写最大优势是不需要手动指定profile能够自动识别操作系统和内存结构对Win10/11和Linux的支持比2.x好太多。缺点是插件数量还在追赶部分旧插件的等价功能要换名字查找。实际工作中我的习惯是两个都装。老镜像、Win7及以下、需要用malfind/dumpfiles等经典插件时用2.x快速出结果新系统、Win10/11、需要自动识别时直接用3.x。这套组合已经处理过不少真实案例。2.2 Volatility 2.6安装与Profile概念装2.x最省事的方式是用Kali或者其他带Python 2的发行版直接用源码安装git clone https://github.com/volatilityfoundation/volatility.git cd volatility python2 setup.py install装完验证一下volatility --info如果系统里没有python2可以用Docker跑一个带旧版Python的环境或者用conda建个py27虚拟环境不折腾底层依赖conda create -n vol2 python2.7 conda activate vol2 pip install pycrypto distorm3 openpyxl这里必须理解Profile这个概念。Volatility 2.x需要一个--profileWin7SP1x64这样的参数告诉它“当前镜像是64位Windows 7 SP1”。为什么需要这个因为内存里有大量结构体偏移比如进程对象EPROCESS里哪个字段是PID、哪个字段是父进程PID不同系统版本布局不一样。profile就是一整套针对某个操作系统的“结构布局说明书”。查看支持哪些profilevolatility --info | grep Profile常见的有WinXPSP2x86、Win7SP1x64、Win2008R2SP0x64等。取镜像前最好先确认机器系统版本取完后用imageinfo自动判断减少试错。不过imageinfo是基于特征匹配的某些精简版系统可能识别不出这时需要kdbgscan手动挖后面会讲。2.3 Volatility 3安装与符号表3.x的安装就清爽得多git clone https://github.com/volatilityfoundation/volatility3.git cd volatility3 pip install -r requirements.txt用起来是这样的python3 vol.py -f mem.raw windows.info python3 vol.py -f mem.raw windows.psscan python3 vol.py -f mem.raw windows.filescan注意3.x不认识--profile这一套它靠的是符号表symbols。第一次运行window.info时如果报缺少符号文件执行python3 vol.py --download-symbols会去下载对应系统的PDB符号到volatility3/symbols/目录下。生产环境中如果分析机器不能联网可以提前在有网机器上下载好符号再拷贝到symbols/目录里。提示3.x的插件命名带着命名空间比如windows.psscan、linux.bash。想查看可用插件列表执行python3 vol.py --help插件全名会列出来。3. 内存镜像获取拿不到镜像工具再强也没用3.1 Windows系统内存提取取证里最常用的工具是DumpItMoonSols出品和FTK Imager。DumpIt是命令行工具管理员权限下运行输入y确认后会在当前目录生成一个.raw格式的内存镜像文件名一般带时间和机器标识。它非常轻量适合现场快速采集。老版本区分32位和64位新版本把两者合到一个PE文件里运行时自动选择模式还是很方便的。FTK Imager则是图形界面操作路径是打开软件后选择File→Capture Memory...指定保存路径和文件名。有个选项Include pagefile值得勾上——页面文件不完全是内存但它存了被换出的内存页对补全证据链很有用。WinPmemRekall项目的内存提取工具也常用命令行执行winpmem_mini_x64.exe mem.raw生成的镜像格式可能是raw或AFF4注意AFF4格式需要转换或使用对应的解析工具否则volatility读不了。3.2 Linux系统内存提取Linux下最可靠的是LiMELinux Memory Extractor它是个内核模块加载后直接把物理内存导出为镜像。流程大致是apt-get install linux-headers-$(uname -r) git clone https://github.com/504ensicsLabs/LiME.git cd LiME/src make insmod ./lime-$(uname -r).ko path/evidence/mem.lime formatlime加载完成后用rmmod lime卸载模块镜像文件就写到了/evidence/mem.lime。format建议用lime这个格式自带一些元数据volatility直接支持读取。老系统偶尔有人用fmem和dd组合./fmem.sh dd if/dev/fmem ofmem.dd bs1M但现代内核上fmem经常编译不过能用LiME就优先LiME。3.3 镜像获取时的几个关键注意事项内存采集本身对运行系统有冲击所以必须按正确的顺序和方式操作优先热采集不要先关机。关机、蓝屏、虚拟机休眠都会让内存状态丢失。在应急场景里第一件事往往是尽量保持系统运行状态就地取镜像。采集工具最好放在U盘或独立存储介质上不要写入嫌疑机器的本地磁盘避免污染证据。镜像完整性校验必须做。采集完成后立刻计算哈希md5sum mem.raw sha256sum mem.raw把哈希值记录到取证记录里后续任何分析都基于校验后的镜像副本。这是个好习惯写报告时尤其重要不然无法证明你分析的就是原始镜像。镜像文件很大。物理内存多大镜像通常就多大可能再小一点取决于已用页。分析前准备足够的磁盘空间16GB内存的机器光镜像就16GB做哈希、复制副本都需要空间。4. Volatility核心命令全解析这是本文的重头戏我把日常用到的命令按功能分类拆开讲。命令格式统一以volatility -f 镜像文件 --profileProfile 插件名 [参数]为例实际使用把mem.raw和Win7SP1x64替换成你手上的镜像和识别出的profile。4.1 第一步识别镜像信息不管拿到什么镜像第一步永远是识别volatility -f mem.raw imageinfoimageinfo会输出一堆信息但最重要的是这两行Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64 KDBG : 0xf80002c4c0a0Suggested Profile(s)是候选profile列表优先用第一个。但要注意imageinfo用的是特征匹配遇到精简版系统、打过特殊补丁的系统时可能给不准甚至给不出来。这时候用kdbgscanvolatility -f mem.raw kdbgscankdbgscan会直接扫描内核调试器数据结构输出所有可能的KDBG地址和对应的profile。判断标准很简单看KDBG owner tag是否有效、Profile是否匹配已知系统。如果列出的多个结果里只有一个显示valid那基本就是它。注意拿到profile后就用--profileWin7SP1x64这种形式写全。不要跳过一个关键步骤用volatility --info | grep Win7确认你写的profile名称和工具内置名称一字不差否则后面命令全部报错。4.2 进程分析pslist、pstree、psscan、cmdline进程分析是内存取证最先要做的。最基础的命令是pslistvolatility -f mem.raw --profileWin7SP1x64 pslist它遍历进程链表输出Off(Virtual Address)、PID、PPID、Name、Session、Time。注意pslist是链表遍历只能看到系统当前认得的进程——被恶意代码unlink摘链的隐藏进程它会漏掉。所以排查恶意进程时我基本同时跑psscanvolatility -f mem.raw --profileWin7SP1x64 psscanpsscan是按内存池标签扫描而不是链表遍历它直接在物理内存里找进程对象的签名所以就算恶意进程把自己从链表里摘掉只要进程对象还留在内存里它也能挖出来。判断隐藏进程的经典方法就是对比pslist和psscan的输出某个进程在psscan里出现但pslist里没有高度可疑。pstree可以看进程之间的父子关系volatility -f mem.raw --profileWin7SP1x64 pstree恶意程序经常由Office文档、浏览器、powershell拉起pstree能直观呈现这种“谁生下了谁”的路径。再往下挖看进程启动时的完整命令行volatility -f mem.raw --profileWin7SP1x64 cmdline这条命令在分析无文件攻击时极其有用。攻击者用powershell执行-enc编码的命令时完整的Base64载荷就静静躺在内存里解码后基本就是攻击行为的全貌。也别忘了envars它能列出每个进程的环境变量有时能暴露进程工作目录、临时路径配置等线索。volatility -f mem.raw --profileWin7SP1x64 envars4.3 网络连接netscan、connections、connscan内存里的网络连接信息是追查C2命令与控制服务器的关键。现代Windows镜像首选命令是volatility -f mem.raw --profileWin7SP1x64 netscannetscan基于网络池对象扫描能列出TCP、UDP端点、监听端口并且带PID和进程名。输出里TCP状态可以看到LISTENING监听、ESTABLISHED已建立、CLOSE_WAIT等。看到任何指向可疑IP地址的ESTABLISHED连接直接顺着PID去查进程。对Win7之前的系统如XP、2003netscan可能不给力用老两组volatility -f mem.raw --profileWinXPSP3x86 connections volatility -f mem.raw --profileWinXPSP3x86 connscanconnections是遍历活动连接链表connscan是池扫描硬选一个就选connscan和前面pslist/psscan的区别同理池扫描更难被隐藏。4.4 文件与模块filescan、dumpfiles、dlllist、modules嫌疑人留下了什么文件、加载了什么驱动这组命令负责回答。volatility -f mem.raw --profileWin7SP1x64 filescanfilescan扫描内存中打开过的文件对象输出里能看到文件路径、最后写入时间、文件对象地址。即使文件已被删除只要文件对象还在内存缓存里一样能扫到。我经常用它在内存里翻出攻击者使用的临时工具文件名顺着文件名再去磁盘找残留。找到可疑文件后配合dumpfiles把它导出来volatility -f mem.raw --profileWin7SP1x64 dumpfiles -Q 0xfffffa8001234567 -D /evidence/dump/-Q后面跟的是filescan输出里的文件对象地址-D是导出目录。导出的文件可以直接拉进IDA、哈希、扔沙箱分析。看某个进程加载了哪些DLLvolatility -f mem.raw --profileWin7SP1x64 dlllist -p 1234-p指定PID。进程提权、DLL劫持、反射加载都能从DLL列表里看出异常尤其注意模块路径指向临时目录、C:\Users\Public、或者干脆是已删除的路径。驱动层面用这两条volatility -f mem.raw --profileWin7SP1x64 modules volatility -f mem.raw --profileWin7SP1x64 modscanmodules遍历内核模块链表modscan按池扫描驱动对象找隐藏驱动时一定要跑modscan。如果发现可疑的内核驱动moddump可以直接导驱动文件volatility -f mem.raw --profileWin7SP1x64 moddump -D /evidence/dump/ -u-u表示只导出未被信任的模块名字更“丑”的那部分根据输出确认后再精确导出。4.5 恶意代码专项malfind、apihooks、ssdt、idt排查特定进程是否被注入最经典的插件是malfindvolatility -f mem.raw --profileWin7SP1x64 malfind -p 1234malfind会检查每个进程的VAD虚拟地址描述符找出“私有内存 可执行权限 可能带PE头”的区域。正常的进程代码区是映射文件私有内存通常不可执行一旦出现私有内存同时可写可执行基本就是注入行为。输出里带MZ标志的区块可以直接--dump-dir导出volatility -f mem.raw --profileWin7SP1x64 malfind -p 1234 --dump-dir/evidence/dump/另外几个排查rootkit的命令volatility -f mem.raw --profileWin7SP1x64 apihooks volatility -f mem.raw --profileWin7SP1x64 ssdt volatility -f mem.raw --profileWin7SP1x64 idtapihooks检测API函数是否被inline hook或IAT hook修改ssdt输出系统服务描述表恶意驱动常改SSDT做权限维持idt查看中断描述符表部分核心级rootkit会接管中断处理。想快速在整个内存中搜索某些特征字符串或Yara规则volatility -f mem.raw --profileWin7SP1x64 yarascan -Y minepool这条命令很好用排查挖矿木马时直接搜矿池地址特征能精确定位命中地址和进程偏移。4.6 凭据提取hashdump、lsadump、cachedump拿到系统权限后攻击者通常不会放过凭据。取证时同样可以volatility -f mem.raw --profileWin7SP1x64 hashdumphashdump会从内存里的SAM注册表数据中提取本地账户的NTLM哈希格式是用户名:RID:LM哈希:NT哈希:::,后续可以直接丢给hashcat或john跑离线破解。volatility -f mem.raw --profileWin7SP1x64 lsadumplsadump提取LSA Secrets包括服务账号密码、DPAPI主密钥、缓存的登录口令等对域内渗透痕迹分析价值不小。volatility -f mem.raw --profileWin7SP1x64 cachedumpcachedump提取缓存的域凭据MS Cache v2即使主机不直接连域过往登录过域用户的哈希也可能在这里。注意这些插件对老系统稳定Win10上部分函数符号变化有时会报错。遇到新系统用Volatility 3的对应插件windows.hashes效果更好。4.7 用户活动痕迹userassist、iehistory、shimcache、screenshot、clipboard取证不能只盯“坏人来了”还要还原“人做了什么”。userassist查看GUI程序运行记录volatility -f mem.raw --profileWin7SP1x64 userassistWindows会记录用户运行GUI程序的次数和最后运行时间对还原操作时间线很有用。iehistory读取IE浏览历史volatility -f mem.raw --profileWin7SP1x64 iehistoryshimcache记录应用程序兼容性缓存volatility -f mem.raw --profileWin7SP1x64 shimcache这个非常推荐在追查“程序是否运行过”时看shimcache会记录程序路径、最后修改时间和执行标记比用户assist更底层。另外两条有趣的能力volatility -f mem.raw --profileWin7SP1x64 screenshot volatility -f mem.raw --profileWin7SP1x64 clipboardscreenshot尝试从内存中恢复屏幕显示内容会输出PNG图片clipboard读取剪贴板当前内容。这两者在涉及“数据外发”“屏幕上显示过什么”的场景中经常起到决定性作用。注意它们依赖特定GUI内存结构不是每个镜像都能恢复得完整。4.8 时间线与综合timeliner、volshell复杂入侵事件一定要做时间线攻击路径还原。timeliner会把内存里能提取到的所有时间戳进程启动、网络连接、文件访问、注册表写入等汇总成bodyfile格式volatility -f mem.raw --profileWin7SP1x64 timeliner --outputbody --output-filemem_timeline.body生成后用sleuthkit的mactime按时间轴格式化mactime -b mem_timeline.body -d /evidence/outline/到这里你可以在一个文本文件里看到“几点几分哪个进程启动几点几分哪个文件被访问过”入侵路径能串起来。volshell是交互式shell适合高级用户直接在内存对象层操作volatility -f mem.raw --profileWin7SP1x64 volshell在volshell里可以用ps()、dlllist()、db(地址, 长度)等函数直接查看进程和内存内容做二进制层面的人工校验。4.9 常用命令速查表打个包放这里方便收藏。命令实际使用时把--profile替换成自己镜像的profile。类别常用命令用途说明信息识别imageinfo/kdbgscan判断镜像操作系统版本、KDBG地址进程分析pslist/pstree/psscan枚举进程、树状关系、发现隐藏进程进程参数cmdline/envars/handles命令行参数、环境变量、句柄对象网络分析netscan/connections/connscan网络连接、端点、监听端口文件分析filescan/dumpfiles扫描内存中的文件对象、导出指定文件模块分析modules/modscan/moddump/dlllist内核驱动模块、进程DLL列表恶意代码malfind/apihooks/ssdt/idt/yarascan检测进程注入、API钩子、SSDT篡改、特征扫描凭据提取hashdump/lsadump/cachedump本地哈希、LSA秘密、域缓存凭据用户痕迹userassist/iehistory/shimcache/screenshot/clipboardGUI活动、浏览器痕迹、剪贴板综合时间线timeliner/volshellbodyfile时间线、交互式内存分析5. 实战案例全流程一次挖矿木马排查下面用一个我处理过很多次的典型场景走一遍完整流程。场景某运维反馈一台Windows Server 2016 CPU持续飙高安全设备报毒但进程被杀后反复拉起磁盘上找不到恶意文件。客户希望确认木马行为、提取样本。第一步获取镜像与鉴定现场机器是VMware虚拟机我选择直接在监控层打快照拿到.vmem文件注意虚拟机开店状态要保持。拿到后先做哈希sha256sum server2016.vmem然后跑imageinfovolatility -f server2016.vmem imageinfo输出显示Suggested Profile(s): Win2016x64_14393确认profile可用。第二步扫描进程volatility -f server2016.vmem --profileWin2016x64_14393 psscan发现一个PID为4321的进程svchost.exe但对应的pslist里查无此项——立刻怀疑隐藏进程。再用cmdline查这个PIDvolatility -f server2016.vmem --profileWin2016x64_14393 cmdline -p 4321命令行是C:\Windows\System32\svchost.exe -k miner -c C:\ProgramData\Intel\UpdService\wmp.dll,Run。一看就是伪装的挖矿木马。第三步找网络连接volatility -f server2016.vmem --profileWin2016x64_14393 netscan输出里看到PID 4321发起了一条到45.83.xx.xx:8443的ESTABLISHED连接。这里先记录下来连接IP、端口、方向、进程、时间字段后面报告直接引用。第四步导出恶意文件先filescan找文件对象volatility -f server2016.vmem --profileWin2016x64_14393 filescan | grep -i ProgramData\|Intel命中C:\ProgramData\Intel\UpdService\wmp.dll把地址复制出来再dumpfilesvolatility -f server2016.vmem --profileWin2016x64_14393 dumpfiles -Q 0xfffffa8012345678 -D /evidence/dump/导出成功后立刻sha256sum拿到哈希丢进本地沙箱看行为。第五步查注入和横行痕迹针对PID 4321再做malfindvolatility -f server2016.vmem --profileWin2016x64_14393 malfind -p 4321看到该进程内部有一块PAGE_EXECUTE_READWRITE的私有内存区域且带MZ头确认存在进程注入。再跑hashdump提取本地管理员哈希lsadump看是否有服务账号口令减少后续沦陷范围扩散的风险。这个例子里攻击者通过内存中的隐藏进程、可疑连接、注入代码被完整还原。整个过程没有依赖磁盘文件恰恰因为恶意代码只存在于内存——这就是内存在取证里不可替代的原因。6. 高频报错与排查技巧实录6.1 找不到ProfileUnknown profile这是新手最常踩的问题。现象imageinfo报错或给出的profile一堆但试遍全不行。处理思路先确认镜像格式是不是volatility能读的raw/lime。VMware的.vmem、ESXi的.vmsn有时需要转换别硬扛。用kdbgscan单独挖KDBG地址看输出里有几个valid的候选选那个owner tag和系统版本匹配的。新系统Win10较新版本、Win Server 2022直接换Volatility 3自动识别成功率远高于2.x。6.2 命令执行了但没有任何输出多数情况是profile指定错了。比如拿Win7的profile去跑Win10镜像插件遍历链表时偏移对不上要么疯狂报错要么静默无输出。先回查imageinfo再用--info验证profile名字是否完全匹配区分大小写。另一点有些插件要求指定PID比如dlllist不写-p时默认只输出某个进程别把“没输出”当“没问题”。6.3 镜像太大分析太慢几十GB的镜像在笔记本上跑全量插件确实难受。我的做法是分优先级先跑轻量的imageinfo、psscan、netscan确认方向再针对可疑PID跑cmdline、malfind。如果必须要跑timeliner这种重插件就在服务器上跑同时把临时目录也放到SSD上避免磁盘IO成为瓶颈。Volatility 3的多线程处理在大镜像下优势明显遇到超大内存优先用3.x。6.4 虚拟地址和物理地址搞混pslist输出的Off那一列是进程对象的虚拟地址Virtual Addressdumpfiles的-Q参数要的是物理偏移。很多人直接把filescan输出里的地址原样填进-Q结果导出的文件是错的。正确做法是看dumpfiles支持参数2.6版本里-Q指的是--phys_offset可以先用vtop插件或volshell把虚拟地址转换一下不要凭空把地址填进去。6.5 证据链的严谨性做应急响应时可以大胆尝试各种命令但写报告时注意记录你用了哪个版本的volatility、哪条命令、针对哪份镜像哈希值、输出保存到了哪里。镜像分析尽量在副本上进行原始镜像做只读保护并校验哈希。这点在事后复盘和追责环节非常加分。最后的小建议根据我个人经验内存取证真正难的从来不是记住某条命令而是判断“该往哪挖、哪些数据可信”。拿到一份陌生镜像先冷静看一眼imageinfo和psscan把整个系统的进程、网络、文件轮廓画出来再决定要不要深入某个PID远比一上来全量dumpfiles效率高。还有一个实用技巧保存镜像哈希和你敲过的每一条命令输出放到一个名为evidence的目录里。几个小时后你大概率会发现自己需要回溯某条命令当时的输出有了前面这个习惯整个分析过程能顺畅很多。内存取证是个需要耐心打磨的活希望这份命令清单和经验能让你少走一些弯路。
企业数字化 ERP 产品动态
相关推荐
JNA 默认类型映射全解析:Native 与 Java 类型对照、平台差异与自定义映射实战 系统编程后端 【免费下载链接】jna Java Native Access 项目地址: https://gitcode.com/gh_mirrors/jn/jna 点击查看 免费下载 导读
本文基于 www/Mappings.md 展开,系统讲解 JNA(Java Native Access)中 Java 类型与原生 C 类型… · 2026/9/25 3:13:12
Agent-Reach 更新日志深度解读:从版本演进看多渠道接入、登录态判定与反爬对抗的工程实践 人工智能AI AgentMCP 服务AI 技能CLI 【免费下载链接】Agent-Reach 给你的 AI Agent 一键装上互联网能力。13 个平台(网页/GitHub/YouTube/小红书/B站/Twitter/Reddit 等)多后端路由,当下最稳的接入方式替你选好、装好、体检好。GitHub 主仓库… · 2026/9/25 3:13:12
15个真实业务AI Agent项目:从能跑通到敢上线 1. 这不是“又一个Agent教程”,而是我用37个真实业务场景筛出来的15个必练项目你点开这个标题,大概率是因为最近投简历时被卡在了“熟悉AI Agent开发”这一栏——不是没学过LangChain、不是没跑通过Hello World,而是面试官问“你做过什么能体… · 2026/9/25 3:13:12
基于Python的多模态垃圾分类系统:双塔融合与工程实现 简介:基于Python实现的多模态垃圾分类系统,是一套面向高校课程设计及毕业设计的完整工程资源,适合需要完成垃圾分类相关项目的计算机、环境类专业学生。系统融合图像与文本两种模态信息,支持上传垃圾图片或输入名称描述࿰… · 2026/9/25 3:46:09
开源AI编程工具指南:从选型到本地部署与提示词实战 1. 为什么认真对待开源AI编程工具过去大半年时间,我几乎每天都会打开AI编程工具写代码。坦白说,C、Copilot、Windsurf、Trae这些商业产品确实做得很好,很多功能的完成度远超开源项目。但我越用越觉得,值得单独拿出来聊聊的是开源工… · 2026/9/25 3:46:09
24GB显卡跑70B大模型:GPTQ/AWQ/GGUF量化踩坑与TaoToken配置实录 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:46:03
Java Web宿舍管理系统开发实战与毕业设计指南 1. 项目概述:宿舍管理系统的技术实现方案这个基于Java技术栈的宿舍管理系统是我在指导毕业设计过程中反复验证过的经典案例。它完美融合了教学要求与实际应用场景,采用B/S架构实现了宿舍分配、学生管理、报修处理等核心功能。系统前端使用JSPJQuery实现动… · 2026/9/25 3:46:03
COMSOL相变模拟技术与工程应用解析 1. 相变模拟的价值与应用场景相变现象在自然界和工程应用中无处不在,从冰融化成水到金属的固态转变,再到储能材料的相变过程,理解这些转变对材料设计、能源利用和工业制造至关重要。COMSOL Multiphysics作为一款强大的多物理场仿真软件&#… · 2026/9/25 3:46:03
论文降AI率工具免费横评:原理、实测与不花一分钱的完整流程 今年年初,我帮几个研究生改论文初稿,发现一件让人非常头疼的事:查重报告里除了常规的“重复率”,又多了一项“AIGC疑似率”——明明是自己一个字一个字敲出来的论证,却被标成了“疑似AI生成”。更离谱的是,… · 2026/9/25 3:45:57
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37