import import_ipynb
import ipynb.fs.defs.librarySignal as s
signály z auta Škoda Karoq 2023
closeKaroq23InputA = """1111111111111111
111111111111111111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010011010100110010110010101101010100101011010011010100110011010101001100110010110010101010110100101011010010110101001100110100101010101101001010101101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010011001010110011010010101010110011001101010101001010101010110101001011001101001100101101010101001100101011010100101010101011001100110101010010101011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011001101010100110101010011010010110101001011010011001100110010101010101101010011010101010101010100101011010011010011001011010011001100110010101010101101010100101"""
closeKaroq23InputB = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011001101010101010100110100101101001100110101010101001010101100110011010011001011001010101100110101001011010101010101001010101011001101010100110100110011001101001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010101010101001010110010110011010101010011001010110011001011001100110010110100101011010100110011001100110100110101001101010100101100110011001101001101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010101001100110100110010101100101010110011001100110011010011001100101011001100101101001100101101010101001101001101001100101010101010110100110011001101"""
closeKaroq23InputC = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010011001101001011001011001101010011001100101101001011001101001011010011001010101011010100101010110011001100110101001101001100101010110100110010101011
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010011010011001011001011010100110011010011010101001101010101010101010100110100101010110101010011010011001010110010110011010011010010101101010100110101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101100110101010011001010110100110011001011001101010011010011010100101010101011001100101010110101001100110010101010110011001101001101010010101011001011001101010011"""
kuforKaroq23InputA = """1111111111111111
1111111111111111111111010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011010011010101010100110100101010101011001010110101010010110011001101001011010010101101010101010011010101010101001011010100101010101100110100110100101100101101001
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011010011010101010010101010110011010010110011010011001011010101001100110011001011010101001010110101001101010100101100101101001101001010110010110010110100110011001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101101001101010101010101010101001100110100101011001100110101001100110010110101001101010100101011010011001100101101001011001101010100110100101101001011001101001011"""
kuforKaroq23InputB = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101101001101010011001011001010110100110011001101010101001100101100101010110100110011010011010100101010110011010011010100110101001101010100110011010011010010101011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011010011010100110101010100110010110010101010101100110010101010110010110101001010101101001101010100101011010010101100101011010011010011001010101010110010110100101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101101001101010011010100101100101101001101001100101100110011010010101010101010110010101011001010101011001010110011010100101100110100101011001101001011001010101011"""
kuforKaroq23InputC = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101101001101010101010010110010101011010011010100101101010011010010101100101100110010110101001011010010110100101101010011001010101010110010110101010011001101010011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011010011010101010100110100110011010010101010101100101100110011001010110100101101010010101101010011010101010101001011001010101011010010110100101011001011010100101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101011010011010101010101001100101010101100110101010011001101010100110010110010110101010101001101010100101010110101010101001010110100110010101011010011001100110100101"""
openKaroq23InputA = """1111111111111111
111111111111111111111101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010011010100110101001100101010101101001101010011010101010100110010101010110010110011010010101101001100110100101010101011010011001010101010101101010101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010011001100110101010010101011010010110011001011010010101101010010110101001010101101001010110010110010110010101011010011010011001011010010110100110011
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010011001010110011001101010101001011010011001101010100110100110010101101010100101101001100110011010011010011001010101100101101010010101010101010101011"""
openKaroq23InputB = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010101010011010010110101001010101011010010101010110100110011001101010011010010101011001011010101001101010010110010101010110010110010101011001010101011
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010101001101010100101010110100101010101101010100110011001101001010101101010100101010110011010011010100101100101101010010110011001010101100110010110011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101010110101010101010011010011001100101101001011001101001100101100110101010011001100110101001010110101001010101010110100110010101010101010101010101010101101010011001"""
openKaroq23InputC = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011001010110101010101010011010010101011010101010011010101010011010100101100110011010011001100110011010101010010101010110100101100101010101011010100101100101011010100110010110010110100110010110101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101010110101010100110011001101001011010101010100101101001101010101001101010101010101001010101011001100110011001011010011001100110011010101001011001011001101010100101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110010101101010101010100110100101010110101010100110101010011010011010010101101010100110011001010101101001010101100110101010101001101001010101101001100110100101100101101001100101101010100110011001"""
signály Škoda Karoq 2018
closeKaroq18InputA = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010100110101010011001101010011001101001010110100101100110100110100110011010101010010101011010010110011010011010101010011010010101010110011001101010100110011010011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101001101010100110011010010101011010011001011010101001010101011001010110100110100101010110010101011001101010101001100110010101101010101001011001010110011001101001
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101001101010100110101001100101100101010110101010101001011010101010010110010110101001011001101010011010011010011001011001100110100110011001010110011001101010010101"""
closeKaroq18InputB = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101001101010101010010101101001100110011010011010100110100101101010011001100101010101010101100110010101011001100110010110101010101001010110100110100110100110101001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010100110101010101001101010101001100101100101100101100110100101010101011001101001010101100101100110010101010101101010011010101010101001010101100101010101100110101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010100110101010101010101010011010100101010101100101100101011001010110010110010110100110011010100101100101011010011001101001011001011001100101011010010110100101011"""
closeKaroq18InputC = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101001101010100110100101010101011010100110010110101010011001010110101001101001011001010110010101010110010110100101101001010101100101101010011010100110101010101001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010100110101010011001011001010101011010101010101001101001011010101001101010101001100101011010101010010101011001010110101001100101101001101001010101101010011010101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101001101010100110010101011001011001010110011001011010011001010110011001010101100110101010010101010101010101010101010110011010101001010110010110011001010110101001"""
kuforKaroq18InputA = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010101010100101010110010110011001010110011001010101010110100110011010011010101001011001010110100101011001100110101001011010010101010101010101011010011001
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010101010010110010101011001101001101001010110100110100101010101011001010110010110101001010110010101100101011001100110101001100101011001100110010110100101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010101010101001010110011001011001010110101001011001100110100110100101011010100101011001011010011010100110010101101001011001101010101010100101011001011001"""
kuforKaroq18InputB = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010100110010110101001100101011001100110011001011001100101010101100110011010100110010110010101010101101010100110100101100101100101010101100101011010011001
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010100110100101010101100101101001100110010101101001010110011001101010100110100110010101011010011001100101011010100101011001011010100101100110100101101001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010101001101010011001101001010101101001101001100101101001010101100101010101100110100101010110101001100101010110101001100110010101010101100110100110011001010110011"""
kuforKaroq18InputC = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010101010011010101010101010011010011001011010010101100101011010011001101010101010100101011001011001010101100110101001010101101010011001010110011001011001011001100101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010101001101010101010100101100110100101011010100110011001011001010110011001100101100101011001100110011001011010100101011001011010101001101001010110011001100110011
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010101001101010101010011010010101011010011010100110101001010101011001010101100101010110011001101001010110010110010110010101101001011010011001010101010110010110011"""
openKaroq18InputA = """10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010100110101010100110010110100110010110011010100110101010100110010110101001011010101010011001010110101010010101101010011001101001011010101001100110100110101001011001
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010011010101010011010011010100110010101010101010110100110011001100101100101010110101010011010101001010101011001011010010101011010101010010110100101101001010101101
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010011010101010011010011010010110100101010110011010100110010110100101011010101001100110100110010101010101100110100101010101101010101010011010101001100101010101011"""
openKaroq18InputB = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010011010101010101001011010101010101001101010101001101010101001101010101010100110011010011001010101010101010110101010011010101001101001100101100101011001010101011
1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010011010101010101001010110010110100101011010101001101010010110101010100110010101101001101010100110100110010101101001010110101001100101010101011001010110100110011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010100110101010101010101001011010101010100101101010101010010110011010101010010101100101101001100101100110101010011001011010100101011010101001101010011001100110011001"""
openKaroq18InputC = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011010011001101010101010011010101010011010101010011010011001101010011001010110100101011010010101011001011010010110011010100110100101101001010110011010010101010110101010100101101010010110100101011
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010100110101010100110100110011001100110100101011010101010101010101001011010010101100101011010100101101001010110100110101001101010100101101010011010011010100101010101
10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110100110011010101010100110101010100110101010100110100101010110100101010110100101100110011010101001100110100101010101011001010110010110011001010101101001100110101010100101010101100101011010010101"""
signály Kia
closeKiaInputA = """0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101001101010101100110101010011010010101010101101010101001101010101001010110100101011010100110011010011001100110010110101010010110011010101001010
0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101001101010101100110101010011010010101010101101010101001101010101001010110100101011010100110011010011001100110010110101010010110011010101001010"""
closeKiaInputB = """0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101001101011001010110101001101001010101011010101010100101100110010101100110100101011010100110011010011001100110010110101010010110011010101001100
0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101001101011001010110101001101001010101011010101010100101100110010101100110100101011010100110011010011001100110010110101010010110011010101001100"""
signály Škoda Oktavia
openOktaviaInputA = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011011011011010100101010101011010101010011010011001100110011001011001101001100110011010010101011001010101101010100101010101011010010101010101101010011010101001010110101001100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101101010101001101001100110011001100101100110100110011001101001010101100101010110101010010101010101101001010101010110101001101010100101011010100110010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110101010100110100110011001100110010110011010011001100110100101010110010101011010101001010101010110100101010101011010100110101010010101101010011"""
openOktaviaInputB = """101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101101010101001101001010110010110100110101010100101101001011010010101100101100110101010100110101010011010101010100101100110011010010101011010100110010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110101010100110100101011001011010011010101010010110100101101001010110010110011010101010011010101001101010101010010110011001101001010101101010011"""
openOktaviaInputC = """101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101100110011010010101011001011001010101101010011001100101011010010110010110011001101010101001101001011001101010100110101010011001010101011010100110010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110011001101001010101100101100101010110101001100110010101101001011001011001100110101010100110100101100110101010011010101001100101010101101010011"""
closeOktaviaInputA = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011011011011010100101010101011001010101011001010110011010100101011001011010101010101010010101101010101001101001011010011001011001010110011001010101100101101001011001100110100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101100101010101100101011001101010010101100101101010101010101001010110101010100110100101101001100101100101011001100101010110010110100101100110011010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110010101010110010101100110101001010110010110101010101010100101011010101010011010010110100110010110010101100110010101011001011010010110011001101"""
closeOktaviaInputB = """1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101011011011011010100101010101011001100110011010011001101001101010101010100110010110011010100110010110010110011001101001011010010101100110101001011001101010100101011001100110100101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101100110011001101001100110100110101010101010011001011001101010011001011001011001100110100101101001010110011010100101100110101010010101100110011010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110011001100110100110011010011010101010101001100101100110101001100101100101100110011010010110100101011001101010010110011010101001010110011001101"""
closeOktaviaInputC = """101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101101101101101010010101010101101010010110010101011010011001100101010110011010010110010110011010101010011001101010011010010101101010011010011001100101101010100101100110011010010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010110110110110101001010101010110101001011001010101101001100110010101011001101001011001011001101010101001100110101001101001010110101001101001100110010110101010010110011001101"""
Analýza: Karoq 2023
openKaroq23A = s.string2list(openKaroq23InputA)
openKaroq23B = s.string2list(openKaroq23InputB)
openKaroq23C = s.string2list(openKaroq23InputC)
kuforKaroq23A = s.string2list(kuforKaroq23InputA)
kuforKaroq23B = s.string2list(kuforKaroq23InputB)
kuforKaroq23C = s.string2list(kuforKaroq23InputC)
closeKaroq23A = s.string2list(closeKaroq23InputA)
closeKaroq23B = s.string2list(closeKaroq23InputB)
closeKaroq23C = s.string2list(closeKaroq23InputC)
print("Škoda Karoq 2023")
print("- open")
s.draw(openKaroq23A)
s.draw(openKaroq23B)
s.draw(openKaroq23C)
print("- kufor")
s.draw(kuforKaroq23A)
s.draw(kuforKaroq23B)
s.draw(kuforKaroq23C)
print("- close")
s.draw(closeKaroq23A)
s.draw(closeKaroq23B)
s.draw(closeKaroq23C)
Škoda Karoq 2023 - open
- kufor
- close
Zistenie: vidíme, že vždy pri prvom stlačení bol vyslaná krátka sekvencia zložená len z 1tiek a následné pri ďalšej sekvencii je na začiatku rad jednotiek. Tento rad sa už v nasledujúcich sekvenciách daného stlačenia neopakuje. Aby sme mohli pokračovať, odstránime prvú sekvenciu len z jednotiek a začiatok jednotiek z nasledovnej sekvencie.
openKaroq23A = s.removeSequence(openKaroq23A, [0])
openKaroq23A = s.removePart(openKaroq23A, 0, 22, [0])
kuforKaroq23A = s.removeSequence(kuforKaroq23A, [0])
kuforKaroq23A = s.removePart(kuforKaroq23A, 0, 22, [0])
closeKaroq23A = s.removeSequence(closeKaroq23A, [0])
closeKaroq23A = s.removePart(closeKaroq23A, 0, 22, [0])
print("- open")
s.draw(openKaroq23A)
s.draw(openKaroq23B)
s.draw(openKaroq23C)
print("- kufor")
s.draw(kuforKaroq23A)
s.draw(kuforKaroq23B)
s.draw(kuforKaroq23C)
print("- close")
s.draw(closeKaroq23A)
s.draw(closeKaroq23B)
s.draw(closeKaroq23C)
- open
- kufor
- close
Môžeme odstrániť aj koniec, kde sa nachádzajú len 0.
print("dĺzka 1. signálu " + str(len(openKaroq23A[0])))
print("dĺžka 2. signálu " + str(len(openKaroq23B[0])))
openKaroq23A = s.removePart(openKaroq23A, 623, len(openKaroq23A[0]), [0, 1, 2])
kuforKaroq23A = s.removePart(kuforKaroq23A, 623, len(kuforKaroq23A[0]), [0, 1, 2])
closeKaroq23A = s.removePart(closeKaroq23A, 623, len(closeKaroq23A[0]), [0, 1, 2])
print("- open")
s.draw(openKaroq23A)
s.draw(openKaroq23B)
s.draw(openKaroq23C)
print("- kufor")
s.draw(kuforKaroq23A)
s.draw(kuforKaroq23B)
s.draw(kuforKaroq23C)
print("- close")
s.draw(closeKaroq23A)
s.draw(closeKaroq23B)
s.draw(closeKaroq23C)
dĺzka 1. signálu 645 dĺžka 2. signálu 623 - open
- kufor
- close
Q: Existuje nejaký pattern a vieme následne získať skutočné dáta?
pattern = s.findPatternMulti(openKaroq23A, openKaroq23B)
fin = s.findMyPattern(pattern)
finA = s.getData(openKaroq23A, fin)
finB = s.getData(openKaroq23B, fin)
print(finA)
print(finB)
[[], [], []] [[], [], []]
A: Zistili sme že neexistuje pattern a už máme skutočné dáta.
Nájdeme identifikátor a separátor a vizualizujeme ich
separatorOpenKaroq23AB, idOpenKaroq23AB = s.findSeparatorId(openKaroq23A, openKaroq23B)
separatorOpenKaroq23BC, idOpenKaroq23BC = s.findSeparatorId(openKaroq23B, openKaroq23C)
separatorOpenKaroq23AC, idOpenKaroq23AC = s.findSeparatorId(openKaroq23A, openKaroq23C)
separatorKuforKaroq23AB, idKuforKaroq23AB = s.findSeparatorId(kuforKaroq23A, kuforKaroq23B)
separatorKuforKaroq23BC, idKuforKaroq23BC = s.findSeparatorId(kuforKaroq23B, kuforKaroq23C)
separatorKuforKaroq23AC, idKuforKaroq23AC = s.findSeparatorId(kuforKaroq23A, kuforKaroq23C)
separatorCloseKaroq23AB, idCloseKaroq23AB = s.findSeparatorId(closeKaroq23A, closeKaroq23B)
separatorCloseKaroq23BC, idCloseKaroq23BC = s.findSeparatorId(closeKaroq23B, closeKaroq23C)
separatorCloseKaroq23AC, idCloseKaroq23AC = s.findSeparatorId(closeKaroq23A, closeKaroq23C)
separatorOpenKaroq23 = []
for i in range(0, len(separatorOpenKaroq23AB)):
if separatorOpenKaroq23AB[i] == separatorOpenKaroq23AC[i] and separatorOpenKaroq23AC[i] == separatorOpenKaroq23BC[i]:
separatorOpenKaroq23.append(separatorOpenKaroq23AB[i])
else:
separatorOpenKaroq23.append(0)
separatorKuforKaroq23 = []
for i in range(0, len(separatorKuforKaroq23AB)):
if separatorKuforKaroq23AB[i] == separatorKuforKaroq23AC[i] and separatorKuforKaroq23AC[i] == separatorKuforKaroq23BC[i]:
separatorKuforKaroq23.append(separatorKuforKaroq23AB[i])
else:
separatorKuforKaroq23.append(0)
separatorCloseKaroq23 = []
for i in range(0, len(separatorCloseKaroq23AB)):
if separatorCloseKaroq23AB[i] == separatorCloseKaroq23AC[i] and separatorCloseKaroq23AC[i] == separatorCloseKaroq23BC[i]:
separatorCloseKaroq23.append(separatorCloseKaroq23AB[i])
else:
separatorCloseKaroq23.append(0)
idOpenKaroq23 = []
for i in range(0, len(idOpenKaroq23AB)):
if idOpenKaroq23AB[i] == idOpenKaroq23AC[i] and idOpenKaroq23AC[i] == idOpenKaroq23BC[i]:
idOpenKaroq23.append(idOpenKaroq23AB[i])
else:
idOpenKaroq23.append(0)
idKuforKaroq23 = []
for i in range(0, len(separatorKuforKaroq23AB)):
if idKuforKaroq23AB[i] == idKuforKaroq23AC[i] and idKuforKaroq23AC[i] == idKuforKaroq23BC[i]:
idKuforKaroq23.append(idKuforKaroq23AB[i])
else:
idKuforKaroq23.append(0)
idCloseKaroq23 = []
for i in range(0, len(idCloseKaroq23AB)):
if idCloseKaroq23AB[i] == idCloseKaroq23AC[i] and idCloseKaroq23AC[i] == idCloseKaroq23BC[i]:
idCloseKaroq23.append(idCloseKaroq23AB[i])
else:
idCloseKaroq23.append(0)
separatorKaroq23 = []
for i in range(0, len(separatorOpenKaroq23)):
if separatorOpenKaroq23[i] == separatorCloseKaroq23[i] and separatorCloseKaroq23[i] == separatorKuforKaroq23[i] and closeKaroq23A[0][i] == openKaroq23A[0][i]:
separatorKaroq23.append(separatorOpenKaroq23[i])
else:
separatorKaroq23.append(0)
idKaroq23 = []
for i in range(0, len(idOpenKaroq23)):
if idOpenKaroq23[i] == idCloseKaroq23[i] and idCloseKaroq23[i] == idKuforKaroq23[i] and closeKaroq23A[0][i] == openKaroq23A[0][i]:
idKaroq23.append(idOpenKaroq23[i])
else:
idKaroq23.append(0)
"""
print(" - open separator")
s.draw([separatorOpenKaroq23])
print(" - open id")
s.draw([idOpenKaroq23])
print(" - kufor separator")
s.draw([separatorKuforKaroq23])
print(" - kufor id")
s.draw([idKuforKaroq23])
print(" - close separator")
s.draw([separatorCloseKaroq23])
print(" - close id")
s.draw([idCloseKaroq23])
"""
print(" - separator")
s.draw([separatorKaroq23])
print(" - id")
s.draw([idKaroq23])
- separator
- id
Nech 467 - 474 je nejaký checksum, keďže je oddelený od zvyšku id bitov a je dlhší, ako iný oddelený zvyšok 477 - 478. Predpokladajme, že 477 - 478 je separátor, keďže id by malo byť spolu a nie oddelene, a naša funkcia neodhalila, že je to separátor.
separatorKaroq23[477] = 1
separatorKaroq23[478] = 1
Nájdeme button bit a vizualizujeme ho. Predpokladáme, že nejaké bity budú vyznačovať otváranie a zatváranie a pre kufor budú iné bity.
buttonOpenKuforKaroq23A = s.findButtonBit(kuforKaroq23A, openKaroq23A)
buttonOpenCloseKaroq23A = s.findButtonBit(openKaroq23A, closeKaroq23A)
buttonKuforCloseKaroq23A = s.findButtonBit(kuforKaroq23A, closeKaroq23A)
buttonOpenKuforKaroq23B = s.findButtonBit(kuforKaroq23B, openKaroq23B)
buttonOpenCloseKaroq23B = s.findButtonBit(openKaroq23B, closeKaroq23B)
buttonKuforCloseKaroq23B = s.findButtonBit(kuforKaroq23B, closeKaroq23B)
buttonOpenKuforKaroq23C = s.findButtonBit(kuforKaroq23C, openKaroq23C)
buttonOpenCloseKaroq23C = s.findButtonBit(openKaroq23C, closeKaroq23C)
buttonKuforCloseKaroq23C = s.findButtonBit(kuforKaroq23C, closeKaroq23C)
"""
s.draw([buttonOpenKuforKaroq23A])
s.draw([buttonOpenCloseKaroq23A])
s.draw([buttonKuforCloseKaroq23A])
s.draw([buttonOpenKuforKaroq23B])
s.draw([buttonOpenCloseKaroq23B])
s.draw([buttonKuforCloseKaroq23B])
s.draw([buttonOpenKuforKaroq23C])
s.draw([buttonOpenCloseKaroq23C])
s.draw([buttonKuforCloseKaroq23C])
"""
buttonKaroq23 = []
for i in range(0, len(buttonOpenCloseKaroq23A)):
if buttonOpenCloseKaroq23A[i] == buttonOpenCloseKaroq23B[i] and buttonOpenCloseKaroq23B[i] == buttonOpenCloseKaroq23C[i]:
buttonKaroq23.append(buttonOpenCloseKaroq23A[i])
else:
buttonKaroq23.append(0)
buttonKaroq23KA = []
for i in range(0, len(buttonOpenKuforKaroq23A)):
if buttonOpenKuforKaroq23A[i] == buttonKuforCloseKaroq23A[i]:
buttonKaroq23KA.append(buttonOpenKuforKaroq23A[i])
else:
buttonKaroq23KA.append(0)
buttonKaroq23KB = []
for i in range(0, len(buttonOpenKuforKaroq23B)):
if buttonOpenKuforKaroq23B[i] == buttonKuforCloseKaroq23B[i]:
buttonKaroq23KB.append(buttonOpenKuforKaroq23B[i])
else:
buttonKaroq23KB.append(0)
buttonKaroq23KC = []
for i in range(0, len(buttonOpenKuforKaroq23C)):
if buttonOpenKuforKaroq23C[i] == buttonKuforCloseKaroq23C[i]:
buttonKaroq23KC.append(buttonOpenKuforKaroq23C[i])
else:
buttonKaroq23KC.append(0)
buttonKaroq23K = []
for i in range(0, len(buttonKaroq23KA)):
if buttonKaroq23KA[i] == buttonKaroq23KB[i] and buttonKaroq23KB[i] == buttonKaroq23KC[i]:
buttonKaroq23K.append(buttonKaroq23KA[i])
else:
buttonKaroq23K.append(0)
print(" - button bit Open / Close")
s.draw([buttonKaroq23])
print(" - button bit kufor")
s.draw([buttonKaroq23K])
- button bit Open / Close
- button bit kufor
Po bližšej analýze button bitov pre Open / Close zisťujeme, že by dané bity mohli reprezentovať aj button pre kufor, keďže pri open a close sú bity navzájom negované a pri kufri nadobúdajú bity iné hodnoty - nie negované.
partOpenKaroq23A = s.getPart(openKaroq23A, 463, 466, [0, 1, 2])
partOpenKaroq23B = s.getPart(openKaroq23A, 463, 466, [0, 1, 2])
partOpenKaroq23C = s.getPart(openKaroq23A, 463, 466, [0, 1, 2])
partKuforKaroq23A = s.getPart(kuforKaroq23A, 463, 466, [0, 1, 2])
partKuforKaroq23B = s.getPart(kuforKaroq23A, 463, 466, [0, 1, 2])
partKuforKaroq23C = s.getPart(kuforKaroq23A, 463, 466, [0, 1, 2])
partCloseKaroq23A = s.getPart(closeKaroq23A, 463, 466, [0, 1, 2])
partCloseKaroq23B = s.getPart(closeKaroq23A, 463, 466, [0, 1, 2])
partCloseKaroq23C = s.getPart(closeKaroq23A, 463, 466, [0, 1, 2])
print(" - čast Open")
s.draw(partOpenKaroq23A)
s.draw(partOpenKaroq23B)
s.draw(partOpenKaroq23C)
print(" - čast Close")
s.draw(partCloseKaroq23A)
s.draw(partCloseKaroq23B)
s.draw(partCloseKaroq23C)
print(" - čast Kufor")
s.draw(partKuforKaroq23A)
s.draw(partKuforKaroq23B)
s.draw(partKuforKaroq23C)
- čast Open
- čast Close
- čast Kufor
Vizualizujeme zistené informácie.
s.drawAdv(openKaroq23A, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(openKaroq23B, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(openKaroq23C, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(kuforKaroq23A, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(kuforKaroq23B, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(kuforKaroq23C, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(closeKaroq23A, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(closeKaroq23B, buttonKaroq23, separatorKaroq23, idKaroq23)
s.drawAdv(closeKaroq23C, buttonKaroq23, separatorKaroq23, idKaroq23)
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
Vypočítanie identifikátora auta v hex, predpokladáme, že identifikátor je len do bitu 462, 463 - 466 sú bity buttonu a 467 - 474 bude nejaký checksum
print("id pre Karoq 2023: " + str(s.binToHex(openKaroq23A[0], idKaroq23[:462] + [0]*(len(idKaroq23)-462))))
id pre Karoq 2023: 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab2b55534a
Záver pre Karoq 2023: zistili sme hex hodnotu identifikátora auta ktoré je uložené v 0 - 462 bite, button bity sa nachádzajú na 463 - 466 pričom pre zatváranie auta majú hodnotu 1001, pre otváranie 0110 a pre kufor 1010. Následne pre bity 467 - 474 predpokladáme, že sú checksum a 477 - 478 bude separátor, vychádzame z predpokladu, že identifikátor nebude rozdelený.
Analýza: Karoq 2018
openKaroq18A = s.string2list(openKaroq18InputA)
openKaroq18B = s.string2list(openKaroq18InputB)
openKaroq18C = s.string2list(openKaroq18InputC)
kuforKaroq18A = s.string2list(kuforKaroq18InputA)
kuforKaroq18B = s.string2list(kuforKaroq18InputB)
kuforKaroq18C = s.string2list(kuforKaroq18InputC)
closeKaroq18A = s.string2list(closeKaroq18InputA)
closeKaroq18B = s.string2list(closeKaroq18InputB)
closeKaroq18C = s.string2list(closeKaroq18InputC)
print("Škoda Karoq 2018")
print(" - open")
s.draw(openKaroq18A)
s.draw(openKaroq18B)
s.draw(openKaroq18C)
print(" - kufor")
s.draw(kuforKaroq18A)
s.draw(kuforKaroq18B)
s.draw(kuforKaroq18C)
print(" - close")
s.draw(closeKaroq18A)
s.draw(closeKaroq18B)
s.draw(closeKaroq18C)
Škoda Karoq 2018 - open
- kufor
- close
Q: Existuje nejaký pattern a vieme následne získať skutočné dáta?
pattern = s.findPatternMulti(openKaroq18A, openKaroq18B)
fin = s.findMyPattern(pattern)
finA = s.getData(openKaroq18A, fin)
finB = s.getData(openKaroq18B, fin)
print(finA)
print(finB)
[[], [], []] [[], [], []]
A: Zistili sme že neexistuje pattern a už máme skutočné dáta.
Nájdeme identifikátor a separátor a vizualizujeme ich
separatorOpenKaroq18AB, idOpenKaroq18AB = s.findSeparatorId(openKaroq18A, openKaroq18B)
separatorOpenKaroq18BC, idOpenKaroq18BC = s.findSeparatorId(openKaroq18B, openKaroq18C)
separatorOpenKaroq18AC, idOpenKaroq18AC = s.findSeparatorId(openKaroq18A, openKaroq18C)
separatorKuforKaroq18AB, idKuforKaroq18AB = s.findSeparatorId(kuforKaroq18A, kuforKaroq18B)
separatorKuforKaroq18BC, idKuforKaroq18BC = s.findSeparatorId(kuforKaroq18B, kuforKaroq18C)
separatorKuforKaroq18AC, idKuforKaroq18AC = s.findSeparatorId(kuforKaroq18A, kuforKaroq18C)
separatorCloseKaroq18AB, idCloseKaroq18AB = s.findSeparatorId(closeKaroq18A, closeKaroq18B)
separatorCloseKaroq18BC, idCloseKaroq18BC = s.findSeparatorId(closeKaroq18B, closeKaroq18C)
separatorCloseKaroq18AC, idCloseKaroq18AC = s.findSeparatorId(closeKaroq18A, closeKaroq18C)
separatorOpenKaroq18 = []
for i in range(0, len(separatorOpenKaroq18AB)):
if separatorOpenKaroq18AB[i] == separatorOpenKaroq18AC[i] and separatorOpenKaroq18AC[i] == separatorOpenKaroq18BC[i]:
separatorOpenKaroq18.append(separatorOpenKaroq18AB[i])
else:
separatorOpenKaroq18.append(0)
separatorKuforKaroq18 = []
for i in range(0, len(separatorKuforKaroq18AB)):
if separatorKuforKaroq18AB[i] == separatorKuforKaroq18AC[i] and separatorKuforKaroq18AC[i] == separatorKuforKaroq18BC[i]:
separatorKuforKaroq18.append(separatorKuforKaroq18AB[i])
else:
separatorKuforKaroq18.append(0)
separatorCloseKaroq18 = []
for i in range(0, len(separatorCloseKaroq18AB)):
if separatorCloseKaroq18AB[i] == separatorCloseKaroq18AC[i] and separatorCloseKaroq18AC[i] == separatorCloseKaroq18BC[i]:
separatorCloseKaroq18.append(separatorCloseKaroq18AB[i])
else:
separatorCloseKaroq18.append(0)
idOpenKaroq18 = []
for i in range(0, len(idOpenKaroq18AB)):
if idOpenKaroq18AB[i] == idOpenKaroq18AC[i] and idOpenKaroq18AC[i] == idOpenKaroq18BC[i]:
idOpenKaroq18.append(idOpenKaroq18AB[i])
else:
idOpenKaroq18.append(0)
idKuforKaroq18 = []
for i in range(0, len(separatorKuforKaroq18AB)):
if idKuforKaroq18AB[i] == idKuforKaroq18AC[i] and idKuforKaroq18AC[i] == idKuforKaroq18BC[i]:
idKuforKaroq18.append(idKuforKaroq18AB[i])
else:
idKuforKaroq18.append(0)
idCloseKaroq18 = []
for i in range(0, len(idCloseKaroq18AB)):
if idCloseKaroq18AB[i] == idCloseKaroq18AC[i] and idCloseKaroq18AC[i] == idCloseKaroq18BC[i]:
idCloseKaroq18.append(idCloseKaroq18AB[i])
else:
idCloseKaroq18.append(0)
separatorKaroq18 = []
for i in range(0, len(separatorOpenKaroq18)):
if separatorOpenKaroq18[i] == separatorCloseKaroq18[i] and separatorCloseKaroq18[i] == separatorKuforKaroq18[i] and closeKaroq18A[0][i] == openKaroq18A[0][i]:
separatorKaroq18.append(separatorOpenKaroq18[i])
else:
separatorKaroq18.append(0)
idKaroq18 = []
for i in range(0, len(idOpenKaroq18)):
if idOpenKaroq18[i] == idCloseKaroq18[i] and idCloseKaroq18[i] == idKuforKaroq18[i] and closeKaroq18A[0][i] == openKaroq18A[0][i]:
idKaroq18.append(idOpenKaroq18[i])
else:
idKaroq18.append(0)
"""
print(" - open separator")
s.draw([separatorOpenKaroq18])
print(" - open id")
s.draw([idOpenKaroq18])
print(" - kufor separator")
s.draw([separatorKuforKaroq18])
print(" - kufor id")
s.draw([idKuforKaroq18])
print(" - close separator")
s.draw([separatorCloseKaroq18])
print(" - close id")
s.draw([idCloseKaroq18])
"""
print(" - separator")
s.draw([separatorKaroq18])
print(" - id")
s.draw([idKaroq18])
- separator
- id
Vidíme, že pri id je 477 - 478 oddelený od zvyšku id. Predpokladajme, že je to separátor, keďže id by malo byť spolu a nie oddelene, a naša funkcia to neodhalila. Nech 467 - 474 je checksum.
separatorKaroq18[477] = 1
separatorKaroq18[478] = 1
Nájdenie button bitu a vizualizovanie ho.
buttonOpenKuforKaroq18A = s.findButtonBit(kuforKaroq18A, openKaroq18A)
buttonOpenCloseKaroq18A = s.findButtonBit(openKaroq18A, closeKaroq18A)
buttonKuforCloseKaroq18A = s.findButtonBit(kuforKaroq18A, closeKaroq18A)
buttonOpenKuforKaroq18B = s.findButtonBit(kuforKaroq18B, openKaroq18B)
buttonOpenCloseKaroq18B = s.findButtonBit(openKaroq18B, closeKaroq18B)
buttonKuforCloseKaroq18B = s.findButtonBit(kuforKaroq18B, closeKaroq18B)
buttonOpenKuforKaroq18C = s.findButtonBit(kuforKaroq18C, openKaroq18C)
buttonOpenCloseKaroq18C = s.findButtonBit(openKaroq18C, closeKaroq18C)
buttonKuforCloseKaroq18C = s.findButtonBit(kuforKaroq18C, closeKaroq18C)
"""
s.draw([buttonOpenKuforKaroq18A])
s.draw([buttonOpenCloseKaroq18A])
s.draw([buttonKuforCloseKaroq18A])
s.draw([buttonOpenKuforKaroq18B])
s.draw([buttonOpenCloseKaroq18B])
s.draw([buttonKuforCloseKaroq18B])
s.draw([buttonOpenKuforKaroq18C])
s.draw([buttonOpenCloseKaroq18C])
s.draw([buttonKuforCloseKaroq18C])
"""
buttonKaroq18 = []
for i in range(0, len(buttonOpenCloseKaroq18A)):
if buttonOpenCloseKaroq18A[i] == buttonOpenCloseKaroq18B[i] and buttonOpenCloseKaroq18B[i] == buttonOpenCloseKaroq18C[i]:
buttonKaroq18.append(buttonOpenCloseKaroq18A[i])
else:
buttonKaroq18.append(0)
buttonKaroq18KA = []
for i in range(0, len(buttonOpenKuforKaroq18A)):
if buttonOpenKuforKaroq18A[i] == buttonKuforCloseKaroq18A[i]:
buttonKaroq18KA.append(buttonOpenKuforKaroq18A[i])
else:
buttonKaroq18KA.append(0)
buttonKaroq18KB = []
for i in range(0, len(buttonOpenKuforKaroq18B)):
if buttonOpenKuforKaroq18B[i] == buttonKuforCloseKaroq18B[i]:
buttonKaroq18KB.append(buttonOpenKuforKaroq18B[i])
else:
buttonKaroq18KB.append(0)
buttonKaroq18KC = []
for i in range(0, len(buttonOpenKuforKaroq18C)):
if buttonOpenKuforKaroq18C[i] == buttonKuforCloseKaroq18C[i]:
buttonKaroq18KC.append(buttonOpenKuforKaroq18C[i])
else:
buttonKaroq18KC.append(0)
buttonKaroq18K = []
for i in range(0, len(buttonKaroq18KA)):
if buttonKaroq18KA[i] == buttonKaroq18KB[i] and buttonKaroq18KB[i] == buttonKaroq18KC[i]:
buttonKaroq18K.append(buttonKaroq18KA[i])
else:
buttonKaroq18K.append(0)
print(" - button bit Open / Close")
s.draw([buttonKaroq18])
print(" - button bit kufor")
s.draw([buttonKaroq18K])
- button bit Open / Close
- button bit kufor
Po bližšej analýze button bitov pre Open / Close zisťujeme že by dané bity mohli reprezentovať aj button pre kufor, keďže pri open a close sú bity navzájom negované a pri kufri nadobúdajú bity iné hodnoty - nie negované.
partOpenKaroq18A = s.getPart(openKaroq18A, 463, 466, [0, 1, 2])
partOpenKaroq18B = s.getPart(openKaroq18A, 463, 466, [0, 1, 2])
partOpenKaroq18C = s.getPart(openKaroq18A, 463, 466, [0, 1, 2])
partKuforKaroq18A = s.getPart(kuforKaroq18A, 463, 466, [0, 1, 2])
partKuforKaroq18B = s.getPart(kuforKaroq18A, 463, 466, [0, 1, 2])
partKuforKaroq18C = s.getPart(kuforKaroq18A, 463, 466, [0, 1, 2])
partCloseKaroq18A = s.getPart(closeKaroq18A, 463, 466, [0, 1, 2])
partCloseKaroq18B = s.getPart(closeKaroq18A, 463, 466, [0, 1, 2])
partCloseKaroq18C = s.getPart(closeKaroq18A, 463, 466, [0, 1, 2])
print(" - čast Open")
s.draw(partOpenKaroq18A)
s.draw(partOpenKaroq18B)
s.draw(partOpenKaroq18C)
print(" - čast Close")
s.draw(partCloseKaroq18A)
s.draw(partCloseKaroq18B)
s.draw(partCloseKaroq18C)
print(" - čast Kufor")
s.draw(partKuforKaroq18A)
s.draw(partKuforKaroq18B)
s.draw(partKuforKaroq18C)
- čast Open
- čast Close
- čast Kufor
vizualizácia Karoq 2018
s.drawAdv(openKaroq18A, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(openKaroq18B, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(openKaroq18C, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(kuforKaroq18A, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(kuforKaroq18B, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(kuforKaroq18C, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(closeKaroq18A, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(closeKaroq18B, buttonKaroq18, separatorKaroq18, idKaroq18)
s.drawAdv(closeKaroq18C, buttonKaroq18, separatorKaroq18, idKaroq18)
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
Vypočítanie identifikátora auta v hex, predpokladáme, že identifikátor je len do bitu 462, 463 - 466 sú bity buttonu a 467 - 474 bude nejaký checksum
print("id pre Karoq 2018: " + str(s.binToHex(openKaroq18A[0], idKaroq18[:462] + [0]*(len(idKaroq18)-462))))
id pre Karoq 2018: 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab4cd55355
Záver pre Karoq 2018: zistili sme hex hodnotu identifikátora auta ktoré je uložené v 0 - 462 bite, button bity sa nachádzajú na 463 - 466 pričom pre zatváranie auta majú hodnotu 1001, pre otváranie 0110 a pre kufor 1010. Následne pre bity 467 - 474 predpokladáme, že sú checksum a 477 - 478 bude separátor, vychádzame z predpokladu, že identifikátor nebude rozdelený.
Analýza: Oktavia
openOktaviaA = s.string2list(openOktaviaInputA)
openOktaviaB = s.string2list(openOktaviaInputB)
openOktaviaC = s.string2list(openOktaviaInputC)
closeOktaviaA = s.string2list(closeOktaviaInputA)
closeOktaviaB = s.string2list(closeOktaviaInputB)
closeOktaviaC = s.string2list(closeOktaviaInputC)
print("Oktavia")
print(" - open")
print(len(openOktaviaA[0]))
s.draw(openOktaviaA)
print(len(openOktaviaB[0]))
s.draw(openOktaviaB)
print(len(openOktaviaC[0]))
s.draw(openOktaviaC)
print(" - close")
print(len(closeOktaviaA[0]))
s.draw(closeOktaviaA)
print(len(closeOktaviaC[0]))
s.draw(closeOktaviaB)
print(len(closeOktaviaC[0]))
s.draw(closeOktaviaC)
Oktavia - open 793
528
528
- close 793
528
528
Q: Existuje nejaký pattern a vieme následne získať skutočné dáta?
pattern = s.findPatternMulti(openOktaviaA, openOktaviaB)
fin = s.findMyPattern(pattern)
finA = s.getData(openOktaviaA, fin)
finB = s.getData(openOktaviaB, fin)
print(finA)
print(finB)
[[]] [[]]
A: Zistili sme že neexistuje pattern a už máme skutočné dáta.
Po bližšom pozorovaní sme zistili, že sa síce nenachádza žiaden pattern ale medzi sekvenciami namiesto 0 sa nachádza striedanie 1 a 0, odstránime toto striedanie a získame skutočné dáta.
dataOpenOktaviaA = [s.getPart(openOktaviaA, 92, 262,[0])[0], s.getPart(openOktaviaA, 357, 527,[0])[0], s.getPart(openOktaviaA, 622, 792,[0])[0]]
dataOpenOktaviaB = [s.getPart(openOktaviaB, 92, 262,[0])[0], s.getPart(openOktaviaB, 357, 527,[0])[0]]
dataOpenOktaviaC = [s.getPart(openOktaviaC, 92, 262,[0])[0], s.getPart(openOktaviaC, 357, 527,[0])[0]]
dataCloseOktaviaA = [s.getPart(closeOktaviaA, 92, 262,[0])[0], s.getPart(closeOktaviaA, 357, 527,[0])[0], s.getPart(closeOktaviaA, 622, 792,[0])[0]]
dataCloseOktaviaB = [s.getPart(closeOktaviaB, 92, 262,[0])[0], s.getPart(closeOktaviaB, 357, 527,[0])[0], s.getPart(closeOktaviaB, 622, 792,[0])[0]]
dataCloseOktaviaC = [s.getPart(closeOktaviaC, 92, 262,[0])[0], s.getPart(closeOktaviaC, 357, 527,[0])[0]]
print(" - open")
s.draw(dataOpenOktaviaA)
s.draw(dataOpenOktaviaB)
s.draw(dataOpenOktaviaC)
print(" - close")
s.draw(dataCloseOktaviaA)
s.draw(dataCloseOktaviaB)
s.draw(dataCloseOktaviaC)
- open
- close
Zistenie: pri jednom stlačení sa signál opakuje celý, to pri autách Karoq 2018 a 2023 nenastáva, pri nich sa vytvára počas držania tlačidla rôzne kľúče. Zároveň pre ďalšiu prácu, budeme musieť upraviť signáli, aby mali rovnaký počet sekvencií. Keďže sú sekvencie totožné pri jednom signáli, môžeme zvyšné zahodiť, tak aby sme mali počet sekvencií rovnaký v každom signáli.
dataOpenOktaviaA.pop()
dataCloseOktaviaA.pop()
dataCloseOktaviaB.pop()
print(" - open")
s.draw(dataOpenOktaviaA)
s.draw(dataOpenOktaviaB)
s.draw(dataOpenOktaviaC)
print(" - close")
s.draw(dataCloseOktaviaA)
s.draw(dataCloseOktaviaB)
s.draw(dataCloseOktaviaC)
- open
- close
Nájdeme identifikátor a separátor a vizualizujeme ich.
separatorOpenOktaviaAB, idOpenOktaviaAB = s.findSeparatorId(dataOpenOktaviaA, dataOpenOktaviaB)
separatorOpenOktaviaBC, idOpenOktaviaBC = s.findSeparatorId(dataOpenOktaviaB, dataOpenOktaviaC)
separatorOpenOktaviaAC, idOpenOktaviaAC = s.findSeparatorId(dataOpenOktaviaA, dataOpenOktaviaC)
separatorCloseOktaviaAB, idCloseOktaviaAB = s.findSeparatorId(dataCloseOktaviaA, dataCloseOktaviaB)
separatorCloseOktaviaBC, idCloseOktaviaBC = s.findSeparatorId(dataCloseOktaviaB, dataCloseOktaviaC)
separatorCloseOktaviaAC, idCloseOktaviaAC = s.findSeparatorId(dataCloseOktaviaA, dataCloseOktaviaC)
separatorOpenOktavia = []
for i in range(0, len(separatorOpenOktaviaAB)):
if separatorOpenOktaviaAB[i] == separatorOpenOktaviaAC[i] and separatorOpenOktaviaAC[i] == separatorOpenOktaviaBC[i]:
separatorOpenOktavia.append(separatorOpenOktaviaAB[i])
else:
separatorOpenOktavia.append(0)
separatorCloseOktavia = []
for i in range(0, len(separatorCloseOktaviaAB)):
if separatorCloseOktaviaAB[i] == separatorCloseOktaviaAC[i] and separatorCloseOktaviaAC[i] == separatorCloseOktaviaBC[i]:
separatorCloseOktavia.append(separatorCloseOktaviaAB[i])
else:
separatorCloseOktavia.append(0)
idOpenOktavia = []
for i in range(0, len(idOpenOktaviaAB)):
if idOpenOktaviaAB[i] == idOpenOktaviaAC[i] and idOpenOktaviaAC[i] == idOpenOktaviaBC[i]:
idOpenOktavia.append(idOpenOktaviaAB[i])
else:
idOpenOktavia.append(0)
idCloseOktavia = []
for i in range(0, len(idCloseOktaviaAB)):
if idCloseOktaviaAB[i] == idCloseOktaviaAC[i] and idCloseOktaviaAC[i] == idCloseOktaviaBC[i]:
idCloseOktavia.append(idCloseOktaviaAB[i])
else:
idCloseOktavia.append(0)
separatorOktavia = []
for i in range(0, len(separatorOpenOktavia)):
if separatorOpenOktavia[i] == separatorCloseOktavia[i] and dataOpenOktaviaA[0][i] == dataCloseOktaviaA[0][i]:
separatorOktavia.append(separatorOpenOktavia[i])
else:
separatorOktavia.append(0)
idOktavia = []
for i in range(0, len(idOpenOktavia)):
if idOpenOktavia[i] == 1 and idCloseOktavia[i] == 1 and dataOpenOktaviaA[0][i] == dataCloseOktaviaA[0][i]:
idOktavia.append(idOpenOktavia[i])
else:
idOktavia.append(0)
"""
print(" - open separator")
s.draw([separatorOpenOktaviaAC])
print(" - open id")
s.draw([idOpenOktavia])
print(" - close separator")
s.draw([separatorCloseOktavia])
print(" - close id")
s.draw([idCloseOktavia])
"""
print(" - separator")
s.draw([separatorOktavia])
print(" - id")
s.draw([idOktavia])
- separator
- id
Predpokladajme, že id je od 0 - 29 a zvyšné oddelené časti pri id sú buď nejaké separátory, checksum alebo náhodne ekvivalentné bity.
separatorOktavia = separatorOktavia[:30] + idOktavia[30:]
idOktavia = idOktavia[:30] + [0]*(len(idOktavia) - 30)
s.draw([separatorOktavia])
s.draw([idOktavia])
Nájdenie button bitu a vizualizovanie ho.
buttonOpenCloseOktaviaA = s.findButtonBit(dataOpenOktaviaA, dataCloseOktaviaA)
buttonOpenCloseOktaviaB = s.findButtonBit(dataOpenOktaviaB, dataCloseOktaviaB)
buttonOpenCloseOktaviaC = s.findButtonBit(dataOpenOktaviaC, dataCloseOktaviaC)
"""
s.draw([buttonOpenCloseOktaviaA])
s.draw([buttonOpenCloseOktaviaB])
s.draw([buttonOpenCloseOktaviaC])
"""
buttonOktavia = []
for i in range(0, len(buttonOpenCloseOktaviaA)):
if buttonOpenCloseOktaviaA[i] == buttonOpenCloseOktaviaB[i] and buttonOpenCloseOktaviaB[i] == buttonOpenCloseOktaviaC[i]:
buttonOktavia.append(buttonOpenCloseOktaviaA[i])
else:
buttonOktavia.append(0)
print(" - button bit Open / Close")
s.draw([buttonOktavia])
- button bit Open / Close
Viac zoskupení bitov môže hovoriť o stlačení bitu. Predpokladajme ale, že ak id je od 0 - 29, tak by bolo logické, aby button bit nasledoval za ním, čo aj súhlasí so zoskupením 30 - 31. Nech ďalšie bity sú len náhodne označené ako button bity.
buttonOktavia = buttonOktavia[0:32] + [0]*(len(buttonOktavia) - 32)
s.draw([buttonOktavia])
Vizualizujeme získané informácie.
s.drawAdv(dataOpenOktaviaA, buttonOktavia, separatorOktavia, idOktavia)
s.drawAdv(dataOpenOktaviaB, buttonOktavia, separatorOktavia, idOktavia)
s.drawAdv(dataOpenOktaviaC, buttonOktavia, separatorOktavia, idOktavia)
s.drawAdv(dataCloseOktaviaA, buttonOktavia, separatorOktavia, idOktavia)
s.drawAdv(dataCloseOktaviaB, buttonOktavia, separatorOktavia, idOktavia)
s.drawAdv(dataCloseOktaviaC, buttonOktavia, separatorOktavia, idOktavia)
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
Vypočítanie identifikátora auta v hex.
print("id pre Oktaviu: " + str(s.binToHex(dataOpenOktaviaA[0], idOktavia)))
id pre Oktaviu: 0x36da9556
Záver pre Oktaviu: zistili sme hex hodnotu identifikátora auta, ktorý je uložený v 0 - 29 bite, button bity sa nachádzajú na 30 - 31, toto auto bolo bez možnosti otvárania kufru. Pre vyznačené bity, ako separátory sme nezistili ich skutočnú vlastnosť. 156 - 159 môže byť checksum pre jeho dĺžku avšak nemusí. Zvyšné môžu byť či už separátory, alebo anomálie pri generovaní kľúčov.
Analýza: Kia
closeKiaA = s.string2list(closeKiaInputA)
closeKiaB = s.string2list(closeKiaInputB)
print("Kia")
print(" - close")
s.draw(closeKiaA)
s.draw(closeKiaB)
Kia - close
Q: Existuje nejaký pattern a vieme následne získať skutočné dáta?
pattern = s.findPatternMulti(closeKiaA, closeKiaB)
fin = s.findMyPattern(pattern)
finA = s.getData(closeKiaA, fin)
finB = s.getData(closeKiaB, fin)
print(finA)
print(finB)
[[], []] [[], []]
A: Zistili sme že neexistuje pattern a už máme skutočné dáta.
Nájdeme identifikátor a separátor a vizualizujeme ich.
separatorKia, idKia = s.findSeparatorId(closeKiaA, closeKiaB)
"""
print(" - close separator")
s.draw([separatorCloseKia])
print(" - close id")
s.draw([idCloseKia])
"""
print(" - separator")
s.draw([separatorKia])
print(" - id")
s.draw([idKia])
- separator
- id
Vidíme, že väčšina signálu je označená ako identifikátor, podľa predpokladu, že identifikátor nie je rozdelený, tak sa bude nachádzať na 0 - 407 a 468 - 537 bude checksum, pre zvyšné nemáme istotu, čo vyjadrujú, zatiaľ ich označíme aj ako separátory.
separatorKia[409:467] = idKia[409:467]
s.draw([separatorKia])
Keďže máme len záznam signálov pre zatváranie auta, nemáme možnosť zistiť kde sa nachádza button bit.
Vizualizujeme zistené informácie.
s.drawAdv(closeKiaA, [0]*len(closeKiaA), separatorKia, idKia)
s.drawAdv(closeKiaB, [0]*len(closeKiaB), separatorKia, idKia)
blue - button, green - separator, grey - id
blue - button, green - separator, grey - id
Vypočítanie identifikátora auta v hex, predpokladáme, že je od 0 - 407.
print("id pre Kia: " + str(s.binToHex(closeKiaA[0], idKia[:408] + [0]*(len(idKia) - 408))))
id pre Kia: 0x555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555535
Záver pre Kiu: zistili sme hex hodnotu identifikátora auta ktoré je uložené v 0 - 407 bite, button bity sme nezistili a toto auto bolo bez možnosti otvárania kufru. Pre vyznačené bity, ako separátory sme nezistili ich skutočnú vlastnosť. 156 - 159 môže byť checksum pre jeho dĺžku avšak nemusí. Zvyšné môžu byť či už separátory, alebo anomália pri generovaní kľúčov.
Záver letného semestra: Použili sme vytvorenú knižnicu z minulého semestra na analyzovanie signálov z áut: Kia, Oktavia, Karoq 2018, Karoq 2023. Signáli sme nahrali pomocou GQRX a RTL-SDR. Pre Karoqi sme nahrali zatváranie, otváranie a kufor. Pre Oktaviu otváranie a zatváranie a pre Kiu len zatváranie.
Pri porovnaní Karoqov sme zistili, že počas rokov, zmenili len inicializačnú/synchronizačnú sekvenciu, ktorá bola pridaná na začiatok ak sa dlho nevysielal signál z ovládania pre rok 2023. Identifikačné číslo je uložené na 0 - 461 kde id sú: Karoq 2018: 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab4cd55355 Karoq 2023: 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab2b55534a
Button bity sú pri Karoqoch na 463 - 466 pričom pre nadobúdajú hodnotu: otváranie: 0110 zatváranie: 1001 kufor: 1010
Separátor sa môže nachádzať na bitoch 477 - 478. Celková dĺžka jednej sekvencie je 622.
Pri Oktavii bol signál kľúču štruktúrovo rozdielny. Na oddelenie vysielanie sekvencií pri jednom stlačení ovládania bolo použité striedanie 1 a 0 namiesto 0. Je tiež možno že niektoré striedanie bolo súčasťou identifikátora, keďže ten sa nachádza na 0 - 29 avšak toto striedanie malo rôznu dĺžku medzi jednotlivými sekvenciami. Preto sme každé striedanie odstránili. Identifikátor pre Oktaviu je 0x36da9556.
Button bit sa pravdepodobne nachádza na 30 - 31, keďže je nepravdepodobné že by sa nachádzal niekde v strede sekvencie (bitov pre button bolo, viac a preto sme sa rozhodli predpokladať, že button bit bude nasledovať hneď po identifikátori).
Je tiež možné že checksum sa nachádza na 156 - 159, keďže to bolo 2. najdlhšia sekvencia po identifikátori, ktorá sa opakovala.
Separátorov bolo viac, ale je možné, že kvôli malej databáze signálov z konkrétneho ovládača boli bity generované rovnako a pri ďalších generovaniach už nebudú rovnaké. Celková dĺžka jednej sekvencie je 170.
Pri Kii sme zistili počas nahrávania signálov, že vysiela na 2 frekvenciách pričom, na jednej vysiela 1 a na druhej 0. Toto bolo odlišné od zvyšných výrobcov áut, kde vysielali ovládače len na jednej frekvencii. Identifikátor pre Kiu bol na bitoch 0 - 407 kde hodnota hex bola 0x555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555535.
Button bit sme nenašli, keďže sme nahrali len zatváranie auta.
Tiež bola nájdená len jedna subsekvencia ktorá mala 2. najdlhšiu dĺžku, 468 - 537, čo predpokladáme, že bude checksum. Zvyšné nájdené nezmenené bity sme označili ako separátory, ale je možné, že sú rovnaké len z dôvodu malej vzorky kľúčov.