RCayre / mirage

Mirage is a powerful and modular framework dedicated to the security analysis of wireless communications.
https://homepages.laas.fr/rcayre/mirage-documentation
MIT License
261 stars 48 forks source link

HackRF issue Sniffing ZigBee #36

Open alphafox02 opened 1 year ago

alphafox02 commented 1 year ago

On 22.04 Ubuntu w/ Mirage and latest hackRF firmware as of this date, I see the following when trying to run ZigBee Sniff on a known transmitting channel

Exception in thread Thread-14 (run):
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/src/mirage_extension/mirage/libs/common/sdr/demodulators.py", line 152, in run
    self.generateOutput(demodulatedBlock,iqBlock)
  File "/usr/src/mirage_extension/mirage/libs/common/sdr/demodulators.py", line 65, in generateOutput
    demodulatedData,iqSamples = d.decode(demodulatedData, iqSamples)
  File "/usr/src/mirage_extension/mirage/libs/zigbee_utils/decoders.py", line 41, in decode
    newIqSamples = iqSamples[:self.samplesBefore+self.samplesPerSymbol*(len(demodulatedData[:endOfFrame]))+self.samplesPerSymbol+self.samplesAfter]
UnboundLocalError: local variable 'endOfFrame' referenced before assignment

After making this change to decoders.py I no longer the the error, but I'm not sure if this is a correct way to fix the issue. It does not seem like I'm getting the results that I do get when sniffing zigbee with the hackrf and gr-802.15.4. I modified the loop to iterate with a step size of 31 instead of 32

for i in range(0, len(demodulatedData), 31):
    value, hamming = checkBestMatch(demodulatedData[i:i+31])
    if hamming > self.hammingThresold:
        endOfFrame = i-1
        break
    else:
        zigbeeFrame += value

newIqSamples = iqSamples[:self.samplesBefore + self.samplesPerSymbol * len(demodulatedData[:endOfFrame+1]) + self.samplesPerSymbol + self.samplesAfter]