NGS注入绕过实战:从DLL注入到手动映射的检测链路
简介压缩包内是一份针对Nexon游戏安全NGS的绕过与注入工程适合具备逆向、调试与代码注入基础的研究者用于解决NGS检测下的自定义注入与心跳维持问题。包内含15个文件仅13KB核心为Visual Studio C工程3个cpp与3个hpp实现心跳处理、缓冲区管理和文件监控2套vcxproj及filters定义编译结构另有exports.def与main.cpp等模块划分清晰。目前已有1008人浏览学习此类NGS绕过话题在逆向社区有一定关注度。下载可获完整项目骨架涵盖心跳响应、缓冲区交互、文件保护绕过等源码模块并展示注入器对接与调试器配合的调用路径便于复现或二次研究。注意此类工具或违反Nexon服务条款存在封号与法律风险仅建议在授权安全测试中学习参考。1. 先定调NGS-bypas_inject 这类样本真正要防的是注入链路本身“NGS-bypas_inject”这一类命名我拆过不止一次它通常是把“绕过某厂商反作弊的注入器 载荷”打包后流传出来的。拆开这类包你会发现成败往往不取决于某个 0day而是一条通用注入链先拿到游戏进程的访问权再往可信进程里塞一段计划外代码最后做线程伪装让代码看起来像正常业务逻辑。作为反作弊对抗方向的研发我这几年的工作重心也从逐个封堵 API 转向了对注入链路做分层检测。这篇文章不谈怎么逃检而是把注入绕过样本的思路反着映射到检测点NGS 在盯什么、注入有哪些典型路线、本地验证环境怎么搭、最容易在哪翻车。适合做游戏安全、反作弊对抗、主机安全的同学也适合被 NGS 误杀问题逼着去研究检测逻辑的客户端开发。读完你能回答三个问题监控点分布在哪、手动映射为什么难查、怎么用最小代码复现注入与检测闭环。2. 先理解 NGS 在盯着什么监控点决定绕过的攻击面2.1 用户态与内核态分工驱动守门守护进程守行为NGS 这类反作弊在架构上高度一致一个内核驱动加一个用户态守护进程。内核驱动管句柄、对象、内存权限、回调注册用户态守护进程管模块列表、线程入口、窗口标题、热键、输入法状态这类偏“行为”的信号。两条链路最终把日志汇到同一套后台但告警优先级完全不同驱动上报的告警天然高于用户态上报因为伪造内核日志的成本远高于伪造用户态日志。绕过样本的第一步往往不是注入而是试探这两条链路是否完整。常见做法是先枚举内核模块列表观察反作弊驱动是否加载再用NtOpenKey试探设备对象是否存在。如果驱动没加载样本可以直接走低权限路径如果驱动在样本就要评估自己的注入方式会不会触发内核回调。这也是为什么做防守时我一般建议先做“监控点清单”把内核态和用户态各能看到的信号分开列再判断每类注入样本会踩到哪些点。用户态部分还有一层容易忽略守护进程对游戏进程的“归属”判断。守护进程通常只对特定进程 ID 或进程路径生效如果注入器自己伪造了受保护进程的路径或者通过NtSuspendProcess先让守护进程失去响应就能在守护进程恢复前完成注入。这个时序差是黑产反复利用的点后面搭环境时会单独验证。2.2 四个最常被触碰的对象进程、线程、内存、句柄把注入样本的行为拆到最底层无非是在操作四类对象每类对应的检测逻辑差别很大。进程注入第一步永远是拿到目标进程句柄。检测端盯着OpenProcess的调用权限。PROCESS_ALL_ACCESS权限过大会直接上红色告警黑产则会拆成PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ的最小权限集来绕过权限审计。线程远程线程的创建是注入的标准信号。检测端看线程起始地址、线程所属进程、线程的启动标志。起始地址不在任何已知模块导出区时基本可以直接判定为可疑。内存VirtualAllocEx加WriteProcessMemory是注入标配。检测端关注新分配的内存页是否被标记为可执行、分配块里是否出现 PE 头、页权限是否从可写变成可执行。句柄黑产越来越喜欢用DuplicateHandle把句柄从注入器复制到中间进程再在中间进程发起写操作这样审计日志里会出现一个不合理的“第三方进程使用句柄”行为。单纯在OpenProcess处打点会漏掉这类样本。对象常见操作高可疑信号低可疑伪信号进程OpenProcessALL_ACCESS 权限只读权限线程CreateRemoteThread入口不在模块表入口是 kernel32 导出函数内存VirtualAllocEx / VirtualProtectRWX 大块内存小型读写缓冲区句柄DuplicateHandle跨进程复制句柄同进程内复制四个对象对应四条检测路径但实战里不能独立看。手动映射样本会把对象操作串成一条时间线打开进程、分配内存、写节数据、转向可执行、建线程。单个行为都能解释成“正常程序的常规操作”只有串起来才具备强特征。2.3 注入为什么始终是黑产首选路径如果直接对比攻击思路黑产完全可以选择直接操作内核对象或加载驱动但这两条路的门槛太高。写内核驱动需要有效的数字签名否则连启动都过不了利用内核漏洞则依赖具体版本时效性太差。注入的优势在于复用可信身份目标进程已经建立好的网络连接、内存上下文、句柄权限全被直接借用检测端只能从行为痕迹的偏离来发现异常。举个例子游戏进程本身已经和服务器保持一条长连接注入代码只需复用这个 socket 就能通信不需要新建网络连接网络侧的流量审计完全看不见异常。再比如游戏进程已经加载了几十个 DLL多出几百 KB 的内存页在高性能机器上几乎不会对内存占用产生显著波动。这就是注入“成本低、收益高”的根本原因。防守方的注意力因此要从“谁调用了写内存的 API”转向“哪段内存突然变得可执行了”“哪个线程的入口点不在模块表里”。我一般会按优先级这样排先做可执行页扫描再做线程入口回溯最后才是 API 过滤。API 过滤只能拦“明着来”的样本内存扫描才能兜住手写映射这一类隐藏动作。2.4 一个容易忽略的盲区可执行内存页的“归属”判定很多样本分析做到一半会卡在同一个问题上明明看到目标进程里有一块新分配的PAGE_EXECUTE_READ内存内容也像代码但模块列表里没有对应名称怎么办问题出在“归属”判定上。常规模块加载器会在加载时把 PE 文件映射到内存并保留文件路径信息手动映射没有这层信息所以检测端拿到的只是一段裸内存地址。判断这段内存属于谁常见做法是扫描内存内容里的MZ头和 PE 头再对照已加载模块的基地址范围。如果MZ头指向的范围不在任何已知模块里就认定是隐藏映像。但这个判定在 64 位目标上有明显弱点样本可以在写入完成后立刻抹掉MZ头让扫描逻辑找不到 PE 签名。我处理这类样本时会在内存页属性变化的回调里先把页面内容完整 dump 一份再放行而不是等扫描时再去读内存。Dump 的时机越早样本擦除头的概率越低。3. 从“塞一个线程”到手工映射注入样本的三条典型路线3.1 经典 DLL 注入最直观也最容易暴露最基础的一条路线是OpenProcess - VirtualAllocEx - WriteProcessMemory - CreateRemoteThread由远程线程调用LoadLibraryW加载业务 DLL。这个流程教科书里写得很清楚样本分析时要反着看它的检测暴露面。// 注入器核心流程仅用于本地对抗环境测试 HANDLE hProc OpenProcess(PROCESS_ALL_ACCESS, FALSE, targetPid); if (!hProc) return GetLastError(); // 在目标进程内分配一块内存存放 DLL 绝对路径 SIZE_T len (dllPath.size() 1) * sizeof(wchar_t); LPVOID pBuf VirtualAllocEx(hProc, NULL, len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (!pBuf) return GetLastError(); WriteProcessMemory(hProc, pBuf, dllPath.c_str(), len, NULL); // 让目标进程内已存在的 LoadLibraryW 去加载这个 DLL HMODULE hKernel32 GetModuleHandleW(Lkernel32.dll); LPTHREAD_START_ROUTINE pLoadLib (LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, LoadLibraryW); HANDLE hThread CreateRemoteThread(hProc, NULL, 0, pLoadLib, pBuf, 0, NULL); if (!hThread) return GetLastError(); WaitForSingleObject(hThread, 5000); CloseHandle(hThread); VirtualFreeEx(hProc, pBuf, 0, MEM_RELEASE); CloseHandle(hProc);这段代码自身的业务逻辑并不复杂但在对抗视角里有三个参数必须强调。OpenProcess的访问权限。PROCESS_ALL_ACCESS会触发强告警实战样本往往会精确到PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ少一个字段WriteProcessMemory或CreateRemoteThread就会失败。本地测试时建议写出最小权限集不要图省事用 ALL_ACCESS。CreateRemoteThread的入口地址。指向kernel32导出函数可以过掉一部分“线程入口不在模块表”的初级检测但堆栈回溯会暴露调用链条因为远程线程的栈上会出现一层指向注入器代码的返回地址。WaitForSingleObject的等待时长。等待 5 秒是给DllMain初始化留时间时间太长容易触发“线程长时间挂起”的时序告警太短又拿不到线程退出码。这条路线最大的特征是会经过LdrLoadDll因此LoadLibrary回调、模块列表、DLL 路径全部暴露在检测端视野里。只要反作弊在用户态挂上LdrLoadDll的钩子这种注入连第一轮筛选都过不了。3.2 手动映射为什么更难查以及检测端怎么抓黑产很快就意识到LoadLibrary路线暴露面太大于是转向“手动映射”自己解析 PE 文件把每个节复制到目标进程修复重定位表初始化导入表最后创建线程直接执行入口点。整个过程不经过LdrLoadDll所以模块列表里看不见新增模块。先看一个防御端的扫描思路理解“为什么看不见”// 检测端扫描目标进程的可执行内存页查找不在模块表里的隐藏 PE // 通过 VirtualQueryEx 枚举内存区域再检查是否有 PE 头 MEMORY_BASIC_INFORMATION mbi {}; for (LPVOID addr NULL; addr (LPVOID)0x7FFFFFFFFFFF; ) { if (VirtualQueryEx(hProc, addr, mbi, sizeof(mbi)) 0) break; if (mbi.Protect (PAGE_EXECUTE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)) { // 读取该区域起始位置并检查 MZ 头 BYTE header[2] {}; SIZE_T read 0; if (ReadProcessMemory(hProc, mbi.BaseAddress, header, 2, read) read 2) { if (header[0] M header[1] Z) { // 将这个基地址与模块列表比对不在列表内即为可疑 LogUnknownModule(mbi.BaseAddress, mbi.RegionSize); } } } addr (LPVOID)((BYTE*)mbi.BaseAddress mbi.RegionSize); }这段检测逻辑的核心是“执行权限 PE 头 模块归属”三重筛选。正常加载的 DLL 都对应一个已知模块同时满足“可执行”和“不在模块表”两个条件的内存页大概率是手动映射的隐藏模块。手动映射在实施层面的关键动作有三个重定位、导入表初始化、入口线程创建。重定位是为了避免目标进程基址冲突导入表初始化是为了让隐藏代码可以调用系统 API入口线程创建则让代码真正跑起来。这些动作如果拆开看都“正常”放在一起看就有强特征。比如“先分配 RW 内存、写入节数据、再改成 RX 权限”这个顺序在正常业务里极少出现。检测端可以利用这个顺序做时间线告警对目标进程的VirtualProtect调用记录前后内存内容差异如果同一个区域先被写入大量数据、随后权限变成可执行且区域内出现MZ头直接高置信告警。样本如果选择抹掉MZ头来对抗那就需要在VirtualProtect回调里先把内存 dump 下来而不是在扫描时再读。3.3 线程伪装与回调劫持注入之后的行为隐藏注入成功只是第一步真正决定样本存活时间的是后续的线程伪装。最常用的手法是让新线程的起始地址指向某个已加载模块的合法导出函数比如kernel32!SleepEx然后通过 APC 队列去执行真正的代码。这样线程的开始地址在模块表里有合法归属启动模型也更接近正常异步操作。检测端对抗这种伪装靠的是栈回溯。当 APC 执行到真正代码时线程栈里会出现返回地址这个返回地址如果不在任何可执行模块的地址范围内就说明存在“模块范围之外的代码执行”。我一般会在线程首次调度时抓一次完整调用栈比对着PsLoadedModuleList做归属判定。只看线程入口地址是不够的栈底的返回地址才是真正的判断依据。另一种思路是劫持目标进程已有的线程回调。比如修改TEB里的TlsSlots或者利用LdrpCallInitRoutine的路径在系统初始化流程里挂自己的逻辑。这类做法的特点是“不创建新线程”所以线程数变化这条检测信号完全失效但暴露面变成了TEB结构和系统回调链路的完整性检查。检测端定期校验TEB中关键字段与模块加载状态的一致性能覆盖一部分这类样本。3.4 低门槛变体消息钩子注入与输入法注入除了远程线程和手动映射还有两条低门槛路线容易被防守方忽略SetWindowsHookEx钩子注入和输入法注入。钩子注入依赖 Windows 的消息分发机制注入器调用SetWindowsHookEx时系统会把钩子 DLL 自动加载到目标进程加载过程完全不需要WriteProcessMemory也没有远程线程单看进程行为非常干净。输入法注入则是利用ImmGetContext和ImmTranslateMessage这类 API让 DLL 随输入法上下文被加载进进程。这两类注入的共同特点是“加载动作由系统完成”所以 API 层的CreateRemoteThread检测完全失效。对付它们主要靠模块加载回调里的 DLL 路径审计钩子 DLL 和输入法 DLL 通常位于非标准目录且文件签名不明这两条特征足够支撑中等置信告警。4. 搭一个本地对抗环境用最小代码复现注入与检测闭环4.1 替身“受保护进程”钩子加事件日志没有真实反作弊环境也能做注入绕过的验证前提是先搭一个“替身”一个把自己模拟成受保护对象的宿主程序对敏感 API 打点并把事件写入日志。我一般用 detour 风格的用户态 hook 来实现逻辑简单换平台也方便。// 替身进程的检测打点Hook OpenProcess记录注入器的访问动作 BOOL (WINAPI *Real_OpenProcess)(DWORD dwAccess, BOOL inherit, DWORD pid) OpenProcess; BOOL WINAPI Hook_OpenProcess(DWORD dwAccess, BOOL inherit, DWORD pid) { // 记录访问目标与权限方便后续分析注入器的权限选择 LogEvent(OpenProcess, pid, dwAccess, inherit); return Real_OpenProcess(dwAccess, inherit, pid); }Hook_OpenProcess先写日志再调用真实函数。这里dwAccess是最关键的字段注入器申请权限的粒度差异可以明确分层PROCESS_ALL_ACCESS是粗鲁行为最小权限集则是精心设计过的。把每次访问权限记录归档后面做特征化时可以直接当标签用。4.2 最简注入器的三个必调参数本地环境里跑通一条完整链路注入器用“远程线程加 LoadLibrary”就够。真正需要反复试的是三个参数。OpenProcess的权限集。最小可用权限集是PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ。缺PROCESS_VM_WRITEWriteProcessMemory会失败缺PROCESS_QUERY_INFORMATION后续拿线程退出码会拿不到。VirtualAllocEx的分配类型。MEM_COMMIT | MEM_RESERVE是标准组合只写MEM_COMMIT不写MEM_RESERVE写入超出现有提交区域时会触发访问违规。另外远程内存的对齐单位是ALLOCATION_GRANULARITY也就是 64KB不是页大小 4KB。CreateRemoteThread的标志位。CREATE_SUSPENDED是给“建线程、改上下文、再恢复”这类隐藏流程用的普通注入不需要但分析样本时看到这个标志要格外注意它常常配合线程入口伪装出现。这三个参数在模拟测试里调对了链路才能完整跑通。调不对的方向也很有价值记录下“为什么失败”实际上就是检测端可以设置的告警点。4.3 检测端打点三件事模块加载、页属性变化、线程入口替身进程只 hook API 还不够要覆盖手动映射类样本必须在三个事件上打点。第一是模块加载事件。用LdrLoadDll回调记录 DLL 路径配合 4.1 的 API 日志可以判断注入器走的是哪条路线。第二是内存页属性变化事件。HookVirtualProtect和VirtualProtectEx记录“由 RW 改成 RX”的时机这类变化在正常进程里非常少。第三是线程创建事件。记录线程入口地址再和模块表比对判断入口是否已知。这三个事件构成一条完整的注入行为链。替身环境里用用户态 hook 就能实现不要求完全复刻真实反作弊的内核回调只要事件序列能覆盖“注入成功”的判定即可。真正做检测规则时也建议按同样三个维度去采集数据而不是只依赖某一种信号。4.4 验证一个样本是否“过检”时的操作顺序实际操作时我会按下面的顺序跑一轮验证避免拿到无效结果。先确认测试机防护干净关掉第三方杀软、把用于测试的目录加进 Windows Defender 排除项。再启动替身进程确认日志文件开始写入然后启动注入器并记录启动时间戳。注入器执行结束后等 3 到 5 秒再检查替身进程的日志确认有没有异常事件。最后把替身进程的模块表和内存页扫描结果做一次快照记录新增可疑区域。这个顺序最容易被跳过的步骤是“检查替身日志是否正常写入”。很多刚接触对抗环境的同学一上来就测注入结果替身进程的日志文件权限没配好事件全部丢失最终判定结果毫无意义。我一般会在注入前先用一个小工具调用一次OpenProcess确认日志链路可用再继续。5. 注入绕过场景里的五个避坑记录现象、原因、解决5.1 现象注入返回成功但 DLL 没被加载现象是CreateRemoteThread返回了句柄WaitForSingleObject也正常结束但目标进程模块列表里没有对应 DLL。原因多半不是注入失败而是 DLL 的DllMain自身初始化失败比如依赖了不存在的库或者路径传递的是相对路径。解决时要先读线程退出码。用GetExitCodeThread(hThread, exitCode)如果退出码是STATUS_DLL_NOT_FOUND或某个异常值说明LoadLibraryW执行了但加载失败如果退出码仍然是STILL_ACTIVE说明线程根本没跑完。再往下排查时把 DLL 路径改成绝对路径并在 DLL 入口第一行写日志文件确认它到底有没有被加载执行。提示CreateRemoteThread返回成功只代表线程创建成功不代表LoadLibraryW成功执行。这是分析样本时最容易误读的信号。5.2 现象注入后目标进程几秒内崩溃现象是注入完成很顺利但替身进程在 5 秒内直接退出。原因通常是释放进目标进程的代码引用了源进程的绝对虚拟地址。比如注入器把本地计算出的某个全局变量地址直接当作目标进程地址传了进去而两个进程的地址空间完全独立这个地址在目标进程里指向的是完全无关的内存。解决的原则是所有地址必须基于目标进程重新计算。本地进程里的地址只能用来计算偏移量不能直接作为远程地址使用。需要传参时先在目标进程内分配参数块再通过WriteProcessMemory写入最后把参数块地址传给线程入口。这一个原则能避免九成以上的注入崩溃问题。5.3 现象线程入口正常却仍暴露在栈回溯里现象是注入线程的入口点已经指向kernel32的合法导出函数但检测端做栈回溯时仍然判定可疑。原因是线程入口虽然合法但真正执行代码时栈里留下的返回地址落回了注入代码所在的内存区域而这个区域不在任何已加载模块的范围内。从检测端看这个问题点是栈底的返回地址而不仅是线程入口。因此做检测规则时不能只看CreateRemoteThread的起始地址还要在样本线程首次切换到用户态执行时抓取一段完整调用栈把每一层返回地址都和模块表做归属比对。栈回溯里只要出现一个“非模块归属的返回地址”这个线程的可信度就要重新评估。5.4 现象杀软先于反作弊告警本地复现时注入器刚创建远程线程杀软先弹了告警测试直接中断。原因不是注入器写得不对而是杀软的堆栈监控优先级高于游戏反作弊在线打猎的行为特征比目标进程内存异常更醒目。解决的办法是测试机不装第三方杀软用 Windows Defender 的排除目录或者直接在未联网的虚拟机里做。另外不要用云同步目录放注入器杀软对这类文件的采样学习速度非常快。这个坑我踩了三次后才养成“先关防护再测试”的习惯。5.5 现象“没被检测”与“没检测到任何行为”不是一回事最迷惑人的现象是注入成功、线程也启动但后台行为采集没有产生任何有效数据。原因通常是样本带环境判断逻辑检测到虚拟机就休眠或者样本在等待特定窗口事件比如游戏主界面加载完成的标志位没等到就停在初始分支。解决方式是在替身进程里模拟这些窗口事件和加载状态或者用日志打点确认样本执行到了哪个分支。最忌讳的是看到“没检测”就直接下结论“绕过有效”很多绕过包的测试结论就是这么来的。样本分析里“检测方没采集到”和“样本真的无法被检测”之间有巨大的鸿沟必须用日志把执行路径钉死。6. 把“绕过”转成防守收益特征化样本与验证输出本地对抗环境跑通后产出不应该只是一份“能否注入”的报告而是一组能落到检测规则里的行为特征。我每次分析完一个注入绕过样本会把日志整理成三个维度权限组合、内存页属性、线程栈回溯。然后把每个特征按“是否可伪造”分级比如“目标进程申请大块 RWX 内存”就足够做强告警因为正常游戏逻辑极少出现这种用法而“线程入口在合法模块”只能降级作为辅助判据。还有一种做法是建立样本时间线信号。以手动映射为例时间线上总会存在“打开进程 - 分配内存 - 写节数据 - 修改页权限 - 创建线程”这一段相对固定的序列。特征化时不仅要记录单个行为还要记录行为之间的偏移时间。正常程序修改内存保护的操作通常在几十毫秒内完成而注入样本常因重定位表解析出现几百毫秒的停顿。这个时间差能作为弱特征加入规则集也能用来做同源样本的聚类。最后一条习惯跑完每个样本把注入器和替身进程的日志连同内存 dump 一起存档形成一份内部“注入器指纹库”。下次来了新样本先对比旧指纹命中直接上高优先告警没命中再走完整复现流程。这个习惯帮我省下了大量重复拆壳时间也能让自己清楚区分“检测了但没示警”和“根本没检测”这两种情况——前者需要调阈值后者需要补逻辑。说到底做反作弊对抗最忌讳的就是把“没被检测”当成“绕过有效”。这个判断我想了很久才真正踩透样本分析的价值不在得出“能不能注入”这个二值结论而在把每一次成功和失败都沉淀成可复用的检测规则。希望这篇笔记能帮你在面对 NGS 注入绕过样本时少走几步弯路。本文还有配套的精品资源点击获取

