Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static byte[] DecodeMythicRC4Packet(byte[] buf, byte[] sbox)
- {
- if (buf == null) return null;
- if (sbox == null) return null;
- byte[] tmpsbox = new byte[256];
- Array.Copy(sbox, 0, tmpsbox, 0, sbox.Length);
- byte i = 0;
- byte j = 0;
- ushort len = (ushort)((buf[0] << 8) | buf[1] + 10); //+10 byte for packet#,session,param,code,checksum
- int k;
- for (k = (len / 2) + 2; k < len + 2; k++)
- {
- i++;
- byte tmp = tmpsbox[i];
- j += tmp;
- tmpsbox[i] = tmpsbox[j];
- tmpsbox[j] = tmp;
- byte xorKey = tmpsbox[(byte)(tmpsbox[i] + tmpsbox[j])];
- buf[k] ^= xorKey;
- j += buf[k];
- }
- for (k = 2; k < (len / 2) + 2; k++)
- {
- i++;
- byte tmp = tmpsbox[i];
- j += tmp;
- tmpsbox[i] = tmpsbox[j];
- tmpsbox[j] = tmp;
- byte xorKey = tmpsbox[(byte)(tmpsbox[i] + tmpsbox[j])];
- buf[k] ^= xorKey;
- j += buf[k];
- }
- return buf;
- }
- //From DOL
- public static byte[] EncodeMythicRC4Packet(byte[] buf, byte[] sbox, bool udpPacket)
- {
- if (buf == null) return null;
- if (sbox == null) return null;
- byte[] tmpsbox = new byte[256];
- Array.Copy(sbox, 0, tmpsbox, 0, sbox.Length);
- byte i = 0;
- byte j = 0;
- ushort len = (ushort)((buf[0] << 8) | buf[1]);
- len += 1; // +1 byte for packet code
- if (udpPacket)
- len += 2; //+2 byte for packet-count
- int k;
- for (k = (len / 2) + 2; k < len + 2; k++)
- {
- i++;
- byte tmp = tmpsbox[i];
- j += tmp;
- tmpsbox[i] = tmpsbox[j];
- tmpsbox[j] = tmp;
- byte xorKey = tmpsbox[(byte)(tmpsbox[i] + tmpsbox[j])];
- j += buf[k];
- buf[k] ^= xorKey;
- }
- for (k = 2; k < (len / 2) + 2; k++)
- {
- i++;
- byte tmp = tmpsbox[i];
- j += tmp;
- tmpsbox[i] = tmpsbox[j];
- tmpsbox[j] = tmp;
- byte xorKey = tmpsbox[(byte)(tmpsbox[i] + tmpsbox[j])];
- j += buf[k];
- buf[k] ^= xorKey;
- }
- return buf;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement