Changeset 5396

Show
Ignore:
Timestamp:
09/08/09 22:31:31 (4 years ago)
Author:
qsy
Message:

PM updated with new namespace

Location:
branch/BTSniff
Files:
6 modified
1 copied

Legend:

Unmodified
Added
Removed
  • branch/BTSniff/ChangeLog

    r5143 r5396  
     12009-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 
     162009-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 
    1232009-07-30 Quek Shu Yang (quekshuy@gmail.com) 
    224============================================== 
  • branch/BTSniff/examples/eg1hcidump.py

    r5130 r5396  
     1 
     2 
     3from umit.bluetooth.sniffer import LMP 
     4 
     5 
    16import umit.bluetooth.sniff_fileio as sfio 
    27import umit.bluetooth.sniff as sniff 
    38import umit.bluetooth.sniffer as sniffer 
    49import umit.bluetooth.handlers as handlers 
     10 
    511 
    612class HCIDumpHandler(sniff.SniffHandler): 
  • branch/BTSniff/setup.py

    r5130 r5396  
    1515if sys.platform == 'linux2': 
    1616        # print 'linux' 
    17         mod = Extension(PARENT_PKG + '.sniff', 
     17        mod = Extension(PARENT_PKG + '.btsniff', 
    1818                        libraries = BTLIBRARIES, 
    1919                        include_dirs = INCLUDE_DIRS, 
    2020                sources = [SNIFFMODDIR + os.sep + 'basesniffmodule.c',  
    21                                    SNIFFMODDIR + os.sep + 'bthandler.c']) 
     21                                   SNIFFMODDIR + os.sep + 'bthandler.c', 
     22                                   SNIFFMODDIR + os.sep + 'layers.c']) 
    2223         
    23         mod2 = Extension(PARENT_PKG + '.sniff_fileio', 
     24        mod2 = Extension(PARENT_PKG + '.btsniff_fileio', 
    2425                        libraries = BTLIBRARIES, 
    2526                        include_dirs = INCLUDE_DIRS, 
     
    3132                sources = [ SNIFFMODDIR + os.sep + 'sniffcrack.c']) 
    3233         
    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                    ] 
    3451 
    3552setup( name = 'UmitBluetoothSniffer', 
  • branch/BTSniff/tests/run_all.py

    r5143 r5396  
    6868for f in testfiles: 
    6969    os.remove(f) 
     70    pycfile = ''.join([f, 'c']) 
     71    if os.path.exists(pycfile): 
     72        os.remove(pycfile) 
    7073 
  • branch/BTSniff/tests/testcrack.py

    r5143 r5396  
    11 
    22 
    3 import unittest 
     3import unittest,sys,time 
    44 
    5 import umit.bluetooth.sniff as sniff 
     5import umit.bluetooth.btsniff as btsniff 
    66import umit.bluetooth.crack as crack 
    77import umit.bluetooth.sniffcommon as sniffcommon 
     8 
     9from umit.bluetooth.btlayers import LMPHeader, BtRaw, BtLayerUnit 
     10 
     11LMP = BtLayerUnit 
     12 
     13def _show(string): 
     14    sys.stderr.write(str(string)) 
     15    sys.stderr.write('\n') 
    816 
    917class CrackTest(unittest.TestCase): 
     
    2634 
    2735    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() 
    3341        self.pincrackdata.in_rand  = self.IN_RAND 
    3442        self.pincrackdata.m_comb_key = self.M_COMB_KEY 
     
    4048         
    4149    def tearDown(self): 
    42         del self.session 
     50        del self.pincrackdata 
     51 
     52class 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 
    4375 
    4476class PinCrackRunnerTest(CrackTest): 
    4577     
    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 
    47111     
    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) 
    54132 
     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 
    55153 
    56154 
    57155if __name__ == "__main__": 
     156    print 'running testcrack' 
    58157    unittest.main() 
  • branch/BTSniff/umit/bluetooth/handlers.py

    r5394 r5396  
    6161            and self._pcr.try_crack(lmp): 
    6262             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() 
    6475 
    6576class TextHandler(btsniff.SniffHandler):