相关新闻

Embabel框架:把Agent决策权从LLM拿回,实现可控可测的智能体架构

Embabel框架:把Agent决策权从LLM拿回,实现可控可测的智能体架构

1. 为什么要把决策权从LLM手里拿回来1.1 一个让我睡不着觉的线上事故先说个真实经历。去年我参与的一个智能客服项目上线第三周,出了个不大不小的事故:用户问“帮我查一下上个月的订单”,Agent在没有任何外部数据支撑的情况下,直接…

2026/10/18 9:13:26 阅读更多 →
36个可调试前端源码:HTML语义化与CSS布局实战切片

36个可调试前端源码:HTML语义化与CSS布局实战切片

简介:这是一份面向前端初学者与进阶开发者的实战型网站布局学习资源,聚焦HTML结构、CSS响应式布局及基础JavaScript交互实现,帮助开发者快速掌握单页、多栏、瀑布流、网格等主流网站形态的源码级实现逻辑。压缩包共2000个文件,主体…

2026/10/18 9:12:26 阅读更多 →
从极简命名到核心实现:响应式系统rea的设计与避坑指南

从极简命名到核心实现:响应式系统rea的设计与避坑指南

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维“rea”这个标题,第一次看到的时候我愣了一下。三个字母,没有大写,没有后缀,没有版本号,干净得像一个刚创建的空文件夹。但恰恰是这种极简命名&am…

2026/10/18 9:12:26 阅读更多 →

最新新闻

400G多模光纤:为何8通道50G比4通道100G更早落地

400G多模光纤:为何8通道50G比4通道100G更早落地

简介:IEEE Std 802.3cm-2020 是 IEEE 发布的以太网修订标准,聚焦多模光纤上 400Gb/s 的物理层与管理参数,面向光通信工程师、数据中心网络架构师及 400G 光模块研发人员。标准新增 Clause 150,定义了 400GBASE-SR8 与 400GBASE-SR…

2026/10/18 10:36:45 阅读更多 →
400G多模光纤标准解析:SR8与SR4.2的物理层设计差异与工程实践

400G多模光纤标准解析:SR8与SR4.2的物理层设计差异与工程实践

简介:IEEE Std 802.3cm-2020 是 IEEE 发布的以太网修订标准,聚焦多模光纤上 400Gb/s 的物理层与管理参数,面向光通信工程师、数据中心网络架构师及 400G 光模块研发人员。标准新增 Clause 150,定义了 400GBASE-SR8 与 400GBASE-SR…

2026/10/18 10:36:45 阅读更多 →
Linux Socket 编程实战:从可编译实例到多连接服务

Linux Socket 编程实战:从可编译实例到多连接服务

简介:这份资源面向Linux网络编程初学者与需要夯实Socket基础的开发者,系统梳理了Socket通信的核心原理与常用接口。内容从网络中进程如何唯一标识讲起,说明IP地址、协议与端口三元组的作用,并解释Socket作为特殊文件的设计思想&am…

2026/10/18 10:36:45 阅读更多 →
微信小程序远程在线诊疗系统:基于SSM的完整设计与实现

微信小程序远程在线诊疗系统:基于SSM的完整设计与实现

简介:面向高校毕业设计场景的微信小程序远程在线诊疗系统完整项目,后端采用Java SSM框架与MySQL数据库,前端为微信开发者工具构建的小程序,并辅以Vue相关后台管理界面。系统内设管理员、用户、医生三类角色,覆盖科室信…

2026/10/18 10:36:45 阅读更多 →
勇士传说横版卷轴游戏:C#动作游戏源码解析与毕业设计实战

勇士传说横版卷轴游戏:C#动作游戏源码解析与毕业设计实战

简介:这份资源是基于C#开发的「勇士传说」横版卷轴游戏完整源码,面向计算机相关专业做毕业设计的学生,以及希望入门Unity 2D游戏开发的学习者。项目以经典横版卷轴玩法为核心,涵盖角色动画、碰撞检测、地图设计、敌人AI与用户输入…

2026/10/18 10:36:45 阅读更多 →
零基础参与开源Python项目:从Fork到首个PR的完整实战指南

零基础参与开源Python项目:从Fork到首个PR的完整实战指南

1. 先搞清楚开源贡献这件事,远不止写代码很多刚接触开源Python项目的人,以为“做贡献”就等于“提PR改源码”。我最初也是这样想的,甚至一度觉得,自己没写出过有设计感的代码,就不配去动别人的仓库。直到后来真正参与进…

2026/10/18 10:35:45 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →