■ ■ ■ ■ ■ ■ ■
flipperzero-bruteforce.py
| skipped 12 lines |
13 | 13 | | - stop_bit: APPENDED to each key in sub format, empty by default |
14 | 14 | | - frequency: protocol's frequency in Hz, 433920000 by default |
15 | 15 | | - repetition: number of times to repeat each key, 3 by default |
| 16 | + | - key_range: range of keys to generate, None by default |
16 | 17 | | """ |
17 | 18 | | |
18 | 19 | | def __init__( |
| skipped 5 lines |
24 | 25 | | stop_bit="", |
25 | 26 | | frequency=433920000, |
26 | 27 | | repetition=3, |
| 28 | + | key_range=None, |
27 | 29 | | ): |
28 | 30 | | self.name = name |
29 | 31 | | self.n_bits = n_bits |
| skipped 1 lines |
31 | 33 | | self.pilot_period = pilot_period |
32 | 34 | | self.stop_bit = stop_bit |
33 | 35 | | self.repetition = repetition |
| 36 | + | self.key_range = key_range |
34 | 37 | | self.file_header = ( |
35 | 38 | | "Filetype: Flipper SubGhz RAW File\n" |
36 | 39 | | + "Version: 1\n" |
| skipped 59 lines |
96 | 99 | | folder [1..n_folders] will contain [2^1..2^n_folders] files, |
97 | 100 | | each file containing [2^n_bits/2^1..2^n_bits/2^n_folders] keys. |
98 | 101 | | """ |
99 | | - | if self.n_bits > 12: # take up too much space for github |
| 102 | + | if self.n_bits > 12 and self.key_range is None: # take up too much space for github |
100 | 103 | | print(f"Skipping {self.name}, takes up too much space for github") |
101 | 104 | | return |
102 | 105 | | base_dir = f"sub_files/{self.name}" |
| skipped 3 lines |
106 | 109 | | with open(filename, "w") as f: |
107 | 110 | | f.write(self.file_header) |
108 | 111 | | f.write("RAW_Data: " + self.de_bruijn() + "\n") |
| 112 | + | # If key_range is defined, generate those keys only |
| 113 | + | if self.key_range is not None: |
| 114 | + | filename = f"{base_dir}/bf_{self.key_range[0]}-{self.key_range[-1]}.sub" |
| 115 | + | with open(filename, "w") as f: |
| 116 | + | f.write(self.file_header) |
| 117 | + | for key in self.key_range: |
| 118 | + | f.write("RAW_Data: " + self.key_to_sub(key) * self.repetition + "\n") |
| 119 | + | return |
109 | 120 | | # Generate sets of 2^0, 2^1, .., 2^n_folders .sub files |
110 | 121 | | splits = [ |
111 | 122 | | int(pow(2, self.n_bits) / _) for _ in [pow(2, _) for _ in range(n_folders)] |
| skipped 97 lines |
209 | 220 | | ] |
210 | 221 | | |
211 | 222 | | for p in protocols: |
| 223 | + | # TODO multithread this |
212 | 224 | | p.generate_sub_files() |
213 | 225 | | print(f"{p.name} done") |
214 | 226 | | |