<<<MD5, minirelease, CUDA>>>

Обсуждение в разделе «С/С++, C#, Delphi, .NET, Asm», начал(-а) Xserg, 25.02.2008.

  1. Xserg

    Xserg Elder - Старейшина

    Регистрация:
    9.12.2006
    Сообщения:
    135
    Одобрения:
    127
    Репутация:
    33
    Станет актуальным с выходом GF9800
    Когда скорость перебора паролей возрастет до 2 миллиардов в секунду.

    О процессах Nvidia в сравнении с многоядерными Pentium совместимыми
    // для понимания исходников

    Чтобы получить 4-кратное увеличение скорости перебора на 4-ядерном Pentium, нужно запустить одновременно (например) 4 PasswordsPro. Ну это в принципе все что можно выжать.


    С процессорами Nvidia немного по-другому.

    Мультипроцессоров в GF8800GTX – 16 штук.
    Причем в каждом мультипроцессоре 8 процессоров, итого 128.

    Каждый процессор Nvidia выполняет инструкцию за 4 такта (GF9800 2400 МГц. ), но 8 процессоров в 32 потоках выполняют одинаковую инструкцию тоже за 4 такта.
    т.е. (128*4) 512 потока на GF8800ULTRA будут выполнятся с той же скоростью как на 128-ядерном Pentium 1500 МГц


    Теперь о недостатках:

    Инструкции чтения-записи в глобальную память выполняются за 400..600 тактов.
    Решается запуском большего количества потоков, чем процессоров*4.

    Со скоростью инструкция за 4 такта процессора выполняют только одинаковые инструкции.
    Если потоки разошлись следует использовать __syncthreads(); В MD5 все инструкции синхронные.

    Работа только с видеопамятью - сильно тормозит, туда-сюда данные перекачивать.

    Release V2.01 nvCUDA_md5.exe
    nvCUDA_md5.rar
    nvCUDA_md5.cu (исходник)
    Необходимые библиотеки dll.rar

    Скорости для GF8800GT (112 процессоров 1.625Гц.)
    1 hash 400млн.. п/c
    2..9 hashs 400 - 310 млн.. п/c
    9..1000000 hashs 310 – 200 млн.. п/c

    Командная строка:
    nvCUDA_md5.exe c=loweralpha-numeric f=md5pas.txt s=1 e=9 b=70 o=find.txt

    c=набор символов из charset.txt
    f=файл откуда берем хеши
    s=начальная длинна пароля
    e=конечная длинна пароля (15 max)
    b=(( количество процессоров ) / 8) *5 или экспериментируем.
    o=файл куда будут записываться найденные пароли


    Mini Release nvCUDA.exe
    XP необходимо установить последние драйверы ForceWare: 169.21
    MD5 хеши // Заточено на популярную GF8600GT

    Предварительная атака 2..5 символов (0x21..0x7f)

    Командная строка:
    // перебирает 0..9,a..z
    nvCUDA.exe -f=mypas.txt -s=7 -e=7
    -f= файл с паролями до 50 шт. типа admin:9987d22788e810116a45109f2ea88648
    -s= начальное количество символов в пароле 6 - by default
    -e= конечное количество символов в пароле 8 - by default

    Необходимые библиотеки dll.rar (158кб.) // cudart.dll , cutil32.dll
    Собранный файл + Исходник nvCUDA.rar (82кб.)

    Тестим скорость, описываем глюки.
    У меня на GeForce 8600 GT TOP ~ 105 mln pas/sec
    Если ни кто (из более опытных программистов АНТИЧАТа ) не возьмется писать, продолжу сам.

    Mini Release nvCUDAsql.exe
    MySql хеши

    Командная строка:
    nvCUDAsql.exe -f=mysqlpas.txt -s=4 -e=10 -sl=91 –bl=20

    -f= файл с паролями до 50 шт. типа hash:6cb1963d2018c3ea
    -s= начальное количество символов в пароле 4 - by default
    -e= конечное количество символов в пароле 10 - by default
    -sl= 25 , 35 , 71 , 91 наборы символов
    -bl=производительность видеокарты. (20 - 128)

    Собранный файл + Исходник ncCuda_mysql.rar (81кб.)

    Скорость перебора одного хеша 8 000 000 000 000 п/c. на GF8600GT


    Ps
    2 b3d3l - Pupkin-Zade c xakep.ru обещал премию выписать. :)

    Пока продумываю 3D интерфейс…
     
    #1 Xserg, 25.02.2008
    В последний раз редактировалось: 21.06.2008
    Это одобряют 15 пользоветелей.
  2. zl0y

    zl0y Banned

    Регистрация:
    13.09.2006
    Сообщения:
    414
    Одобрения:
    270
    Репутация:
    65
    Все работает GeForce 8600GTX 2 гига памяти,только мне кажеться более разумным собрать ботнет и грузить его на 10-20% от всей мощности видеокарты но получить в итоге огромные мощности ;)
     
  3. Delimiter

    Delimiter Banned

    Регистрация:
    8.04.2005
    Сообщения:
    318
    Одобрения:
    173
    Репутация:
    10
    .... прожолжай мну нравится! :d Тему нужно перенести в релизы от Сержа!
     
  4. zl0y

    zl0y Banned

    Регистрация:
    13.09.2006
    Сообщения:
    414
    Одобрения:
    270
    Репутация:
    65
    Серж,кстати неплохо бы еще ставить атаку по выбору цифры,буквы отдельно чтоб.
     
    Это одобряет 1 пользователь.
  5. GlOFF

    GlOFF Elder - Старейшина

    Регистрация:
    8.05.2006
    Сообщения:
    695
    Одобрения:
    484
    Репутация:
    9
    Серьезно... +1 ;) Без 3d идея будет не полной. :)

    // P.S. Да не у всех такие девайсы.
     
    Это одобряют 2 пользоветелей.
  6. iddqd

    iddqd Banned

    Регистрация:
    19.12.2007
    Сообщения:
    657
    Одобрения:
    520
    Репутация:
    23
    автор наверно хотел сказать ГУИ....
     
    Это одобряют 3 пользоветелей.
  7. Jes

    Jes Elder - Старейшина

    Регистрация:
    16.04.2007
    Сообщения:
    373
    Одобрения:
    391
    Репутация:
    24
    имхо , если перекомпилить под никс , можно максимальное быстродействие выжать ...
     
    #7 Jes, 26.02.2008
    В последний раз редактировалось: 26.02.2008
    Это одобряют 2 пользоветелей.
  8. Momiji

    Momiji Elder - Старейшина

    Регистрация:
    25.08.2007
    Сообщения:
    507
    Одобрения:
    348
    Репутация:
    111
    А на 8400М Gt бует пахать?
     
  9. -=lebed=-

    -=lebed=- хэшкрякер
    Администрация

    Регистрация:
    21.06.2006
    Сообщения:
    4 004
    Одобрения:
    1 869
    Репутация:
    419
    Вопрос к Xserg А видюхи от ATI, например HD 2900 линейки (ядро R600) ведь содержат 320 унифицированных суперскалярных потоковых процессоров их заюзать не удастся? Ну там 64х5 ALU на самом деле и только один полноценный (синусы, косинусы и пр.) а четыре чисто выполняют опрации сложения и умножения, а в ядре G80 все 128 шт. (16х8 ALU )универсальные с полноценными арифметико-логическими устройствами, так!?

    PS Для выислени MD5 нужна плавающая точка или достаточно обычого АЛУ ? Если заюзать мощь R600 не будет ли ещё быстрее перебор?
     
  10. -=lebed=-

    -=lebed=- хэшкрякер
    Администрация

    Регистрация:
    21.06.2006
    Сообщения:
    4 004
    Одобрения:
    1 869
    Репутация:
    419
    в ней всего 16 шт. универсальных суперскалярных процессоров ;)
     
  11. iddqd

    iddqd Banned

    Регистрация:
    19.12.2007
    Сообщения:
    657
    Одобрения:
    520
    Репутация:
    23
    16 сони-плейстейшн было бы идейнее подключить к бруту...
    http://forum.antichat.ru/thread63171.html
     
  12. Xserg

    Xserg Elder - Старейшина

    Регистрация:
    9.12.2006
    Сообщения:
    135
    Одобрения:
    127
    Репутация:
    33
    -=lebed=-
    копипаст с cracklab.ru
    Только для nVidia 8xxx и новее.
    Где-то читал , что конкуренты готовят нечто подобное.

    там есть константа
    // влияет на количество потоков (20*32)
    // 8600 своими 32 процессорами больше не тянет
    #define BLOKS 20 // be in need of integer
    Это настройка на видеокарту (20 – GF8600GT) на (80- GF8800ULTRA)

    ----------------
    на 8400 скорее всего будет ошибка по тамауту .

    >>16 сони-плейстейшн было бы идейнее подключить к бруту...
    Деньги давай – приспособлю. Скорость будет ~ 12 миллиардов п/с
     
    Это одобряет 1 пользователь.
  13. zl0y

    zl0y Banned

    Регистрация:
    13.09.2006
    Сообщения:
    414
    Одобрения:
    270
    Репутация:
    65
    Сделай автодетект видяхи типа ComboBox на форме и так выбираешь свою видеокарту
    GeForce 6800
    GeForce 8800
    GeForce 8600
     
  14. Xserg

    Xserg Elder - Старейшина

    Регистрация:
    9.12.2006
    Сообщения:
    135
    Одобрения:
    127
    Репутация:
    33
    Сейчас я код набиваю:
    Генератор последовательности паролей (2 шт).
    Брут соленых хэшей.
    Загрузка и сохранение результатов.
    Детектор производительности видеокарты.
    Интерфейс пользователя.
    Потом займусь общей оптимизацией.

    Работы много – времени не очень.
     
    Это одобряют 2 пользоветелей.
  15. nex0

    nex0 Elder - Старейшина

    Регистрация:
    6.11.2007
    Сообщения:
    56
    Одобрения:
    83
    Репутация:
    5
    Xserg, молодец, это очень крутая вещь!
    Скорость на 8800 GTS 320 Mb (G80) ~183 mln pas/sec (а с разгоном ~251 mln pas/sec!!)
    ...правда, так только при бруте одного хеша, при бруте пятидесяти - ~41 mln pas/sec (c тем же разгоном 54 mln pas/sec)
     
    Это одобряют 3 пользоветелей.
  16. -=lebed=-

    -=lebed=- хэшкрякер
    Администрация

    Регистрация:
    21.06.2006
    Сообщения:
    4 004
    Одобрения:
    1 869
    Репутация:
    419
    Goto http://forum.xakep.ru/m_1073574/mpage_1/key_/tm.htm#1086487 трясти бабло с ихнего админа... (правда он за слова не отвечает...)
    PS требуемый порог был 35 млн. пасс/сек.
     
  17. Xserg

    Xserg Elder - Старейшина

    Регистрация:
    9.12.2006
    Сообщения:
    135
    Одобрения:
    127
    Репутация:
    33
    Уязвимость MySql хешей


    Для тех кто не знает MySql хеш вычисляется так:

    Code:
    #include <windows.h>
    #include "stdafx.h"
    #define DWORD unsigned int
    DWORD hash0,hash1,hash11;
    void pen_mysql(unsigned char * data)
    {
     DWORD f1 = 0x50305735,f2 = 0x12345671;
     DWORD fadd = 7;
      for (;*data;data++)
      {
        f1 = f1 ^ ((( (f1 & 0x3f) + fadd ) * *data ) + (f1 << 8));
        f2 = f2 + ((f2 << 8) ^ f1 );
    	fadd = fadd + *data;
      }
    hash0= f1 & 0x7fffffff;
    hash1= f2 & 0x7fffffff;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    char pass[]="MySqlH";
    pen_mysql((unsigned char *)&pass);
    printf("Pass:%.8x%.8x:%s: \n",hash0,hash1,pass); 
    Сразу бросается в глаза, что алгоритм последовательный,
    и можно в цикле перебирать последний символ.

    Но главная уязвимость – это то что можно найти f2 предпоследнего перебираемого символа путем недолгого перебора:
    Code:
    int mlb = (hash1 - hash0 ) & 0xff;
    for (DWORD ii=mlb;ii<0x80000000;ii+=0x100){
    if (((ii + ((ii << 8) ^ hash0 )) & 0x7fffffff)==hash1) {
    		printf("%.8X \n",ii);
    		[COLOR=red]hash11[/COLOR]=ii; // f2 
    		break;    }}

    Так выглядит алгоритм перебора 6 символов
    Code:
    unsigned char simv[]  ="asdfghjklqwertyuiopzxcvbnmASDFGHJKLQWERTYUIOPZXCVBNM";
    DWORD len=sizeof(simv)-1;
    DWORD f1 = 0x50305735, f2 = 0x12345671;
    DWORD fadd = 7;
    
    for (char i6=0; i6<=len ; i6++ ){
      DWORD f6f1 = f1  ^  ((((f1 & 0x3f)  +  fadd ) * (DWORD)simv[i6]) + (f1 << 8));
      DWORD f6f2 = f2  +  ((f2 << 8) ^ f6f1 );
      DWORD f6ad = fadd + simv[i6];
    for (char i5=0; i5<=len ; i5++ ){
      DWORD f5f1 = f6f1 ^ ((((f6f1 & 0x3f) + f6ad ) * (DWORD)simv[i5]) + (f6f1 << 8));
      DWORD f5f2 = f6f2 + ((f6f2 << 8) ^ f5f1 );
      DWORD f5ad = f6ad + simv[i5];
    for (char i4=0; i4<=len ; i4++ ){
      DWORD f4f1 = f5f1 ^ ((((f5f1 & 0x3f) + f5ad ) * (DWORD)simv[i4]) + (f5f1 << 8));
      DWORD f4f2 = f5f2 + ((f5f2 << 8) ^ f4f1 );
      DWORD f4ad = f5ad + simv[i4];
    for (char i3=0; i3<=len ; i3++ ){
      DWORD f3f1 = f4f1 ^ ((((f4f1 & 0x3f) + f4ad ) * (DWORD)simv[i3]) + (f4f1 << 8));
      DWORD f3f2 = f4f2 + ((f4f2 << 8) ^ f3f1 );
      DWORD f3ad = f4ad + simv[i3];
    for (char i2=0; i2<=len ; i2++ ){
      DWORD f2f1 = f3f1 ^ ((((f3f1 & 0x3f) + f3ad ) * (DWORD)simv[i2]) + (f3f1 << 8));
      DWORD f2f2 = f3f2 + ((f3f2 << 8) ^ f2f1 );
      if ((f2f2 & 0x7fffffff)==[COLOR=red]hash11[/COLOR]) {
    // ----- -1 -----------------------
      DWORD f2ad = f3ad + simv[i2];
    for (char i1=0; i1<=len ; i1++ ){
      DWORD f1f1 = f2f1 ^ ((((f2f1 & 0x3f) + f2ad ) * (DWORD)simv[i1]) + (f2f1 << 8));
      DWORD f1f2 = f2f2 + ((f2f2 << 8) ^ f1f1 );
      if (((f1f1 & 0x7fffffff)==hash0)&((f1f2 & 0x7fffffff)==hash1)){
      printf("Pass:%.8x%.8x:%c%c%c%c%c%c: \n",f1f1,f1f2,simv[i6],simv[i5],simv[i4],simv[i3],simv[i2],simv[i1]);
    	printf(" ok \n");
    	int c = getchar();
    	return 0;
      }
    								}
    // ----- -1 -----------------------
    					}
    }}}}}
    
    	printf(" false \n");
    	int c = getchar();
    	return 0;
    }
    Получается - 8 символьный пароль можно найти за тоже время, что и 7 символьный.

    На GF8600 получается 150 миллиардов п/сек.
    А на GF9800 можно будет за полдня подобрать коллизию к любому хешу.
     
    #17 Xserg, 16.03.2008
    В последний раз редактировалось: 16.03.2008
    Это одобряют 4 пользоветелей.
  18. *.exe

    *.exe Elder - Старейшина

    Регистрация:
    8.01.2007
    Сообщения:
    66
    Одобрения:
    11
    Репутация:
    1
    у меня: 8600 GTS 128мб

    в CMD выдает:

    C:\>C:\1\nvCUDA.exe -f=mypas.txt -s=7 -e=7
    Device Emulation (CPU) Clock rate: 1.350 Mg
    There is no device supporting CUDA.

    че за шляпа? (((
     
  19. }{0TT@БЬ)Ч

    }{0TT@БЬ)Ч Elder - Старейшина

    Регистрация:
    20.01.2006
    Сообщения:
    280
    Одобрения:
    139
    Репутация:
    40
    первый раз пробовал тоже что то писал, ща не помню уже что:) пробуй дрова поставить те что автор указывал.
     
    #19 }{0TT@БЬ)Ч, 16.03.2008
    В последний раз редактировалось: 16.03.2008
  20. *.exe

    *.exe Elder - Старейшина

    Регистрация:
    8.01.2007
    Сообщения:
    66
    Одобрения:
    11
    Репутация:
    1
    Качнул Дрова. поставил терь короче он мне выдает что типо файл с листом хешей не найден (((


    Code:
    C:\>C:\MD5\nvCUDA.exe -f=mypas.txt -s=6 -e=7
    GeForce 8600 GTS   Clock rate: 1.458 Mg
    There is no mypas.txt file.
    
    Press ENTER to exit...
    че за нафиг? (((