A keygen for 010Editor
NOTICE: The content of this section is just my suspection. I cannot guarantee that it is absolutely correct because there is no symbol information in 010Editor.exe
to confirm my suspection.
There are 3 types of keys (also called passwords in 010Editor) that can activate 010Editor, which are
Key Type | Key Length | Format |
---|---|---|
Evaluation | 19 chars | xxxx-xxxx-xxxx-xxxx |
VersionLicense | 19 chars | xxxx-xxxx-xxxx-xxxx |
TimeLicense | 24 chars | xxxx-xxxx-xxxx-xxxx-xxxx |
The x
in Format
column represents a hex char and is case-insensitive if a letter.
Before I explain each kind of keys, there are some concepts I should give.
-
Daystamp: We know that timestamp is the number of seconds since
00:00:00 Jan. 1st, 1970
. Similarly, daystamp is the number of days sinceJan. 1st, 1970
. For example, the daystamp ofJan. 2nd, 1970
is 1 andJun. 23th, 2018
is 17705. -
Checksum: I'm not sure if it can be called
checksum
. But I do not have a better word to describe it.Checksum
is a 4-bytes-long data and is related with some parameters. You can go to the definition of function_010Editor::Keygen<_010Editor::KeyType::Base>::CalculateChecksum
in_010EditorKeygen.hpp
to see how to calculate it. The functionCalculateChecksum
receives 4 parameters. There areParameter Description utf8_username The UTF-8 bytes of username that the key licensed to. IsRegistrationVersion false
forEvaluation
key only. Otherwise it must betrue
.a3 An unknown parameter. So far it has an unclear meaning. LicenseCount It represents how many users can use this license. Must be 1~1000. -
EncodedExpireDaystamp: This is a 3-bytes-long data. The function
_010Editor::Keygen<_010Editor::KeyType::Base>::EncodeExpireDate
in_010EditorKeygen.hpp
can calulate it. This function receives 2 parameters. There areParameter Description DaystampOfExpiration The daystamp of expiration. Must be less than 0x1000000. Seed A parameter used in encoding expire daystamp. -
EncodedLicenseCount: This is a 2-bytes-long data. The function
_010Editor::Keygen<_010Editor::KeyType::Base>::EncodeLicenseCount
in_010EditorKeygen.hpp
can calulate it. This function receives only 1 parameter.Parameter Description DesiredLicenseCount The license count your want. Must be Must be 1~1000.
Evaluation
key is generated by 8-bytes-long data. To make it clear, I use
unsigned char data[8];
to represent the 8-bytes-long data.
Evaluation
key cannot make your 010Editor become registered version. It can only extend your 010Editor's trial period.
-
data[4] ~ data[7] are Checksum and calculated by
CalculateChecksum
function whereIsRegistrationVersion = false
,a3 = 255
andLicenseCount = 1
.utf8_username
is based on your input. -
data[3] must be
0xFC
. It represents the type of key. -
data[0] ~ data[2] are EncodedExpireDaystamp and calculated by
EncodeExpireDate
function whereDaystampOfExpiration
is based on your input andSeed
is Checksum.
Finally, the Evaluation
key is the hex string of data[8]
where 4 hex chars consist of a block and each block is joined by "-"
(hyphen).
VersionLicense
key is also generated by 8-bytes-long data. To make it clear, I use
unsigned char data[8];
to represent the 8-bytes-long data, too.
VersionLicense
key can only be used for specified version or the older. And it does not has time limit.
-
data[4] ~ data[7] are Checksum and calculated by
CalculateChecksum
function whereIsRegistrationVersion = true
,a3 = MajorVersion >= 2 ? 0 : MajorVersion
.LicenseCount
andutf8_username
are based on your input. -
data[3] must be
0x9C
. It represents the type of key. -
data[1] ~ data[2] are based on EncodedLicenseCount, data[7] and data[5]. EncodedLicenseCount can be calculated by
EncodeLicenseCount
function whereDesiredLicenseCount
is based on your input.data[1] = EncodedLicenseCount.bytes[1] ^ data[7]; data[2] = EncodedLicenseCount.bytes[0] ^ data[5];
-
data[0] is based on
MajorVersion
and data[6].data[0] = MajorVersion; data[0] ^= 0xA7; data[0] -= 0x3D; data[0] ^= 0x18; data[0] ^= Password.data[6];
Finally, the VersionLicense
key is the hex string of data[8]
where 4 hex chars consist of a block and each block is joined by "-"
(hyphen).
TimeLicense
key is generated by 10-bytes-long data which is different to Evaluation
and VersionLicense
key. To make it clear, I use
unsigned char data[10];
to represent the 10-bytes-long data.
TimeLicense
key can be used for any kind of version. But it has time limit.
-
data[4] ~ data[7] are Checksum and calculated by
CalculateChecksum
function whereIsRegistrationVersion = true
,a3 = DaystampOfExpiration
.DaystampOfExpiration
,LicenseCount
andutf8_username
are based on your input. -
data[0], data[8] ~ data[9] are based on EncodedExpireDaystamp and data[4] ~ data[6]. EncodedExpireDaystamp can be calculated by
EncodeExpireDate
function whereSeed = 0x5B8C27
andDaystampOfExpiration
is based on your input.data[0] = EncodedExpireDaystamp.bytes[0] ^ data[6]; data[8] = EncodedExpireDaystamp.bytes[1] ^ data[4]; data[9] = EncodedExpireDaystamp.bytes[2] ^ data[5];
-
data[3] must be
0xAC
. It represents the type of key. -
data[1] ~ data[2] are based on EncodedLicenseCount, data[7] and data[5]. EncodedLicenseCount can be calculated by
EncodeLicenseCount
function whereDesiredLicenseCount
is based on your input.data[1] = EncodedLicenseCount.bytes[1] ^ data[7]; data[2] = EncodedLicenseCount.bytes[0] ^ data[5];
Finally, the TimeLicense
key is the hex string of data[10]
where 4 hex chars consist of a block and each block is joined by "-"
(hyphen).
In console:
cd cpp
g++ -std=c++11 main.cpp -o 010Editor-keygen.exe
Thanks for improvement from @DeltaFoX
Usage:
010Editor-keygen.exe <your name> <year> <month> <day> <numbers of user>
NOTICE:
-
<your name>
should be English only, otherwise it would cause error. -
<year> <month> <day>
represent expire date. -
<number of user>
represents license count. It can be 1 to 1000.
Example:
C:\Users\DoubleSine\Github\010Editor-keygen\cpp>010Editor-keygen.exe DoubleLabyrinth 2106 2 8 1
2383-22AC-854A-A21D-5CDF
E:\Github\010Editor-keygen\cpp>
NOTICE:
This key generated will expired after 2106-02-08.
- Add an item in
hosts
127.0.0.1 www.sweetscape.com
-
Run
server.py
-
Go to 010Editor and activate again.