Beispiel #1
0
    def test_paper_example(self):
        alice = Participant("Alice", "A")
        bob = Participant("Bob", "B")
        participants = [alice, bob]
        msg1 = Message.from_plain_hex_str("aabb1234")
        msg1.participant = alice
        msg2 = Message.from_plain_hex_str("aabb6789")
        msg2.participant = alice
        msg3 = Message.from_plain_hex_str("bbaa4711")
        msg3.participant = bob
        msg4 = Message.from_plain_hex_str("bbaa1337")
        msg4.participant = bob

        protocol = ProtocolAnalyzer(None)
        protocol.messages.extend([msg1, msg2, msg3, msg4])
        #self.save_protocol("paper_example", protocol)

        bitvectors = FormatFinder.get_bitvectors_from_messages(
            protocol.messages)
        hexvectors = FormatFinder.get_hexvectors(bitvectors)
        address_engine = AddressEngine(hexvectors,
                                       participant_indices=[
                                           participants.index(msg.participant)
                                           for msg in protocol.messages
                                       ])
    def test_sync_word_finding_varying_message_length(self):
        hex_messages = [
            "aaaa9a7d0f1337471100009a44ebdd13517bf9",
            "aaaa9a7d4747111337000134a4473c002b909630b11df37e34728c79c60396176aff2b5384e82f31511581d0cbb4822ad1b6734e2372ad5cf4af4c9d6b067e5f7ec359ec443c3b5ddc7a9e",
            "aaaa9a7d0f13374711000205ee081d26c86b8c",
            "aaaa9a7d474711133700037cae4cda789885f88f5fb29adc9acf954cb2850b9d94e7f3b009347c466790e89f2bcd728987d4670690861bbaa120f71f14d4ef8dc738a6d7c30e7d2143c267",
            "aaaa9a7d0f133747110004c2906142300427f3"
        ]

        messages = [
            Message.from_plain_hex_str(hex_msg) for hex_msg in hex_messages
        ]
        for i in range(1, len(messages)):
            messages[i].message_type = messages[0].message_type

        ff = FormatFinder(messages)
        ff.run()

        self.assertEqual(len(ff.message_types), 1)
        preamble = ff.message_types[0].get_first_label_with_type(
            FieldType.Function.PREAMBLE)
        self.assertEqual(preamble.start, 0)
        self.assertEqual(preamble.length, 16)

        sync = ff.message_types[0].get_first_label_with_type(
            FieldType.Function.SYNC)
        self.assertEqual(sync.start, 16)
        self.assertEqual(sync.length, 16)
    def test_multiple_sync_words(self):
        hex_messages = [
            "aaS1234",
            "aaScafe",
            "aaSdead",
            "aaSbeef",
        ]

        for i in range(1, 256):
            messages = []
            sync = "{0:02x}".format(i)
            if sync.startswith("a"):
                continue

            for msg in hex_messages:
                messages.append(
                    Message.from_plain_hex_str(msg.replace("S", sync)))

            for i in range(1, len(messages)):
                messages[i].message_type = messages[0].message_type

            ff = FormatFinder(messages)
            ff.run()

            self.assertEqual(len(ff.message_types), 1, msg=sync)

            preamble = ff.message_types[0].get_first_label_with_type(
                FieldType.Function.PREAMBLE)
            self.assertEqual(preamble.start, 0, msg=sync)
            self.assertEqual(preamble.length, 8, msg=sync)

            sync = ff.message_types[0].get_first_label_with_type(
                FieldType.Function.SYNC)
            self.assertEqual(sync.start, 8, msg=sync)
            self.assertEqual(sync.length, 8, msg=sync)