slmgr源码解析

之前大佬要我做一款windows一键激活工具。基本原理是利用我们的license,从后台请求一个微软的正版license,然后调用slmgr进行windows激活。这样就可以把license的控制权留在自己这里,而不用传递给工厂,避免license流失。(所以期望从本文找破解方案的同学可以散了233)所以记录下对slmgr的研究。


slmgr是一个vba脚本,整体的结构如下图所示。可以看到整个结构基本都是面向功能的,十分容易理解。

其主要功能就是通过指定的命令进入分支语句,然后调各个功能模块方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

我们先来看看主要的入口函数ExecCommandLine。归结起来就2句话,1是执行Connect,获取WMI服务和注册表;2是根据命令参数执行不同子模块功能

Private Sub ExecCommandLine
    Dim intOption, indexOption
    Dim strOption, chOpt
    Dim remoteInfo(3)

    
    '省略中间的参数检测代码
    
    '连接至本地计算机或者远端计算机,以获取WMI服务和注册表
    Call Connect()

    If intUnknownOption = intOption Then
        LineOut GetResource("L_MsgInvalidOptions")
        LineOut ""
        Call DisplayUsage()
    End If
	'针对不同的命令参数执行子函数
    intOption = ParseCommandLine(indexOption)

    If intUnknownOption = intOption Then
        LineOut GetResource("L_MsgUnrecognizedOption") & WScript.Arguments.Item(indexOption)
        LineOut ""
        Call DisplayUsage()
    End If
End Sub

Connect的源码如下,其主要功能是从参数中判断是否是对本地计算机处理,针对远端计算机和本地计算机,采用不同方式获取WMI服务和注册表

Private Sub Connect
    Dim objLocator, strOutput
    Dim objServer, objService
    Dim strErr, strVersion

    On Error Resume Next

    '如果是本地计算机,则直接获取WMI服务和注册表
    If g_strComputer = "." Then
        Set g_objWMIService = GetObject("winmgmts:\\" & g_strComputer & "\root\cimv2")
        QuitIfError2("L_MsgErrorLocalWMI")

        Set g_objRegistry = GetObject("winmgmts:\\" & g_strComputer & "\root\default:StdRegProv")
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值