Esempio n. 1
0
    def decode(self, data):
        data = self.maple_aes(data, self.receive)
        self.decodeUpdate()

        # Maple Custom Decryption
        for j in range(1, 7):
            remember = 0
            data_length = len(data) & 0xFF
            next_remember = 0
            if j % 2 == 0:
                for i in xrange(len(data)):
                    cur = data[i]
                    cur -= 0x48
                    cur = ~cur & 0xFF
                    cur = BitUtils.roll_left(cur, data_length & 0xFF)
                    next_remember = cur
                    cur ^= remember
                    remember = next_remember
                    cur -= data_length
                    cur = BitUtils.roll_right(cur, 3)
                    data[i] = cur
                    data_length -= 1
            else:
                for i in reversed(xrange(len(data))):
                    cur = data[i]
                    cur = BitUtils.roll_left(cur, 3)
                    cur ^= 0x13
                    next_remember = cur
                    cur ^= remember
                    remember = next_remember
                    cur -= data_length
                    cur = BitUtils.roll_right(cur, 4)
                    data[i] = cur
                    data_length -= 1

        return struct.pack("<%sB" % len(data), data)
Esempio n. 2
0
    def encode(self, data):
        header = self.get_packet_header(len(data))
        # Maple custom encryption
        for j in xrange(0, 6):
            remember = 0
            data_length = len(data) & 0xFF
            if j % 2 == 0:
                for i in xrange(len(data)):
                    cur = data[i]
                    cur = BitUtils.roll_left(cur, 3)
                    cur += data_length
                    cur ^= remember
                    remember = cur
                    cur = BitUtils.roll_right(cur, data_length & 0xFF)
                    cur = ~cur & 0xFF
                    cur += 0x48
                    data_length -= 1
                    data[i] = cur
            else:
                for i in reversed(xrange(len(data))):
                    cur = data[i]
                    cur = BitUtils.roll_left(cur, 4)
                    cur += data_length
                    cur ^= remember
                    remember = cur
                    cur ^= 0x13
                    cur = BitUtils.roll_right(cur, 3)
                    data_length -= 1
                    data[i] = cur

        print "After custom ", data

        data = self.maple_aes(data, self.send)
        print "After aes ", data
        self.encodeUpdate()
        return header + data