github.com/n00py/Slackor@v0.0.0-20200610224921-d007fcea1740/impacket/tests/dot11/test_WEPDecoder.py (about) 1 #!/usr/bin/env python 2 # sorry, this is very ugly, but I'm in python 2.5 3 import sys 4 sys.path.insert(0,"../..") 5 6 from impacket.dot11 import Dot11,Dot11Types,Dot11DataFrame,Dot11WEP,Dot11WEPData 7 from impacket.ImpactPacket import IP,ICMP 8 from impacket.Dot11KeyManager import KeyManager 9 from impacket.ImpactDecoder import Dot11Decoder 10 from binascii import unhexlify 11 import unittest 12 from six import PY2 13 14 class TestDot11WEPData(unittest.TestCase): 15 16 def setUp(self): 17 # 802.11 Data Frame 18 # 19 self.dot11frame = b'\x08\x41\x2c\x00\x00\x21\x29\x68\x33\x5d\x00\x18\xde\x7c\x37\x9f\x00\x21\x29\x68\x33\x5b\xf0\xd6\x0c\x31\x65\x00\x8d\x23\x81\xe9\x25\x1c\xb5\xaa\x83\xd2\xc7\x16\xba\x6e\xe1\x8e\x7d\x3a\x2c\x71\xc0\x0f\x6a\xb8\x2f\xbc\x54\xc4\xb0\x14\xab\x03\x11\x5e\xde\xcc\xab\x2b\x18\xeb\xeb\x25\x0f\x75\xeb\x6b\xf5\x7f\xd6\x5c\xb9\xe1\xb2\x6e\x50\xba\x4b\xb4\x8b\x9f\x34\x71\xda\x9e\xcf\x12\xcb\x8f\x36\x1b\x02\x53' 20 21 d = Dot11(self.dot11frame, FCS_at_end = False) 22 23 self.assertEqual(d.get_type(),Dot11Types.DOT11_TYPE_DATA) 24 self.assertEqual(d.get_subtype(),Dot11Types.DOT11_SUBTYPE_DATA) 25 self.assertEqual(d.get_type_n_subtype(),Dot11Types.DOT11_TYPE_DATA_SUBTYPE_DATA) 26 27 data = Dot11DataFrame(d.get_body_as_string()) 28 d.contains(data) 29 30 self.wep_header = Dot11WEP(data.body_string) 31 data.contains(self.wep_header) 32 33 self.wep_data = Dot11WEPData(self.wep_header.body_string) 34 self.wep_header.contains(self.wep_data) 35 36 self.km=KeyManager() 37 self.km.add_key([0x00,0x21,0x29,0x68,0x33,0x5d],unhexlify(b'999cbb701ca2ef030e302dcc35')) 38 39 def test_01(self): 40 'Test WEPHeader is_WEP method' 41 self.assertEqual(self.wep_header.is_WEP(), True) 42 43 def test_02(self): 44 'Test Packet Hierarchy' 45 dot11_decoder = Dot11Decoder() 46 dot11_decoder.FCS_at_end(False) 47 dot11_decoder.set_key_manager(self.km) 48 in0=dot11_decoder.decode(self.dot11frame) 49 if PY2: 50 self.assertEqual(str(in0.__class__), "impacket.dot11.Dot11") 51 else: 52 self.assertEqual(str(in0.__class__), "<class 'impacket.dot11.Dot11'>") 53 in1=in0.child() 54 if PY2: 55 self.assertEqual(str(in1.__class__), "impacket.dot11.Dot11DataFrame") 56 else: 57 self.assertEqual(str(in1.__class__), "<class 'impacket.dot11.Dot11DataFrame'>") 58 in2=in1.child() 59 if PY2: 60 self.assertEqual(str(in2.__class__), "impacket.dot11.Dot11WEP") 61 else: 62 self.assertEqual(str(in2.__class__), "<class 'impacket.dot11.Dot11WEP'>") 63 in3=in2.child() 64 if PY2: 65 self.assertEqual(str(in3.__class__), "impacket.dot11.Dot11WEPData") 66 else: 67 self.assertEqual(str(in3.__class__), "<class 'impacket.dot11.Dot11WEPData'>") 68 in4=in3.child() 69 if PY2: 70 self.assertEqual(str(in4.__class__), "impacket.dot11.LLC") 71 else: 72 self.assertEqual(str(in4.__class__), "<class 'impacket.dot11.LLC'>") 73 in5=in4.child() 74 if PY2: 75 self.assertEqual(str(in5.__class__), "impacket.dot11.SNAP") 76 else: 77 self.assertEqual(str(in5.__class__), "<class 'impacket.dot11.SNAP'>") 78 in6=in5.child() 79 #self.assertEqual(str(in6.__class__), "ImpactPacket.IP") 80 in7=in6.child() 81 #self.assertEqual(str(in7.__class__), "ImpactPacket.ICMP") 82 in8=in7.child() 83 #self.assertEqual(str(in8.__class__), "ImpactPacket.Data") 84 self.assertEqual(in8.get_packet(),b'abcdefghijklmnopqrstuvwabcdefghi') 85 86 def test_03(self): 87 'Test WEPHeader IV getter and setter methods' 88 self.assertEqual(self.wep_header.get_iv(), 0x0c3165) 89 90 self.wep_header.set_iv(0x1e0501) # Es de 24 bit 91 self.assertEqual(self.wep_header.get_iv(), 0x1e0501) 92 93 def test_04(self): 94 'Test WEPHeader keyID getter and setter methods' 95 self.assertEqual(self.wep_header.get_keyid(), 0x00) 96 97 self.wep_header.set_iv(0x03) # Es de 2 bits 98 self.assertEqual(self.wep_header.get_iv(), 0x03) 99 100 def test_05(self): 101 'Test WEPData ICV getter and setter methods' 102 103 dot11_decoder = Dot11Decoder() 104 dot11_decoder.FCS_at_end(False) 105 dot11_decoder.set_key_manager(self.km) 106 dot11_decoder.decode(self.dot11frame) 107 wepdata = dot11_decoder.get_protocol(Dot11WEPData) 108 109 # The encrypted ICV is 0x361b0253, but it not the real, 110 # we need decrypt it. The decrypted and real ICV is 0xA1F93985 111 112 self.assertEqual(wepdata.get_icv(),0xA1F93985) 113 114 self.assertEqual(wepdata.get_computed_icv(),0xA1F93985) 115 116 self.assertEqual(wepdata.get_icv(), wepdata.get_computed_icv()) 117 118 wepdata.set_icv(0x11223344) 119 self.assertEqual(wepdata.get_icv(), 0x11223344) 120 121 def test_06(self): 122 'Test WEPData body decryption' 123 dot11_decoder = Dot11Decoder() 124 dot11_decoder.FCS_at_end(False) 125 dot11_decoder.set_key_manager(self.km) 126 dot11_decoder.decode(self.dot11frame) 127 wep = dot11_decoder.get_protocol(Dot11WEP) 128 wepdata = dot11_decoder.get_protocol(Dot11WEPData) 129 decrypted = b'\xaa\xaa\x03\x00\x00\x00\x08\x00\x45\x00\x00\x3c\xa6\x07\x00\x00\x80\x01\xee\x5a\xc0\xa8\x01\x66\x40\xe9\xa3\x67\x08\x00\xc5\x56\x04\x00\x84\x05\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x61\x62\x63\x64\x65\x66\x67\x68\x69\xa1\xf9\x39\x85' 130 self.assertEqual(wepdata.get_packet(), decrypted) 131 self.assertEqual(wepdata.check_icv(), True) 132 133 ip = dot11_decoder.get_protocol(IP) 134 self.assertEqual(ip.get_ip_src(),'192.168.1.102') 135 self.assertEqual(ip.get_ip_dst(),'64.233.163.103') 136 137 icmp = dot11_decoder.get_protocol(ICMP) 138 self.assertEqual(icmp.get_icmp_type(),icmp.ICMP_ECHO) 139 self.assertEqual(icmp.get_icmp_id(),0x0400) 140 141 suite = unittest.TestLoader().loadTestsFromTestCase(TestDot11WEPData) 142 unittest.TextTestRunner(verbosity=1).run(suite)