Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.02.2017
Сообщений: 21
1
.NET Core

wpa2 handshake

01.05.2020, 17:32. Показов 827. Ответов 0

Author24 — интернет-сервис помощи студентам
Наткнувшись на статью "Об алгоритме взлома WPA-PSK" решил написать то же самое но на с#.
Ниже приведен код из статьи:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
void calc_pmk( char *key, char *essid_pre, uchar pmk[40] )
{
    int i, j, slen;
    uchar buffer[65];
    char essid[33+4];
    SHA_CTX ctx_ipad;
    SHA_CTX ctx_opad;
    SHA_CTX sha1_ctx;
 
    memset(essid, 0, sizeof(essid));
    memcpy(essid, essid_pre, strlen(essid_pre));
    slen = strlen( essid ) + 4;
 
    /* setup the inner and outer contexts */
 
    memset( buffer, 0, sizeof( buffer ) );
    strncpy( (char *) buffer, key, sizeof( buffer ) - 1 );
 
    for( i = 0; i < 64; i++ )
        buffer[i] ^= 0x36;
 
    //SHA1_Init() initializes a SHA_CTX structure.
    SHA1_Init( &ctx_ipad );
    //SHA1_Update() can be called repeatedly with chunks of the message to be hashed (len bytes at data).
    SHA1_Update( &ctx_ipad, buffer, 64 );
 
    for( i = 0; i < 64; i++ )
        buffer[i] ^= 0x6A;
 
    SHA1_Init( &ctx_opad );
    SHA1_Update( &ctx_opad, buffer, 64 );
 
    /* iterate HMAC-SHA1 over itself 8192 times */
 
    essid[slen - 1] = '\1';
    HMAC(EVP_sha1(), (uchar *)key, strlen(key), (uchar*)essid, slen, pmk, NULL);
    memcpy( buffer, pmk, 20 );
 
    for( i = 1; i < 4096; i++ )
    {
        memcpy( &sha1_ctx, &ctx_ipad, sizeof( sha1_ctx ) );
        SHA1_Update( &sha1_ctx, buffer, 20 );
        //SHA1_Final() places the message digest in md, which must have space for SHA_DIGEST_LENGTH ==
        //20 bytes of output, and erases the SHA_CTX
        SHA1_Final( buffer, &sha1_ctx );
 
        memcpy( &sha1_ctx, &ctx_opad, sizeof( sha1_ctx ) );
        SHA1_Update( &sha1_ctx, buffer, 20 );
        SHA1_Final( buffer, &sha1_ctx );
 
        for( j = 0; j < 20; j++ )
            pmk[j] ^= buffer[j];
    }
 
    essid[slen - 1] = '\2';
    HMAC(EVP_sha1(), (uchar *)key, strlen(key), (uchar*)essid, slen, pmk+20, NULL);
    memcpy( buffer, pmk + 20, 20 );
 
    for( i = 1; i < 4096; i++ )
    {
        memcpy( &sha1_ctx, &ctx_ipad, sizeof( sha1_ctx ) );
        SHA1_Update( &sha1_ctx, buffer, 20 );
        SHA1_Final( buffer, &sha1_ctx );
 
        memcpy( &sha1_ctx, &ctx_opad, sizeof( sha1_ctx ) );
        SHA1_Update( &sha1_ctx, buffer, 20 );
        SHA1_Final( buffer, &sha1_ctx );
 
        for( j = 0; j < 20; j++ )
            pmk[j + 20] ^= buffer[j];
    }
}
Это я перевел в с#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Main(string[] args)
        {
            //Все данные известны:
            string password = "12345678";
            string ssid = "doron";
            string ANonce = "05db9f7fc2487712a06e0ce76100b5013ee795e1a979a8ae613342ba03122db8";
            string SNonce = "15e730cce03c498e854e9698f2cc1c3ece202a0878bb1ff59b3bc0de60f85ae7";
            string BSSIDAP = ("14:ae:db:38:a3:cd").Replace(":", "");
            string MACCLIENT = ("60:ab:67:d6:03:66").Replace(":", "");
 
 
            byte[] salt = Encoding.UTF8.GetBytes(ssid);
            Console.WriteLine($"Salt: {BitConverter.ToString(salt).Replace("-", "").ToLower()}");
 
            byte[] PMK = KeyDerivation.Pbkdf2(
                password: password,
                salt: salt,
                prf: KeyDerivationPrf.HMACSHA1,
                iterationCount: 4096,
                numBytesRequested: 256 / 8);
            string PMKString = BitConverter.ToString(PMK).Replace("-", "").ToLower();
            Console.WriteLine($"PMK: {PMKString}");      
      }
PMKString = 8a23aa816ab09afd2749dba77844cc9d71dd519f74e24f64eb72f36c0ae743ad


