i have one but it's for AuthProtocol
that's it
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Cryptography
{
/// <summary>
/// AuthCryptographer
/// Posted by unknownone
/// http://www.elitepvpers.com/forum/co2-programming/200047-new-login-packet-client-5089-a.html#post1760129
/// </summary>
public class AuthProtocolCryptographer
{
internal class CryptCounter
{
UInt16 m_Counter = 0;
public byte Key2
{
get { return (byte)(m_Counter >> 8); }
}
public byte Key1
{
get { return (byte)(m_Counter & 0xFF); }
}
public void Increment()
{
m_Counter++;
}
}
private CryptCounter _decryptCounter;
private CryptCounter _encryptCounter;
private byte[] _cryptKey1;
private byte[] _cryptKey2;
private bool Client;
public AuthProtocolCryptographer(bool Client)
{
this.Client = Client;
_decryptCounter = new CryptCounter();
_encryptCounter = new CryptCounter();
_cryptKey1 = new byte[0x100];
_cryptKey2 = new byte[0x100];
byte i_key1 = 0x9D;
byte i_key2 = 0x62;
for (int i = 0; i < 0x100; i++)
{
_cryptKey1[i] = i_key1;
_cryptKey2[i] = i_key2;
i_key1 = (byte)((0x0F + (byte)(i_key1 * 0xFA)) * i_key1 + 0x13);
i_key2 = (byte)((0x79 - (byte)(i_key2 * 0x5C)) * i_key2 + 0x6D);
}
}
public void Encrypt(byte[] buffer)
{
if(Client)
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)(_cryptKey1[_encryptCounter.Key1]);
buffer[i] ^= (byte)(_cryptKey2[_encryptCounter.Key2]);
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)0xAB;
_encryptCounter.Increment();
}
else
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)0xAB;
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)(_cryptKey1[_encryptCounter.Key1]);
buffer[i] ^= (byte)(_cryptKey2[_encryptCounter.Key2]);
_encryptCounter.Increment();
}
}
public void Decrypt(byte[] buffer)
{
if (Client)
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)(_cryptKey2[_decryptCounter.Key2]);
buffer[i] ^= (byte)(_cryptKey1[_decryptCounter.Key1]);
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)0xAB;
_decryptCounter.Increment();
}
else
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)0xAB;
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)(_cryptKey2[_decryptCounter.Key2]);
buffer[i] ^= (byte)(_cryptKey1[_decryptCounter.Key1]);
_decryptCounter.Increment();
}
}
}
}







