爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      非API函数检测操作系统类型

      首页 知识中心 软件开发 文章详情页

      非API函数检测操作系统类型

      2024-10-18 09:52:01 阅读次数:30

      Windows

      概要

      Today nearly all programmers use the Advanced Programming Interface (API) to receive information's about given system values. By using this API's, we don't have to take care which operating system is currently available.
      现在几乎所有的程序员都采用扩展程序接口(API)来获取操作系统信息。采用AIP函数,我们不需要关心当前所用的操作系统具体状况。

      But sometimes it might be needful to avoid the usage of such API's. This situation is given during development of software protections in order to avoid importing functions which - eventually - will point a reverse engineer to a solution.
      但是有时候不能采用API函数。比如开发保护软件时候,防止给逆向者透漏引用的函数信息信息。

      This essay show up a way to detect the today given operating systems from Microsoft: Windows 95, 98, ME - the non NT-based operating systems - and Windows NT4, 2000, XP, 2003 - the NT-based operating systems.
      这篇文章介绍了如何检测当前用到的操作系统,微软: Windows 95, 98, ME - 非NT内核,以及 Windows NT4,2000,XP -NT内核系统。

      The shown source code is in Microsoft Assembler style (MASM [3]).
      这里给出的代码是微软汇编体系(MASM[3])。

      Keywords: Microsoft Operating Systems, Software Protection, Assembly Programming, System Internals
      关键词: 微软操作系统,软件保护,汇编程序,系统内核

      The author Thomas Kruse has his main research focus on operating-system independent code optimising and software-protection development. He is Associate Editor of Assembly-Journal and CodeBreakers-Journal.
      本文作者作者 Thomas Kruse 致力于独立于操作系统的代码和软件保护系统的研究,也是Assembly-Journal 和 CodeBreakers-Journal的编辑。

      I. Introduction 介绍

      When analysing the structure of the Thread Environment Block (TEB - also known as Thread Information Block TIB) on different operating systems, we find additional data followed by this structure. This additional data seems to have - on non NT-based operating systems - no logical structure or length definition, where NT-based operating systems store the information inside the Process Environment Block (PEB). The only way to figure out the meaning of this data for non NT-based operating systems is to debug the same application on different operation systems[2].
      分析不同操作系统的线程环境块(TEB --- 也叫做线程信息块 TIB),我们可以看到这个结构的附加数据。对于非NT内核的系统,这些附加数据没有逻辑结构或者长度定义,而对于NT内核的系统他们保存了进程环境块(PEB)的信息。确定非NT内核系统中这些数据意义的唯一方法,就是在不同的操作系统中调试同一个程序。

      II. Application start 程序开始

      There are many ways in detecting an operating system. It could be done by using the Windows API function GetVersionEx[1] and checking the version values returned in structure OSVERSIONINFO(EX)[1], or by accessing Register CS. Another way is analysing the registers during start up of an application. There are several rules for them on how operating systems prepare several registers before executing the first instruction:
      有很多方法可以检测操作系统。可以采用Windows API函数 GetVersionEx[1],然后检查返回值或者检查CS寄存器。另外一个方法就是分析程序开始运行时候寄存器的值。在操作系统执行程序第一条指令以前,有很多处理寄存器的规则可以被利用。

      Startup values for Windows 95/98/ME

      Windows 95/98/ME启动值(译注:程序临执行以前)
      EAX == Application Entry Point EAX == 程序入口
      EBX == 00530000h, a fixed value 确定值

      Startup values for Windows NT/2000/XP/2003    Windows NT/2000/XP/2003启动值
      EAX == NULL
      EBX == 7FFDF000h, pointer to (PEB)       EBX == 7FFDF000h, PEB指针

      By knowing this rules we where able to check the operating system base during start up. But then we need to store the register values of EAX and EBX for further usage - or resolve them in a different way.
      利用上面的特点,我们可以在启动时候确定操作系统类型。但是为了以后使用我们需要存储EAX,EBX或者也可以采用其他方法处理。

      A. Thread Environment Block  A.线程环境块

      The TEB is prepared during application start up and contain pointers to thread related additional data. The TEB structure is available on all operating systems. It's size is defined to 34h Bytes. The TEB address could be resolved by accessing the segment register FS in the following way:
      程序启动前TEB便被初始化并且含有线程重定位数据指针。TEB结构在所有的操作系统中都是有效的。它的大小是34字节。TEB地址可以利用FS寄存器配合下面的方法来获取:

      assume fs:nothing
      mov eax,fs:[18h]

      The register EAX will contain the base address of this block. The TEB contains - at address 18h inside the structure - a pointer to itself:
      EAX寄存器含有TEB地址。TEB结构中第18h位为指向该TEB的指针。

      pSelf DWORD ? ; 18h pointer to TEB/TIB

      The last entry of TEB is the pointer to process database. On NT-based operating systems this value will point to the address of Process Environment Block (see Section II-C)
      TEB最后的内容为指向进程数据的指针。在NT内核系统中,这个值指向进程环境块(参考 II-C 部分)

      B. Additional data following TEB           B. TEB附加数据

      Told in Section I, this additional data has no logical structure and differs on each non NT-based operating system. On Windows NT, 2000, XP and 2003 this additional Data is defined as follows:
      第I部分说过,在每个非NT内核系统中附加数据块没有逻辑结构和具体定义(译注:这里好像应该是NT内核结构)。在Windows NT,2000,XP和2003,这些数据如下:

      NT_TEB_ADDON struct
      LastErrorValue DWORD ? ; 00h (34h TEB)
      LastStatusValue DWORD ? ; 04h (38h TEB)
      CountOwnedLocks DWORD ? ; 08h (3Ch TEB)
      HardErrorsMode DWORD ? ; 0Ch (40h TEB)
      NT_TEB_ADDON ends

      Windows 95, 98, ME didn't have such a structure; the additional data is scrambled!
      Windows 95, 98, ME 没有这些数据结构。附加数据完全很混乱!

      C. Process Environment Block                 C. 进程环境块

      Windows NT-based operating systems store process related data inside the Process Environment Block. The address of this structure is avaliable by accessing the segment register FS:
      NT内核的系统把进程相关数据存储在进程环境块中。这个结构的地址可以通过操作FS寄存器来获取:

      assume fs:nothing
      mov eax,fs:[30h]

      The register EAX will contain the base address of PEB.      EAX寄存器中便是PEB基地址。

      pProcess DWORD ? ; 30h pointer to process database

      The version information is stored inside the PEB structure:操作系统信息被存储在PEB结构中:

      OSMajorVersion DWORD ? ; A4h <=4->NT / 5->2K/XP/2K3
      OSMinorVersion DWORD ? ; A8h 0->2K / 1->XP / 2->2K3

      D. NT-based definitions                         D. NT内核中的定义

      Windows NT, 2000, XP and 2003 use fixed addresses to store PEB and TEB. The PEB is always stored at address 7FFDF000h and TEB is starting at 7FFDE000h. By knowing these two fixed values, it is possible to detect the operating system base.
      Windows NT, 2000, XP and 2003采用固定数据存储PEB和TEB。PEB总是被存放在7FFDF000h,TEB总是从7FFDE000h开始。知道了这2个固定数据,就可以检测出来操作系统类型。

      III. The Trick           III. 一些技巧

      Section II-B has shown an add-on structure for NT-based operating systems. The data exists on non NT-based operating systems, too. But it is stored in a different way. To resolve correct memory positions - related to detect the operating system
      第II-B 部分介绍了附加数据在NT内核系统中的存储。在非NT内核系统中,也存在这些数据。但是存储方式不一样。通过获取这些数据的位置,可以检测出来操作系统类型。

      - we use a trick the analyse the additional data.
      - 我们采用一些技巧来分析这些附加数据

      If we take a closer look to the NT TEB ADDON structure shown in Section II-B, we see the entry LastErrorValue. Nearly all Windows API's will return an error value which is accessible via GetLastError[1]. In addition to this, it is possible to manipulate the LastErrorValue via SetLastError[1] API. By using this API and monitoring the memory area behind the TEB, the locations for the LastErrorValue are:
      如果仔细看一下II-B部分说的NT TEB附加数据,可以发现入口处的LastErrorValue。几乎所有跟GetLastError[1]有关系的API都要返回一个错误值。可以采用一些技巧来利用SetLastError[1] 返回的这个Error值,为了使用这个API并且检测TEB后面的内存,下面列出来LastErrorValue 的位置:

      Windows 95 - TEB-base + 60h
      Windows 98 - TEB-base + 60h
      Windows ME - TEB-base + 74h

      Now we are able to detect Windows ME or Windows 95/98. First step to our solution, but not the final one. It is possible to detect a difference between Windows 95 and Windows 98.
      现在就可以检测出来Windows ME 或者 Windows 95/98。这是解决问题的第一步,并没有到最后。有可能检测出来Windows 95 和 Windows 98之间的不同。

      Section II showed the start up values and their rules. The start up value of EBX on non NT-based OS is 00530000h. Exactly this value will be found inside the additional data part - close to the now resolved LastErrorValue. By analysing it's location,
      the result will be:
      第II 部分说明了初始化值和他们的规律。对于非NT内核的系统,EBX初始为00530000h。并且这个值可以从附加数据中查出来 - 与LastErrorValue非常近。为了分析这个数据,下面列出来具体位置:

      Windows 95 - TEB-base + 58h
      Windows 98 - TEB-base + 54h
      Windows ME - TEB-base + 7Ch

      Now we are able to differ between each non NT-based operating system.
      现在我们就可以区分没一个非NT内核的系统。

      IV. Code creation            IV. 创建代码

      Right now, we where able the detect the version information for each operating system. We want an operating system independent code, we need to structure the given information's. Also it should be possible to resolve the version information workflow independent. Section VI will show the complete solution in Assembler.
      现在,我们可以检测每个操作系统的版本信息。为了让代码不依赖于操作系统,我们需要把需要的信息组织成一个结构。并且有必要让类型信息独立起来。第VI 部分将给出完全的汇编解决方案。

      First of all, we get the base addresses of PEB and TEB and resolve the operating system base by analysing them:
      首先,获取PEB和TEB的基地址,通过分析他们获取不同的操作系统信息。

      assume fs:nothing
      mov ebx,fs:[18h] ; get self pointer from TEB
      mov eax,fs:[30h] ; get pointer to PEB / database

      .if eax==7FFDF000h && ebx==7FFDE000h
           ; WinNT based
      .else
          ; Win9X based
      .endif ; of base check NT/9X

      The version information for NT-based operation systems is stored inside PEB. We only have to analyse the values of
      NT内核的版本信息存储在PEB中。我们仅仅需要分析这些数据:

      OSMajorVersion and OSMinorVersion:

      mov ebx,[eax+0A8h] ; get OSMinorVersion
      mov eax,[eax+0A4h] ; get OSMajorVersion

      .if eax==5 && ebx==0 ; is it Windows 2000?

      .elseif eax==5 && ebx==1 ; is it Windows XP?

      .elseif eax==5 && ebx==2 ; is it Windows 2003?

      .elseif eax<=4 ; is it Windows NT?

      .endif

      Non NT-based operating systems could be detected by analysing the additional data area behind TEB, searching the value 00530000h:
      非NT内核的操作系统可以通过分析TEB附加数据,搜索00530000h:

      mov edx,00530000h ; the value to search
      mov eax,fs:[18h] ; get the TEB base address
      mov ebx,[eax+58h] ; TEB-base + 58h (W95)
      mov ecx,[eax+7Ch] ; TEB-base + 7Ch (WME)
      mov eax,[eax+54h] ; TEB-base + 54h (W98)

      .if ebx==edx ; is it Windows 95?

      .elseif eax==edx ; is it Windows 98?

      .elseif ecx==edx ; is it Windows ME?

      .endif

      V. Conclusions             V. 结论

      Resolving the operating system by using this technique is only one possibility to avoid the usage of Advanced Programming
      Interface functions. Other functions, for example GetCommandLine[1], IsDebuggerPresent[1] or named functions in this essay could be "rewritten" in the same way. In other words: the reverse engineer isn't able to set breakpoints on API function calls, because they didn't exist. And mixing different operating system solutions together makes life even harder for him.
      采用这个技术,不过是避免使用API函数一种方法。其他很多函数,例如GetCommandLine[1], IsDebuggerPresent[1] 或者这篇文章中的一些函数都可以采用同样的方法被重写。换句话说:逆向人员不会拦截到相关API函数,因为根本就没有使用他们。并且,如果把对不同操作系统的处理都混杂在一起,对他们分析来说,会更加困难。

      VI. Appendix           VI. 附录

      .const

      ;-- return values from OS_GetOS
      OS_UNKNOWN equ -1
      OS_WIN95 equ 1
      OS_WIN98 equ 2
      OS_WINME equ 3
      OS_WINNT equ 4
      OS_WIN2K equ 5
      OS_WINXP equ 6
      OS_WIN2K3 equ 7

      .code

      OS_GetOS proc

        local _theReturnValue:DWORD

        pushad ; store all registers
        mov _theReturnValue,OS_UNKNOWN
        assume fs:nothing
        mov ebx,fs:[18h] ; get self pointer from TEB
        mov eax,fs:[30h] ; get pointer to PEB / database
        .if eax==7FFDF000h && ebx==7FFDE000h ; WinNT based
       mov ebx,[eax+0A8h] ; get OSMinorVersion
       mov eax,[eax+0A4h] ; get OSMajorVersion
       .if eax==5 && ebx==0 ; is it Windows 2000?
        mov _theReturnValue,OS_WIN2K
       .elseif eax==5 && ebx==1 ; is it Windows XP?
        mov _theReturnValue,OS_WINXP
       .elseif eax==5 && ebx==2 ; is it Windows 2003?
        mov _theReturnValue,OS_WIN2K3
       .elseif eax<=4 ; is it Windows NT?
        mov _theReturnValue,OS_WINNT
       .endif

        .else ; Win9X based

       mov edx,00530000h ; the magic value to search
       mov eax,fs:[18h] ; get the TEB base address
       mov ebx,[eax+58h] ; TEB-base + 58h (W95)
       mov ecx,[eax+7Ch] ; TEB-base + 7Ch (WME)
       mov eax,[eax+54h] ; TEB-base + 54h (W98)

       .if ebx==edx ; is it Windows 95?
        mov _theReturnValue,OS_WIN95
       .elseif eax==edx ; is it Windows 98?
        mov _theReturnValue,OS_WIN98
       .elseif ecx==edx ; is it Windows ME?
        mov _theReturnValue,OS_WINME
       .endif

        .endif ; of base check NT/9X

        popad ; restore all registers
        mov eax,_theReturnValue
        ret ; return to caller
      OS_GetOS endp

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/endurer/5874453,作者:PurpleEndurer,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:利用Spring Boot实现微服务的API版本管理

      下一篇:Java之Ajax技术

      相关文章

      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-05-12 08:43:47

      C#Windows服务:一些方法(启动、停止等)

      C#Windows服务:一些方法(启动、停止等)

      2025-05-12 08:43:47
      Windows , 停止 , 启动 , 方法 , 服务
      2025-05-07 09:08:54

      【Windows】有效管理 Windows 防火墙?`netsh advfirewall` 命令详解

      Windows 防火墙是保障系统安全的重要防线,通过 netsh advfirewall 命令,你可以高效管理防火墙规则,快速完成配置和调试任务,而无需繁琐的图形界面操作。

      2025-05-07 09:08:54
      Windows , 规则 , 防火墙
      2025-03-21 09:33:29

      命令调用C#程序, 路径参数解析错误

      命令调用C#程序, 路径参数解析错误

      2025-03-21 09:33:29
      args , System , Windows
      2025-03-05 09:11:15

      windows10或11家庭版实现远程桌面连接控制

      windows10或11家庭版实现远程桌面连接控制

      2025-03-05 09:11:15
      Windows , 步骤 , 远程
      2025-02-13 08:33:48

      【Linux】rzsz——本地Windows与云端Linux文件传输工具

      rzsz是一个便捷式的Linux软件,支持用户把文件从Windows本地拉取到云端Linux系统,也支持把Linux文件拉取到Windows本地。

      2025-02-13 08:33:48
      Linux , Windows
      2025-02-11 09:36:47

      【QT】QT学习:Qt和其它GUI库的对比

      【QT】QT学习:Qt和其它GUI库的对比

      2025-02-11 09:36:47
      API , GUI , Java , Linux , MFC , Windows
      2024-12-31 06:01:30

      oracle用户使用SFTP将Windows上的文件传输到Linux

      oracle用户使用SFTP将Windows上的文件传输到Linux

      2024-12-31 06:01:30
      Linux , oracle , SFTP , Windows
      2024-12-24 10:24:23

      Windows 下获得当前线程上下文并保存到dump文件测试

      Windows 下获得当前线程上下文并保存到dump文件测试

      2024-12-24 10:24:23
      dump , Windows , 上下文 , 代码 , 线程
      2024-12-24 10:24:23

      Windows 下获得当前线程上下文并保存到dump文件测试之2

      Windows 下获得当前线程上下文并保存到dump文件测试之2

      2024-12-24 10:24:23
      dump , Windows , 上下文 , 测试 , 线程
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5242088

      查看更多

      最新文章

      超级好用的C++实用库之线程基类

      2025-05-14 10:03:13

      C#Windows服务:一些方法(启动、停止等)

      2025-05-12 08:43:47

      命令调用C#程序, 路径参数解析错误

      2025-03-21 09:33:29

      【QT】QT学习:Qt和其它GUI库的对比

      2025-02-11 09:36:47

      Windows 下获得当前线程上下文并保存到dump文件测试

      2024-12-24 10:24:23

      Windows 下获得当前线程上下文并保存到dump文件测试之2

      2024-12-24 10:24:23

      查看更多

      热门文章

      Windows监听进程是否退出C++

      2023-03-13 10:02:19

      Windows 软件安全---注入安全

      2023-03-08 10:23:41

      Windows7安装多语言包后部分软件显示乱码问题的解决方法

      2023-04-24 11:27:42

      Windows许可证过期(‘slmgr.vbs‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件)

      2023-07-19 08:27:38

      写了一个Windows服务,通过C#模拟网站用户登录并爬取BUG列表查询有没有新的BUG,并提醒我

      2023-08-09 06:38:48

      C/C++ 递归与结束递归

      2023-07-20 06:06:15

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      Python Windows系统提权

      windows 根据父进程pid查找所有子进程id(C++)

      Windows许可证过期(‘slmgr.vbs‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件)

      Windows核心编程学习笔记

      C/C++ 递归与结束递归

      MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号