Esempio n. 1
0
        public static Packet DecryptPacket(this Packet pkt)
        {
            byte[] buf = new byte[pkt.DecSpace];
            byte counter = 0;
            if (MU_DecodeC3C4(buf, 0, pkt, pkt.ToServer ? dec1_keys : dec2_keys, ref counter))
            {
                Packet dec = new Packet(buf, 0, pkt.ToServer, counter);
                if (pkt.ToServer)
                    dec.DecodeC1C2();
                return dec;
            }

            return null;
        }
Esempio n. 2
0
        public static Packet EncryptPacket(this Packet pkt, Packet des_pkt = null)
        {
            if (pkt.ToServer)
                pkt.EncodeC1C2();

            if (des_pkt == null)
            {
                byte[] buf = new byte[pkt.EncSpace];
                if (MU_EncodeC3C4(buf, 0, pkt, pkt.ToServer ? enc1_keys : enc2_keys, pkt.Counter))
                    return new Packet(buf, 0, pkt.ToServer, pkt.Counter);
            }
            else
                if (MU_EncodeC3C4(des_pkt.Source, des_pkt.Index, pkt, pkt.ToServer ? enc1_keys : enc2_keys, pkt.Counter))
                    return des_pkt;

            return null;
        }
Esempio n. 3
0
 /// <summary> 
 /// encrypt c3/c4 packet 
 /// </summary> 
 static bool MU_EncodeC3C4(byte[] outbuffer, int outbuf, Packet pkt, uint[] dec_dat, byte enc_key)
 {
     byte hdrSize = pkt.HeaderSize;
     byte hdr = pkt.Header;
     byte tmp = pkt.Source[hdrSize - 1];
     ushort enc_len = 0;
     ushort size = pkt.Size;
     pkt.Source[hdrSize - 1] = enc_key;
     bool rs = MU_ForceEncodeC3C4(outbuffer, outbuf + hdrSize, ref enc_len, pkt.Source, pkt.Index + hdrSize - 1, (ushort)(size - hdrSize + 1), dec_dat);
     pkt.Source[hdrSize - 1] = tmp;
     if (rs == true)
     {
         outbuffer[outbuf] = (byte)(hdr + 2);
         enc_len += (ushort)hdrSize;
         if (hdrSize == 2)
             outbuffer[outbuf + 1] = (byte)enc_len;
         else
         {
             outbuffer[outbuf + 1] = (byte)((enc_len & ~0x00FF) >> 8);
             outbuffer[outbuf + 2] = (byte)(enc_len & ~0xFF00);
         }
     }
     return rs;
 }
Esempio n. 4
0
 /// <summary> 
 /// encode c1/c2 packet 
 /// </summary> 
 static void MU_EncodeC1C2(Packet packet)
 {
     MU_ForceEncodeC1C2(packet.Source, packet.ContentIndex, packet.ContentSize, packet.HeaderSize);
 }
Esempio n. 5
0
 /// <summary> 
 /// decrypt c3/c4 packet 
 /// </summary> 
 static bool MU_DecodeC3C4(byte[] outbuffer, int outbuf, Packet pkt, uint[] dec_dat, ref byte dec_key)
 {
     byte hdrSize = pkt.HeaderSize;
     byte hdr = pkt.Header;
     ushort dec_size = 0;
     if (MU_ForceDecodeC3C4(outbuffer, outbuf + hdrSize - 1, ref dec_size, pkt.Source, pkt.ContentIndex, pkt.ContentSize, dec_dat) == false)
         return false;// decryption fails
     dec_size += (ushort)(hdrSize - 1);
     dec_key = outbuffer[outbuf + hdrSize - 1];
     outbuffer[outbuf] = (byte)(hdr - 2);
     if (hdrSize == 2)
         outbuffer[outbuf + 1] = (byte)dec_size;
     else
     {
         outbuffer[outbuf + 1] = (byte)((dec_size & ~0x00FF) >> 8);
         outbuffer[outbuf + 2] = (byte)(dec_size & ~0xFF00);
     }
     return true;// decrypt success
 }
Esempio n. 6
0
 static int MuPacketEncSpace(Packet pkt)
 {
     ushort x = (ushort)(pkt.ContentSize + 1);
     return (((x / 8) + (((x % 8) > 0) ? 1 : 0)) * 11) + pkt.HeaderSize;
 }
Esempio n. 7
0
 static int MuPacketDecSpace(Packet pkt)
 {
     return ((pkt.ContentSize / 11) * 8) + pkt.HeaderSize - 1;
 }