Skip to content

Commit d991dff

Browse files
committed
Add version and updated readme
1 parent 819225d commit d991dff

File tree

5 files changed

+73
-1
lines changed

5 files changed

+73
-1
lines changed

README.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,43 @@
1-
# Selsius License Maker
1+
# Selsius Keygen
2+
<small>For the CallManager that came before Cisco</small>
3+
4+
## Table of Contents
5+
6+
- [Preamble](#preamble)
7+
- [Usage](#usage)
8+
- [License Syntax](#license-syntax)
9+
- [Keygen Mechanics](#keygen-mechanics)
10+
11+
## Preamble
12+
13+
This program generates valid licenses and their associated keys for Selsius CallManager 2.x, which are required to connect a desk phone or gateway to it. These keys were required for a brief period before Cisco's acquisition of Selsius Systems, which subsequently removed the licensing algorithm from future versions to later implement a more robust system.
14+
15+
The licensing algorithm for this program has been reverse engineered from the original binaries of CallManager 2.01 and has been reimplemented in a way that lets us generate valid keys for any given license. (Or any string for that matter, though it wouldn't be able to tell how many licenses you have.)
16+
17+
## Usage
18+
All you need to do is specify what type of license you want, and how many licenses you wish to generate. For CallManager 2, there are two distinct types of licenses: Selsius Stations, and Access Ports. Selsius Station licenses allow you to register a phone to CallManager, with one license consumed for each phone registered, with the exception of the first 5 VirtualPhone registrations. Access Port licenses let you use Selsius Gateways to connect analog phones or to make calls out to the PSTN.
19+
20+
To generate a license, you can pick from three options:
21+
1. Generate Selsius Station licenses
22+
1. Generate Access Port licenses
23+
1. Generate both licenses
24+
25+
You can then specify the number of licenses you wish to generate for each type, and you should get something like `02N-Q5482760-S2T4`, which, in this example, means two Selsius Station licenses, and four Access Port licenses. You should also get an associated key to go along with the license to add it to CallManager.
26+
27+
## License Syntax
28+
29+
Let's break down the following license: `02N-Q5482760-S2T4`
30+
31+
The first two digits signify the version of the license. As far as I can tell, it doesn't really do much, but shows up as a nice stat on the CallManager dashboard.
32+
33+
The letter N signifies that this is a new license to be added to CallManager. Upgrade licenses use the letter U instead.
34+
35+
This part of the license, `-Q5482760-`, can be whatever you want it to be. I'm not quite sure what Q does, but changing it doesn't seem to affect the license at all, nor does changing the dashes. I assume this part of the license makes up the "serial number" of the license to make sure each license is unique and/or trackable.
36+
37+
Finally, we have `S2T4`. S2 signifies that there are two Selsius Station licenses, and T4 signifies that there are four Access Port licenses. It also doesn't seem to matter which order the licenses come in, as `T4S2` also works just as fine.
38+
39+
## Keygen Mechanics
40+
41+
The way CallManager 2 verifies a license is what I've found to be most intriguing. The license is hashed with a unique algorithm that does a lot of character swapping. I'd go into detail about how it exactly works but it'd take me quite a while. You can go through the source code to check it out for yourself.
42+
43+
The result is a 16 character string that is unique to that license, meaning any given license will always generate the exact same key. Once the keypair is given to CallManager, it generates a key from your license and matches it against your key, verifying that your license is authentic. When CallManager needs to calculate how many licenses you have and how many are being used, it will fetch all of the valid licenses in its database and tally them up.

Selsius License Maker.vcxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@
130130
<ItemGroup>
131131
<ClCompile Include="main.cpp" />
132132
</ItemGroup>
133+
<ItemGroup>
134+
<ClInclude Include="resource.h" />
135+
</ItemGroup>
136+
<ItemGroup>
137+
<ResourceCompile Include="SelsiusKeygen.rc" />
138+
</ItemGroup>
133139
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
134140
<ImportGroup Label="ExtensionTargets">
135141
</ImportGroup>

Selsius License Maker.vcxproj.filters

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,14 @@
1919
<Filter>Source Files</Filter>
2020
</ClCompile>
2121
</ItemGroup>
22+
<ItemGroup>
23+
<ClInclude Include="resource.h">
24+
<Filter>Header Files</Filter>
25+
</ClInclude>
26+
</ItemGroup>
27+
<ItemGroup>
28+
<ResourceCompile Include="SelsiusKeygen.rc">
29+
<Filter>Resource Files</Filter>
30+
</ResourceCompile>
31+
</ItemGroup>
2232
</Project>

SelsiusKeygen.rc

4.53 KB
Binary file not shown.

resource.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//{{NO_DEPENDENCIES}}
2+
// Microsoft Visual C++ generated include file.
3+
// Used by SelsiusKeygen.rc
4+
5+
// Next default values for new objects
6+
//
7+
#ifdef APSTUDIO_INVOKED
8+
#ifndef APSTUDIO_READONLY_SYMBOLS
9+
#define _APS_NEXT_RESOURCE_VALUE 101
10+
#define _APS_NEXT_COMMAND_VALUE 40001
11+
#define _APS_NEXT_CONTROL_VALUE 1001
12+
#define _APS_NEXT_SYMED_VALUE 101
13+
#endif
14+
#endif

0 commit comments

Comments
 (0)