Changeset 5396
- Timestamp:
- 09/08/09 22:31:31 (4 years ago)
- Location:
- branch/BTSniff
- Files:
-
- 6 modified
- 1 copied
-
ChangeLog (modified) (1 diff)
-
PM_copy (copied) (copied from branch/PacketManipulator)
-
examples/eg1hcidump.py (modified) (1 diff)
-
setup.py (modified) (2 diffs)
-
tests/run_all.py (modified) (1 diff)
-
tests/testcrack.py (modified) (3 diffs)
-
umit/bluetooth/handlers.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branch/BTSniff/ChangeLog
r5143 r5396 1 2009-09-08 Quek Shu Yang (quekshuy@gmail.com) 2 ============================================== 3 * Solved bugs in layers.c 4 * Refactored btsniff_fileio as a result of changes in layers.c 5 * Added experimental methods for reading from hcidump files. 6 - sniffio.c 7 - sniffio.h 8 * Pincracker runs in separate process. Refactored for integration with PM. 9 Rewrote some of the method documentation. 10 - crack.py 11 * Added LMP and L2CAP BtLayerUnit objects for convenient representation. 12 - sniffer.py 13 14 15 16 2009-08-07 Quek Shu Yang (quekshuy@gmail.com) 17 ============================================== 18 * Added an svncopy of PacketManipulator for integration purposes. 19 * Refactoring of Bluetooth packet data structures. Better formal definitions. 20 - layers.c 21 - layers.h 22 1 23 2009-07-30 Quek Shu Yang (quekshuy@gmail.com) 2 24 ============================================== -
branch/BTSniff/examples/eg1hcidump.py
r5130 r5396 1 2 3 from umit.bluetooth.sniffer import LMP 4 5 1 6 import umit.bluetooth.sniff_fileio as sfio 2 7 import umit.bluetooth.sniff as sniff 3 8 import umit.bluetooth.sniffer as sniffer 4 9 import umit.bluetooth.handlers as handlers 10 5 11 6 12 class HCIDumpHandler(sniff.SniffHandler): -
branch/BTSniff/setup.py
r5130 r5396 15 15 if sys.platform == 'linux2': 16 16 # print 'linux' 17 mod = Extension(PARENT_PKG + '. sniff',17 mod = Extension(PARENT_PKG + '.btsniff', 18 18 libraries = BTLIBRARIES, 19 19 include_dirs = INCLUDE_DIRS, 20 20 sources = [SNIFFMODDIR + os.sep + 'basesniffmodule.c', 21 SNIFFMODDIR + os.sep + 'bthandler.c']) 21 SNIFFMODDIR + os.sep + 'bthandler.c', 22 SNIFFMODDIR + os.sep + 'layers.c']) 22 23 23 mod2 = Extension(PARENT_PKG + '. sniff_fileio',24 mod2 = Extension(PARENT_PKG + '.btsniff_fileio', 24 25 libraries = BTLIBRARIES, 25 26 include_dirs = INCLUDE_DIRS, … … 31 32 sources = [ SNIFFMODDIR + os.sep + 'sniffcrack.c']) 32 33 33 mods = [mod, mod2, mod3] 34 mod4 = Extension(PARENT_PKG + '.btlayers', 35 libraries = BTLIBRARIES, 36 include_dirs = INCLUDE_DIRS, 37 sources = [SNIFFMODDIR + os.sep + 'layers.c']) 38 testmod = Extension(PARENT_PKG + '.harness', 39 libraries = BTLIBRARIES, 40 include_dirs = INCLUDE_DIRS, 41 sources = [SNIFFMODDIR + os.sep + 'harness.c', 42 SNIFFMODDIR + os.sep + 'layers.c']) 43 44 mods = [ 45 mod4, 46 mod3, 47 mod2, 48 mod, 49 testmod 50 ] 34 51 35 52 setup( name = 'UmitBluetoothSniffer', -
branch/BTSniff/tests/run_all.py
r5143 r5396 68 68 for f in testfiles: 69 69 os.remove(f) 70 pycfile = ''.join([f, 'c']) 71 if os.path.exists(pycfile): 72 os.remove(pycfile) 70 73 -
branch/BTSniff/tests/testcrack.py
r5143 r5396 1 1 2 2 3 import unittest 3 import unittest,sys,time 4 4 5 import umit.bluetooth. sniff assniff5 import umit.bluetooth.btsniff as btsniff 6 6 import umit.bluetooth.crack as crack 7 7 import umit.bluetooth.sniffcommon as sniffcommon 8 9 from umit.bluetooth.btlayers import LMPHeader, BtRaw, BtLayerUnit 10 11 LMP = BtLayerUnit 12 13 def _show(string): 14 sys.stderr.write(str(string)) 15 sys.stderr.write('\n') 8 16 9 17 class CrackTest(unittest.TestCase): … … 26 34 27 35 def setUp(self): 28 self.session = sniffcommon.SniffSession(sniff.State(),29 self.MASTER_ADD,30 self.SLAVE_ADD,31 'hci0', None)32 self.pincrackdata = sniffcommon.PinCrackData()36 # self.session = sniffcommon.SniffSession(sniff.State(), 37 # self.MASTER_ADD, 38 # self.SLAVE_ADD, 39 # 'hci0', None) 40 self.pincrackdata = crack.PinCrackData() 33 41 self.pincrackdata.in_rand = self.IN_RAND 34 42 self.pincrackdata.m_comb_key = self.M_COMB_KEY … … 40 48 41 49 def tearDown(self): 42 del self.session 50 del self.pincrackdata 51 52 class pincrackrunnerInternalTest(CrackTest): 53 54 # pcr = crack._pincrackrunner(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD) 55 56 def testRuncrack(self): 57 58 import tempfile 59 tmpfile = tempfile.TemporaryFile() 60 # self.pcr.runcrack(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD, 61 # tmpfile) 62 self.pcr = crack._pincrackrunner(self.pincrackdata, self.MASTER_ADD, self.SLAVE_ADD) 63 self.pcr.run() 64 i = 0 65 while not self.pcr.is_done(): 66 i += 1 67 if i < 3: 68 _show("Sleep") 69 import time 70 time.sleep(5) 71 pin = self.pcr.getpin() 72 _show("testRuncrack: pin: %s" % pin) 73 self.assertEqual(pin, '1234') 74 43 75 44 76 class PinCrackRunnerTest(CrackTest): 45 77 46 pcr = crack.PinCrackRunner() 78 def setUp(self): 79 super(PinCrackRunnerTest, self).setUp() 80 self.pcr = crack.PinCrackRunner(self.MASTER_ADD, self.SLAVE_ADD) 81 lp1 = BtRaw() 82 lp1.rawdata = self.IN_RAND 83 lp2 = BtRaw() 84 lp2.rawdata = self.M_COMB_KEY 85 lp3 = BtRaw() 86 lp3.rawdata = self.S_COMB_KEY 87 lp4 = BtRaw() 88 lp4.rawdata = self.M_AU_RAND 89 lp5 = BtRaw() 90 lp5.rawdata = self.S_AU_RAND 91 lp6 = BtRaw() 92 lp6.rawdata = self.M_SRES 93 lp7 = BtRaw() 94 lp7.rawdata = self.S_SRES 95 self.payloads = [lp1, lp2, lp3, lp4, lp5, lp7, lp6] 96 97 lh1 = LMPHeader(tid=1, op1=8) 98 lh2 = LMPHeader(tid=1, op1=9) 99 lh3 = LMPHeader(tid=1, op1=9) 100 lh4 = LMPHeader(tid=1, op1=11) 101 lh5 = LMPHeader(tid=1, op1=11) 102 lh6 = LMPHeader(tid=1, op1=12) 103 lh7 = LMPHeader(tid=1, op1=12) 104 105 self.headers = [lh1, lh2, lh3, lh4, lh5, lh7, lh6] 106 self.sources = ['M', 'M', 'S', 'M', 'S', 'S', 'M'] 107 self.lmps = [] 108 for header, payload in zip(self.headers, self.payloads): 109 self.lmps.append(LMP(header = header, payload = payload)) 110 47 111 48 def testRuncrack(self): 49 import tempfile 50 tmpfile = tempfile.TemporaryFile() 51 self.pcr.runcrack(self.pincrackdata, self.session.master, self.session.slave, 52 tmpfile).wait() 53 self.assertEqual(self.pcr.getpin(), '1234') 112 def test_try_crack(self): 113 for i, lmp in zip(range(len(self.lmps)), self.lmps): 114 _show('LMP %d' % i) 115 if self.pcr.try_crack(lmp, True if self.sources[i] == 'M' else False): 116 pin = self.pcr.getpin() 117 _show('try_crack_test: Done! Pin: %s' % pin) 118 self.assertEqual(pin, '1234') 119 else: 120 time.sleep(1) 121 # First time failed 122 # Keep trying for 30 seconds 123 if self.pcr.pincrackdata is not None: 124 _show("test_try_crack: pincrackdata ready") 125 self.assertEqual(self.pincrackdata.in_rand, self.pcr.pincrackdata.in_rand) 126 self.assertEqual(self.pincrackdata.s_comb_key, self.pcr.pincrackdata.s_comb_key) 127 self.assertEqual(self.pincrackdata.m_comb_key, self.pcr.pincrackdata.m_comb_key) 128 self.assertEqual(self.pincrackdata.s_au_rand, self.pcr.pincrackdata.s_au_rand) 129 self.assertEqual(self.pincrackdata.m_au_rand, self.pcr.pincrackdata.m_au_rand) 130 self.assertEqual(self.pincrackdata.m_sres, self.pcr.pincrackdata.m_sres) 131 self.assertEqual(self.pincrackdata.s_sres, self.pcr.pincrackdata.s_sres) 54 132 133 else: 134 _show("test_try_crack: pincrackdata not ready") 135 assert False 136 137 while not self.pcr.try_crack(None, None): 138 _show('Sleep') 139 time.sleep(3) 140 141 pin = self.pcr.getpin() 142 _show("PIN! %s" % pin) 143 self.pcr.terminate() 144 self.assertEqual(pin, '1234') 145 self.assertTrue(self.pcr.pincrackdata is not None, 'PCD is None') 146 147 148 def tearDown(self): 149 super(PinCrackRunnerTest, self).tearDown() 150 del self.lmps 151 del self.payloads 152 del self.headers 55 153 56 154 57 155 if __name__ == "__main__": 156 print 'running testcrack' 58 157 unittest.main() -
branch/BTSniff/umit/bluetooth/handlers.py
r5394 r5396 61 61 and self._pcr.try_crack(lmp): 62 62 self._pin = self._pcr.getpin() 63 63 64 def is_done(self): 65 return self._pcr.is_done() 66 67 def close(self): 68 self._pcr.terminate() 69 70 def getpin(self): 71 """ 72 @return Pin as a string 73 """ 74 return self._pcr.getpin() 64 75 65 76 class TextHandler(btsniff.SniffHandler):
