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, 1970is 1 andJun. 23th, 2018is 17705. -
Checksum: I'm not sure if it can be called
checksum. But I do not have a better word to describe it.Checksumis a 4-bytes-long data and is related with some parameters. You can go to the definition of function_010Editor::Keygen<_010Editor::KeyType::Base>::CalculateChecksumin_010EditorKeygen.hppto see how to calculate it. The functionCalculateChecksumreceives 4 parameters. There areParameter Description utf8_username The UTF-8 bytes of username that the key licensed to. IsRegistrationVersion falseforEvaluationkey 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>::EncodeExpireDatein_010EditorKeygen.hppcan 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>::EncodeLicenseCountin_010EditorKeygen.hppcan 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
CalculateChecksumfunction whereIsRegistrationVersion = false,a3 = 255andLicenseCount = 1.utf8_usernameis based on your input. -
data[3] must be
0xFC. It represents the type of key. -
data[0] ~ data[2] are EncodedExpireDaystamp and calculated by
EncodeExpireDatefunction whereDaystampOfExpirationis based on your input andSeedis 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
CalculateChecksumfunction whereIsRegistrationVersion = true,a3 = MajorVersion >= 2 ? 0 : MajorVersion.LicenseCountandutf8_usernameare 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
EncodeLicenseCountfunction whereDesiredLicenseCountis based on your input.data[1] = EncodedLicenseCount.bytes[1] ^ data[7]; data[2] = EncodedLicenseCount.bytes[0] ^ data[5];
-
data[0] is based on
MajorVersionand 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
CalculateChecksumfunction whereIsRegistrationVersion = true,a3 = DaystampOfExpiration.DaystampOfExpiration,LicenseCountandutf8_usernameare based on your input. -
data[0], data[8] ~ data[9] are based on EncodedExpireDaystamp and data[4] ~ data[6]. EncodedExpireDaystamp can be calculated by
EncodeExpireDatefunction whereSeed = 0x5B8C27andDaystampOfExpirationis 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
EncodeLicenseCountfunction whereDesiredLicenseCountis 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
Just run it.
Example:
E:\Github\010Editor-keygen\cpp>010Editor-keygen.exe
Input your name(English Only): DoubleLabyrinth
47AD-E1AC-D789-D133-2114
E:\Github\010Editor-keygen\cpp>
NOTICE:
This key generated will expired after 2020-06-23. If you want to modify expire date, please modify variables named ExpireYear, ExpireMonth and ExpireDay in main.cpp.