2015-11-29 17:30:52 +08:00
|
|
|
|
VLMCS(1) KMS Activation Manual VLMCS(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NAME
|
|
|
|
|
vlmcs - a client for testing and/or charging KMS servers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
|
vlmcs [ options ] [ target ] [ options ]
|
|
|
|
|
|
|
|
|
|
target can be one of the following:
|
|
|
|
|
|
2016-06-06 10:36:00 +08:00
|
|
|
|
hostname|ipaddress[:tcp-port] to query a specific KMS server
|
2015-11-29 17:30:52 +08:00
|
|
|
|
(example: vlmcs kms.example.com:1688).
|
|
|
|
|
.domain to automatically detect KMS servers via DNS for domain
|
|
|
|
|
(example: vlmcs .example.com). Please note the dot before
|
|
|
|
|
domain.
|
|
|
|
|
- (a single dash) to detect KMS servers in your own domain.
|
|
|
|
|
|
|
|
|
|
If you use ipaddress:port as the target, the ipaddress must be enclosed
|
|
|
|
|
in brackets if it contains colons, e.g. [2001:db8:dead:beef::1]:1688.
|
|
|
|
|
If you use a link-local IPv6 address on Unix systems, you must append a
|
|
|
|
|
percent sign and the interface identifier of the source interface, for
|
|
|
|
|
example fe80::dead:beef%eth0.
|
|
|
|
|
|
|
|
|
|
If you omit the target, 127.0.0.1:1688 will be used except if you use
|
|
|
|
|
-i6. In this case the default target is [::1]:1688.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
|
vlmcs is a program that can be used to test a KMS server that provides
|
|
|
|
|
activation for several Microsoft products. The KMS server may also be
|
|
|
|
|
an emulator. It supports KMS protocol versions 4, 5 and 6.
|
|
|
|
|
|
|
|
|
|
vlmcs generates one or more activation requests for a Microsoft KMS
|
|
|
|
|
product and sends it to a KMS server. It then analyzes and displays the
|
|
|
|
|
responses of the KMS server.
|
|
|
|
|
|
|
|
|
|
vlcms checks both the DCE-RPC protocol and the activation message for
|
|
|
|
|
correctness and reports any errors that it finds.
|
|
|
|
|
|
|
|
|
|
vlmcs can also be used to "charge" a KMS server. A Microsoft KMS server
|
|
|
|
|
sends correct activation messages only if it detects a certain minimum
|
|
|
|
|
of clients (25 for Windows client OSses, 5 otherwise) on the network.
|
|
|
|
|
This is Microsoft's futile attempt to prevent running a KMS server in a
|
|
|
|
|
home environment.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPTIONS
|
|
|
|
|
-h or -?
|
|
|
|
|
Show help.
|
|
|
|
|
|
|
|
|
|
|
2016-06-06 10:36:00 +08:00
|
|
|
|
-V Displays extended version information. This includes the com‐
|
|
|
|
|
piler used to build vlmcs, the intended platform and flags (com‐
|
|
|
|
|
pile time options) to build vlmcs. If you have the source code
|
|
|
|
|
of vlmcsd, you can type make help (or gmake help on systems that
|
|
|
|
|
do not use the GNU version of make(1) by default) to see the
|
|
|
|
|
meaning of those flags.
|
|
|
|
|
|
|
|
|
|
|
2015-11-29 17:30:52 +08:00
|
|
|
|
-x Show valid applications that can be used with -l.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-e Show some examples how to use vlmcs correctly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-v Be verbose. Instead of just displaying the returned ePID and the
|
2016-06-06 10:36:00 +08:00
|
|
|
|
HwId (protocol v6 only) vlmcsd shows all details of the query
|
2015-11-29 17:30:52 +08:00
|
|
|
|
and the response.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-l application
|
2016-06-06 10:36:00 +08:00
|
|
|
|
Request activation for a specific application. Valid applica‐
|
|
|
|
|
tions can be displayed by using -x. The default application is
|
|
|
|
|
Windows Vista Business. The list of available applications is
|
2015-11-29 17:30:52 +08:00
|
|
|
|
not complete. You may supply GUIDs with -a, -k and -s to specify
|
2016-06-06 10:36:00 +08:00
|
|
|
|
applications that are not listed with -x. The -l option is used
|
2015-11-29 17:30:52 +08:00
|
|
|
|
as a shortcut for the most common applications.
|
|
|
|
|
|
|
|
|
|
|
2016-08-15 18:35:59 +08:00
|
|
|
|
-K protocol-version
|
|
|
|
|
Force a specific version of the KMS protocol. Valid versions are
|
|
|
|
|
4.0, 5.0 and 6.0. The default is to select a suitable version
|
|
|
|
|
according to the application selected. You may use -K to send an
|
|
|
|
|
incorrect protocol version to the KMS server and see how it
|
|
|
|
|
behaves. Genuine KMS servers return HRESULT 0x8007000D if the
|
|
|
|
|
KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the
|
|
|
|
|
same. When sending a request with an incorrect protocol number,
|
|
|
|
|
vlmcs ignores the minor protocol number (e.g. sends a v4 request
|
|
|
|
|
for version 4.1). If the major version number is less then 4, it
|
2016-10-24 21:32:24 +08:00
|
|
|
|
sends a v4 request. If the major version is greater then 6, it
|
2016-08-15 18:35:59 +08:00
|
|
|
|
sends a v6 request. In any case the protocol-version as speci‐
|
|
|
|
|
fied by -K is put in the version fields of the request.
|
|
|
|
|
|
|
|
|
|
|
2015-11-29 17:30:52 +08:00
|
|
|
|
-4, -5 and -6
|
2016-08-15 18:35:59 +08:00
|
|
|
|
Force version 4, 5 or 6 of the KMS protocol. These options are
|
|
|
|
|
actually shortcuts of -K 4.0, -K 5.0 and -K 6.0.
|
2015-11-29 17:30:52 +08:00
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
-j filename
|
|
|
|
|
Use KMS data file filename. By default vlmcs contains product
|
|
|
|
|
data that is recent when vlmcs was compiled. You may use a more
|
|
|
|
|
recent KMS data file that contains additional products.
|
|
|
|
|
|
|
|
|
|
If vlmcsd has been compiled to use a default KMS data file, you
|
|
|
|
|
may use -j- to ignore the default configuration file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-m Let the client pretend to be a virtual machine. Early versions
|
|
|
|
|
of Microsoft's KMS server did not increase the client count if
|
|
|
|
|
the request came from a virtual machine. Newer versions ignore
|
2015-11-29 17:30:52 +08:00
|
|
|
|
this flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
|
2016-12-02 15:56:18 +08:00
|
|
|
|
ates some random DNS names for each request. If you prefer Net‐
|
|
|
|
|
BIOS names, you may use -d. A real Microsoft activation client
|
|
|
|
|
uses DNS names or NetBIOS depending on the client name configu‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
ration. KMS servers treat the workstation name as a comment that
|
2016-12-02 15:56:18 +08:00
|
|
|
|
affects logging only. Clients will be identified by a GUID that
|
|
|
|
|
can be specified using -c. -d has no effect if you also specify
|
2015-11-29 17:30:52 +08:00
|
|
|
|
-w.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-a application-guid
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Send requests with a specific application-guid. There are cur‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
rently only three known valid application-guids:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55c92734-d682-4d71-983e-d6ec3f16059f (Windows)
|
|
|
|
|
59a52881-a989-479d-af46-f275c6370663 (Office 2010)
|
|
|
|
|
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
|
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
A Microsoft KMS server uses these GUIDs to have seperate coun‐
|
|
|
|
|
ters for the already activated clients. A client that does not
|
|
|
|
|
contact the KMS server within 30 days will be deleted from the
|
2015-11-29 17:30:52 +08:00
|
|
|
|
database. Emulated KMS servers are always fully charged.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-k kms-guid
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Send requests with a specific kms-guid. A Microsoft KMS server
|
|
|
|
|
uses these GUIDs as a product id to decide whether to grant
|
|
|
|
|
activation or not. A list of current kms-guids can be found in
|
|
|
|
|
kms.c (table KmsIdList). Emulated KMS servers grant activation
|
2015-11-29 17:30:52 +08:00
|
|
|
|
unconditionally and do not check the kms-guid.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-s activation-guid
|
2016-12-02 15:56:18 +08:00
|
|
|
|
The activation-guid defines the actual product, e.g. "Windows
|
|
|
|
|
8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
|
|
|
|
|
1:1 to a product key. However, neither a Microsoft KMS server
|
2015-11-29 17:30:52 +08:00
|
|
|
|
nor emulated servers check this id. The activation-guid is use‐
|
2016-12-02 15:56:18 +08:00
|
|
|
|
ful in logging to get a specific product description like "Win‐
|
|
|
|
|
dows 8.1 Professional WMC". A list of current activation-guids
|
2015-11-29 17:30:52 +08:00
|
|
|
|
can be found in kms.c (table ExtendedProductList).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-n requests
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Send requests requests to the server. The default is to send at
|
2015-11-29 17:30:52 +08:00
|
|
|
|
least one request and enough subsequent requests that the server
|
2016-12-02 15:56:18 +08:00
|
|
|
|
is fully charged afterwards for the application-guid you
|
2015-11-29 17:30:52 +08:00
|
|
|
|
selected (explicitly with -a or implicitly by using -l).
|
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
-T Causes to use a new TCP connection for each request if multiple
|
|
|
|
|
requests are sent with vlmcsd. This is useful when you want to
|
|
|
|
|
test an emulated KMS server whether it suffers from memory
|
|
|
|
|
leaks. To test for memory leaks use -n with a large number of
|
|
|
|
|
requests (> 100000) and then test twice (with and without -T).
|
|
|
|
|
This option may become neccessary for future versions of Micro‐
|
|
|
|
|
soft's KMS server because multiple requests with different
|
|
|
|
|
clients-guids for the same kms-id-guid are impossible in a real
|
2015-11-29 17:30:52 +08:00
|
|
|
|
KMS szenario over the same TCP connection.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-c client-machine-guid
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Normally vlmcs generates a random client-machine-guid for each
|
|
|
|
|
request. By using this option you can specify a fixed client-
|
|
|
|
|
machine-guid This causes a Microsoft KMS not to increment its
|
|
|
|
|
client count because it receives multiple requests for the same
|
|
|
|
|
client. Thus do not use -c if you want to charge a real KMS
|
2015-11-29 17:30:52 +08:00
|
|
|
|
server.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-o previous-client-machine-guid
|
|
|
|
|
If the client-machine-guid changes for some reason, the real KMS
|
2016-12-02 15:56:18 +08:00
|
|
|
|
client stores a previous-client-machine-guid which is sent to
|
|
|
|
|
the KMS server. This happens rarely and usually
|
|
|
|
|
00000000-0000-0000-0000-000000000000 is used. You can use -o to
|
2015-11-29 17:30:52 +08:00
|
|
|
|
specify a different previous-client-machine-guid.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-G filename
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
|
|
|
|
|
tion to filename in format suitable to be used as a configura‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
tion file (aka ini file) for vlmcsd(8). This is especially use‐
|
2016-12-02 15:56:18 +08:00
|
|
|
|
ful if you have access to a genuine KMS server and want to use
|
2015-11-29 17:30:52 +08:00
|
|
|
|
the same data with vlmcsd(8).
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
If filename does not exist, it will be created. If you specify
|
|
|
|
|
an existing filename, it will be updated to use the information
|
|
|
|
|
received from the remote KMS server and a backup filename~ will
|
2015-11-29 17:30:52 +08:00
|
|
|
|
be created.
|
|
|
|
|
|
|
|
|
|
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-w workstation-name
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Send requests with a specific workstation-name. This disables
|
|
|
|
|
the random generator for the workstation name. Since it is a
|
2015-11-29 17:30:52 +08:00
|
|
|
|
comment only, this option does not have much effect.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-r required-client-count
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Also known as the "N count policy". Tells the KMS server that
|
|
|
|
|
successful activation requires required-client-count clients.
|
|
|
|
|
The default is the required-client-count that the product would
|
|
|
|
|
need if the request was a real activation. A Microsoft KMS
|
2015-11-29 17:30:52 +08:00
|
|
|
|
server counts clients up to the double amount what was specified
|
|
|
|
|
with -r. This option can be used to "overcharge" a Microsoft KMS
|
|
|
|
|
server.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-t status
|
|
|
|
|
Reports a specific license status to the KMS server. status is a
|
2016-12-02 15:56:18 +08:00
|
|
|
|
number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
|
|
|
|
|
grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
|
2015-11-29 17:30:52 +08:00
|
|
|
|
6=extended grace. Refer to TechNet ⟨http://
|
|
|
|
|
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
|
2016-12-02 15:56:18 +08:00
|
|
|
|
for more information. A Microsoft KMS server collects this
|
2015-11-29 17:30:52 +08:00
|
|
|
|
information for statistics only.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-g binding-expiration
|
2016-12-02 15:56:18 +08:00
|
|
|
|
This tells the KMS server how long a client will stay in its
|
|
|
|
|
current license status. This can be the remaining OOB time (the
|
|
|
|
|
grace peroid that is granted between installation of a product
|
|
|
|
|
and when activation is actuall required) or the remaining time
|
|
|
|
|
when KMS activation must be renewed. binding-expiration is
|
2015-11-29 17:30:52 +08:00
|
|
|
|
specified in minutes. A Microsoft KMS server apparantly does not
|
|
|
|
|
use this information.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-i protocol-version
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Force the use of Internet protocol protocol-version. Allowed
|
|
|
|
|
values are 4 (IPv4) and 6 (IPv6). This option is useful only if
|
|
|
|
|
you specfiy a hostname and not an ip-address on the command
|
2015-11-29 17:30:52 +08:00
|
|
|
|
line.
|
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
-p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
|
2015-11-29 17:30:52 +08:00
|
|
|
|
This can be used to test if the KMS server uses the same setting
|
2016-12-02 15:56:18 +08:00
|
|
|
|
of this flag in the RPC bind respone. Some KMS emulators don't
|
2015-11-29 17:30:52 +08:00
|
|
|
|
set this correctly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-N0 and -N1
|
|
|
|
|
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
|
2016-12-02 15:56:18 +08:00
|
|
|
|
RPC protocol. Disable NDR64 only in case of problems. If NDR64
|
2015-11-29 17:30:52 +08:00
|
|
|
|
is not used, vlmcs cannot detect many RPC protocol errors in KMS
|
|
|
|
|
emulators. If you want to test whether a KMS emulator fully sup‐
|
2016-12-02 15:56:18 +08:00
|
|
|
|
ports NDR64, you must use the -n option to send at least two
|
|
|
|
|
requests. This is because Microsoft's client always sends the
|
|
|
|
|
first request using NDR32 syntax and subsequent requests using
|
2015-11-29 17:30:52 +08:00
|
|
|
|
NDR64 syntax.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-B0 and -B1
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Disables (-B0) or enables (-B1) bind time feature negotiation
|
|
|
|
|
(BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
|
|
|
|
|
errors in KMS emulators.
|
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Options that do not require an argument can be specified together with
|
|
|
|
|
a single dash, e.g. vlmcs -6mvT. If you specify an option more than
|
2015-11-29 17:30:52 +08:00
|
|
|
|
once, the last occurence will be in effect.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FILES
|
|
|
|
|
vlmcsd.ini(5)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXAMPLES
|
|
|
|
|
vlmcs kms.example.com
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Request activation for Windows Vista using v4 protocol from
|
|
|
|
|
kms.example.com. Repeat activation requests until server is
|
2015-11-29 17:30:52 +08:00
|
|
|
|
charged for all Windows products.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlmcs -
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Request activation for Windows Vista using v4 protocol from a
|
2015-11-29 17:30:52 +08:00
|
|
|
|
KMS server that is published via DNS for the current domain.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlmcs .example.com
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Request activation for Windows Vista using v4 protocol from a
|
2015-11-29 17:30:52 +08:00
|
|
|
|
KMS server that is published via DNS for domain example.com.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlmcs -6 -l Office2013 -v -n 1
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Request exactly one activation for Office2013 using v6 protocol
|
2015-11-29 17:30:52 +08:00
|
|
|
|
from localhost. Display verbose results.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Get ePIDs and HWIDs from kms.bigcompany.com and create/update
|
2015-11-29 17:30:52 +08:00
|
|
|
|
/etc/vlmcsd.ini accordingly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BUGS
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Some platforms (e.g. Solaris) may have a man(7) system that does not
|
|
|
|
|
handle URLs. URLs may be omitted in the documentation on those plat‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AUTHOR
|
|
|
|
|
Written by Hotbird64
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREDITS
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
|
2015-11-29 17:30:52 +08:00
|
|
|
|
ferati87, qad, Ratiborus, vityan666, ...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SEE ALSO
|
|
|
|
|
vlmcsd(7), vlmcsd(8), vlmcsdmulti(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-02 15:56:18 +08:00
|
|
|
|
Hotbird64 November 2016 VLMCS(1)
|