Code:
// return an array with encrypted bytes
std::vector<std::string> encryptedBytes(int num)
{
std::vector<std::string> temp;
std::stringstream ss;
for (int i = 0, j = 0; i <= num; i++)
{
if (i % 10 == 0 && i != 0)
{
ss << std::uppercase << std::hex << 83 + j + 6;
j += 7;
}
else
{
ss << std::uppercase << std::hex << 83 + j;
j++;
}
temp.push_back(ss.str());
ss.str("");
}
return temp;
}
// encrypt session packet < identifier > < session >
std::string sessionEncrypt(std::string identifier, std::string session)
{
std::vector<std::string> table = encryptedBytes(99);
std::string str_enc;
str_enc += 0x9A;
std::stringstream ss;
ss << identifier[0] << identifier[1];
str_enc += toString(table[atoi(ss.str().c_str())]);
ss.str("");
ss << identifier[2] << identifier[3];
str_enc += toString(table[atoi(ss.str().c_str())]);
ss.str("");
ss << identifier[4];
switch (atoi(ss.str().c_str()))
{
case 0:
str_enc += 0x50;
break;
case 1:
str_enc += 0x60;
break;
case 2:
str_enc += 0x70;
break;
case 3:
str_enc += 0x80;
break;
case 4:
str_enc += 0x90;
break;
case 5:
str_enc += 0xA0;
break;
case 6:
str_enc += 0xB0;
break;
case 7:
str_enc += 0xC0;
break;
case 8:
str_enc += 0xD0;
break;
case 9:
str_enc += 0xE0;
break;
}
ss.str("");
ss << session[0] << session[1];
str_enc += toString(table[atoi(ss.str().c_str())]);
ss.str("");
ss << session[2] << session[3];
str_enc += toString(table[atoi(ss.str().c_str())]);
ss.str("");
ss << session[4];
switch (atoi(ss.str().c_str()))
{
case 0:
str_enc += 0x4F;
break;
case 1:
str_enc += 0x5F;
break;
case 2:
str_enc += 0x6F;
break;
case 3:
str_enc += 0x7F;
break;
case 4:
str_enc += 0x8F;
break;
case 5:
str_enc += 0x9F;
break;
case 6:
str_enc += 0xAF;
break;
case 7:
str_enc += 0xBF;
break;
case 8:
str_enc += 0xCF;
break;
case 9:
str_enc += 0xDF;
break;
}
ss.str("");
return str_enc += 0x0E;
}
Code:
std::string toHex(std::string str)
{
std::stringstream ss;
for (unsigned int i = 0; i < str.size(); i++)
ss << std::uppercase << std::hex << std::setw(2) << std::setfill('0') << (int)(unsigned char)str[i] << " ";
return ss.str();
}
std::string toString(const std::string &input)
{
static const char* const lut = "0123456789ABCDEF";
size_t len = input.length();
if (len & 1) throw std::invalid_argument("odd length");
std::string output;
output.reserve(len / 2);
for (size_t i = 0; i < len; i += 2)
{
char a = input[i];
const char* p = std::lower_bound(lut, lut + 16, a);
if (*p != a) throw std::invalid_argument("not a hex digit");
char b = input[i + 1];
const char* q = std::lower_bound(lut, lut + 16, b);
if (*q != b) throw std::invalid_argument("not a hex digit");
output.push_back(((p - lut) << 4) | (q - lut));
}
return output;
}
Code:
sessionEncrypt("53061", "26705")
PS. Session encrypter isn't complete 100% but only a fast function, work with an identifier of 5 characters and session of 5 character, no + no -






