CLIENT CRYPTOGRAPHY

10/28/2013 17:56 Sm•ke#1
C++ - CLIENT - LOGIN

Code:
// RETURN A RANDOM NUMBER
int Random(int start, int end) { return rand()%(end-start)+start; }
 
// RETURN ENCRYPTED PASSWORD
std::string pwEncrypt(std::string password)
{
        const unsigned char secondtable[] = { 0x2E, 0x2A, 0x17, 0x4F, 0x20, 0x24, 0x47, 0x11, 0x5B, 0x37, 0x53,
                                          0x43, 0x15, 0x34, 0x45, 0x25, 0x4B, 0x1D, 0x2F, 0x58, 0x2B, 0x32, 0x63 };
                                                                                 
        std::string hex, temp;
        std::stringstream ss;
       
        short pos = Random(0, 23);
        char low, high;
       
        for(unsigned int i = 0; i < password.size(); i++)
                ss << std::uppercase << std::hex << (int)password[i];
       
        temp += ss.str();
        ss.str("");
       
        ss << std::uppercase << std::hex << (int)secondtable[Random(0, 23)];
       
        for(unsigned int i = 0; i < temp.size(); i += 2)
        {
                high = secondtable[pos] & 0xF;
                low = (secondtable[pos] & 0xF0) >> 4;
               
                ss << std::uppercase << std::hex << (int)low;
                ss << std::uppercase << temp[i];
                ss << std::uppercase << std::hex << (int)high;
                ss << std::uppercase << temp[i + 1];
               
                pos == 22 ? pos = 0 : pos++;
        }
       
        return ss.str();
}
 
// RETURN ENCRYPTED AUTHENTICATION PACKET
std::string Encrypt(std::string str)
{
        std::string str_enc;
        for(unsigned int i = 0; i < str.size(); i++)
                str_enc += (str[i] ^ 0xC3) + 0xF; }
        return str_enc += 0xD8;
}
 
// RETURN DECRYPTED AUTHENTICATION RESPONSE ( SERVERS/CHANNELS )
std::string Decrypt(std::string str)
{
        std::string str_dec;
        for(unsigned int i = 0; i < str.size(); i++)
                str_dec += str[i] - 0xF;
        return str_dec.substr(0, str_dec.size() - 1);
}
C++ - CLIENT - GAME

Code:
std::string sessionEncrypt(std::string identifier, std::string session)
{
        const unsigned char table[] = { 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C,
                                        0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C,
                                        0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C,
                                        0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C,
                                        0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C,
                                        0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC,
                                        0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC,
                                        0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC,
                                        0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
                                        0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC };
       
        std::string str_enc;
        str_enc += 0x9A;
       
        std::stringstream ss;
       
        ss << identifier[0] << identifier[1];
        str_enc += table[atoi(ss.str().c_str())];
        ss.str("");
       
        ss << identifier[2] << identifier[3];
        str_enc += 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 += table[atoi(ss.str().c_str())];
        ss.str("");
       
        ss << session[2] << session[3];
        str_enc += 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;
}
C++ - CLIENT - EXAMPLE

Code:
sessionEncrypt("53061", "26705")
PHP - CLIENT - LOGIN

Code:
// encrypt 'NoS0575..' packet
function packet_enc($packet)
{
    $str_enc = "";
    for($i = 0; $i < strlen($packet); $i++)
        $str_enc .= chr((ord($packet[$i])^195) + 15);
    return $str_enc .= chr(216);
}

// encrypt password of login
function password_enc($password)
{
    $pos = rand(0, 22);
    $str_hex = strtoupper(ToHex($password));
    $secondtable = array(46, 42, 23, 79, 32, 36, 71, 17, 91, 55, 83, 67, 21, 52, 69, 37, 75, 29, 47, 88, 43, 50, 99);
    $pw_enc = strtoupper(ToHex(chr($secondtable[$pos])));
    for($i = 0; $i < strlen($str_hex); $i += 2)
    {
        $pw_enc .= strtoupper(ToHex(chr(($secondtable[$pos] & 240) >> 4)));
        $pw_enc .= $str_hex[$i];
        $pw_enc .= strtoupper(ToHex(chr($secondtable[$pos] & 15)));
        $pw_enc .= $str_hex[$i + 1];
        $pos == 22 ? $pos = 0 : $pos++;
    }
    return $pw_enc;
}

// decrypt response received from server
function packet_dec($packet)
{
    $str_dec = "";
    for($i = 0; $i < strlen($packet); $i++)
        $str_dec .= chr(ord($packet[$i]) - 15);
    return $str_dec .= chr(25);
}
PHP - CLIENT - GAME

Code:
<?php
    function sessionEncrypt($identifier, $session)
    {
        $table = array(  83,  84,  85,  86,  87,  88,  89,  90,  91,  92,
                         99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
                        115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
                        131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
                        147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
                        163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
                        179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
                        195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
                        211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
                        227, 228, 229, 230, 231, 232, 233, 234, 235, 236 );
        
        $str_enc = chr(154); // 0x9A
        
        $temp = $identifier[0].$identifier[1];
        $str_enc .= chr($table[(int)$temp]); // example --> 0xA6
        $temp = $identifier[2].$identifier[3];
        $str_enc .= chr($table[(int)$temp]); // example --> 0x84
        
        switch((int)$identifier[4])
        {
            case 0:
                $str_enc .=  chr(80); // 0x50
                break;
            case 1:
                $str_enc .=  chr(96); // 0x60 <-- example
                break;
            case 2:
                $str_enc .= chr(112); // 0x70
                break;
            case 3:
                $str_enc .= chr(128); // 0x80
                break;
            case 4:
                $str_enc .= chr(144); // 0x90
                break;
            case 5:
                $str_enc .= chr(160); // 0xA0
                break;
            case 6:
                $str_enc .= chr(176); // 0xB0
                break;
            case 7:
                $str_enc .= chr(192); // 0xC0
                break;
            case 8:
                $str_enc .= chr(208); // 0xD0
                break;
            case 9:
                $str_enc .= chr(224); // 0xE0
                break;
        }
        
        $temp = $session[0].$session[1];
        $str_enc .= chr($table[(int)$temp]); // example --> 0x64
        $temp = $session[2].$session[3];
        $str_enc .= chr($table[(int)$temp]); // example --> 0x86
        
        switch((int)$session[4])
        {
            case 0:
                $str_enc .=  chr(79); // 0x4F
                break;
            case 1:
                $str_enc .=  chr(95); // 0x5F
                break;
            case 2:
                $str_enc .= chr(111); // 0x6F
                break;
            case 3:
                $str_enc .= chr(127); // 0x7F
                break;
            case 4:
                $str_enc .= chr(143); // 0x8F
                break;
            case 5:
                $str_enc .= chr(159); // 0x9F <-- example
                break;
            case 6:
                $str_enc .= chr(175); // 0xAF
                break;
            case 7:
                $str_enc .= chr(191); // 0xBF
                break;
            case 8:
                $str_enc .= chr(207); // 0xCF
                break;
            case 9:
                $str_enc .= chr(223); // 0xDF
                break;
        }
        
        return $str_enc .= chr(14);
    }
    
    // 54321 = identifier
    // 12345 = session
    $encryptedSession = sessionEncrypt("54321", "12345");
?>
For new updates i update this thread, so nobody can say that i open 1 thread for 1 function :)
10/28/2013 17:58 Nocracks1#2
Sorry for the dumb question but what i can do with it?
10/28/2013 18:00 Sm•ke#3
A custom client for example or a bot with packets :)

i use it for my bot only for say to u..
04/07/2016 19:22 lika85#4
Can i make bot running on PC or website without NT client? Its easy to send packets of idk go somewhere with this code? If yes, can u give me some example how to do it?
04/07/2016 19:54 IceTrailer#5
Quote:
Originally Posted by lika85 View Post
Can i make bot running on PC or website without NT client? Its easy to send packets of idk go somewhere with this code? If yes, can u give me some example how to do it?
Yes ONE can do this. But if you have to ask after getting an example, YOU can not.

Keyword: Clientless Bot.


btw thanks for pushing ..
04/07/2016 20:07 Pumba98#6
Quote:
Originally Posted by lika85 View Post
Can i make bot running on PC or website without NT client? Its easy to send packets of idk go somewhere with this code? If yes, can u give me some example how to do it?
One (or two) are in Dev
[Only registered and activated users can see links. Click Here To Register...]
04/08/2016 10:56 lika85#7
I cant found sending packet to server in this post so this is the example what i need, i try to find somethink about sending packets in php..

I found how to send login packet to nostale server but i am ill so i am on ntb and i havnt got nostale here so i cannot try it.. Now i am finding port to CZ server.

Ok login is fine, but server returns me NsTeST 63518 79.110.84.41:4014:0:1.5.Aeros 79.110.84.41:4013:0:1.4.Aeros 79.110.84.41:4012:0:1.3.Aeros 79.110.84.41:4011:0:1.2.Aeros 79.110.84.41:4010:3:1.1.Aeros -1:-1:-1:10000.10000.1 and i cant connect to that servers (79.110.84.41:4014) always it fails.

OK so connecting is working, now i stop before choosing server, i send packet and no response come, i think its becouse i use login functions. What do this session encrypt function? How can i use it? And where can i find that parametres? Sry for bad english and stupid questions.