У меня имеются все данные для вычисления. Но не как не получатся вычислить PTK.
Вот код со статьи :
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Та самая функция которая не получается:
void calc_ptk( uchar *pmk, uchar pke[100], uchar *ptk )
{
    /* compute the pairwise transient key*/
    for (int i = 0; i < 4; i++)
    {
        pke[99] = i;
        HMAC(EVP_sha1(), pmk, 32, pke, 100, ptk + i * 20, NULL);
    }
}
 
void main()
{
    uchar pmk[40];  //Используется первых 32 байта
    uchar ptk[80];
    uchar mic[20];  //Используется первых 16 байт
 
    char *key = "12345678"; 
 
    char essid_pre[32];
    memset(essid_pre, 0, 32);
    memcpy(essid_pre, "Harkonen", 8);
    
    uchar bssid[6] = { 0x00, 0x14, 0x6c, 0x7e, 0x40, 0x80 };
    uchar stmac[6] = { 0x00, 0x13, 0x46, 0xfe, 0x32, 0x0c };
    uchar anonce[32] = { 0x22, 0x58, 0x54, 0xb0, 0x44, 0x4d, 0xe3, 0xaf,
                         0x06, 0xd1, 0x49, 0x2b, 0x85, 0x29, 0x84, 0xf0,
                         0x4c, 0xf6, 0x27, 0x4c, 0x0e, 0x32, 0x18, 0xb8, 
                         0x68, 0x17, 0x56, 0x86, 0x4d, 0xb7, 0xa0, 0x55 };
 
    uchar snonce[32] = { 0x59, 0x16, 0x8b, 0xc3, 0xa5, 0xdf, 0x18, 0xd7, 
                         0x1e, 0xfb, 0x64, 0x23, 0xf3, 0x40, 0x08, 0x8d,
                         0xab, 0x9e, 0x1b, 0xa2, 0xbb, 0xc5, 0x86, 0x59, 
                         0xe0, 0x7b, 0x37, 0x64, 0xb0, 0xde, 0x85, 0x70 };
    
    uchar pke[100];
    memset(pke, 0, 100);
    memcpy( pke, "Pairwise key expansion", 23 );
    if( memcmp( stmac, bssid, 6 ) < 0 )    {
        memcpy( pke + 23, stmac, 6 );
        memcpy( pke + 29, bssid, 6 );
    } else {
        memcpy( pke + 23, bssid, 6 );
        memcpy( pke + 29, stmac, 6 );
    }
    if( memcmp( snonce, anonce, 32 ) < 0 ) {
        memcpy( pke + 35, snonce, 32 );
        memcpy( pke + 67, anonce, 32 );
    } else {
        memcpy( pke + 35, anonce, 32 );
        memcpy( pke + 67, snonce, 32 );
    } 
 
    calc_pmk( key, essid_pre, pmk );
    calc_ptk( pmk, pke, ptk );
}
Ключ который должен получиться:
32 E4 CD 9C 66 52 DD D4 B2 A5 CB BB 0A 52 00 37 F0 9C 8E AE 4A B6 D9 BA 4A 7F 38 5E 0F E0 E5 3D 3A 2F 8C B8 0E 93 11 80 BA B5 77 E3 FC 7C 71 D1 8C 3B 89 12 F4 DF 68 86 AC B9 FA 1F 8D F9 D2 DD
Может кто то занималиса подобным.
Перерыл кучу сайтов. Так и не нашол ответа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2020, 17:32
Ответы с готовыми решениями:

Handshake failed
Доброго времени суток. Подскажите, пожайлуста. Изучаю программирование под Android и попутно пишу...

SSL handshake failed
Пересел за новый комп. Запустил старый проект. При отправке запроса в google выбивает ошибку SSL...

Брутфорс WPA2
По-пьяни поменял пароль от wi-fi, гуглил, или посылает на Linux-системы, либо на CommView и...

Генератор тона (handshake tone)
Что-то у меня затупчик вышел. Читаю доку на протокол, который нужно эмулировать в моей железке....

0
01.05.2020, 17:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2020, 17:32
Помогаю со студенческими работами здесь

Как отклонить подключение TCP до handshake
Есть ли способы до accept() сбросить подключение, чтобы на другой стороне выдало что подключение...

Авто-переподключение к WPA2-Enterprise
Добрый день! прошу помощи, а дабы не быть лжецом, не просто помощи, а прошу &quot;написать&quot;. В...

Не проходит авторизация на WPA2 TKIP
Здравствуйте. В Linux семействе я новичек... Поставил свежий релиз Ubuntu 16.04.3 LTS x86 на...

Online сервисы расшифровки WPA2
Кто может подсказать бесплатный сервис по расшифровке WPA2 ? Буду очень признателен.

Защищен ли wpa2-psk от ложных точек?
Обьясните пожалуйста ни как не могу понять. И интересен такой вопрос я подключаюсь к точке доступа...

В устройстве нет WPA2, по руководству - есть
Вот модель роутера. В атаче инструкция. Моя версия 3.02RU, инструкция написана на предыдущую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru