ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Брут Md5 быстрее на 25%
  #1  
Старый 24.01.2008, 21:40
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию Брут Md5 быстрее на 25%

Побрутив мд5 хеш на своем компьютере (AMD65 3500+), программой PasswordsPro (5.5млн п/с) ), увидел цифру 10лет.
Подумалось, нельзя ли побыстрее? Оказалось можно.

Пример1 кода мд5 на делфи.
Код:
// function lrot32(a, b: dword): dword; register;
// begin result:= (a shl b) or (a shr (32-b));end;
a:=$67452301;b:=$efcdab89;c:=$98badcfe;d:=$10325476;
a:= b + lrot32(a + (d xor (b and (c xor d))) + data[ 0] + $d76aa478,7);
d:= a + lrot32(d + (c xor (a and (b xor c))) + data[ 1] + $e8c7b756,12);
и т.д
….
….
….
d:= a + lrot32(d + (a xor b xor c) + data[12] + $e6db99e5,11);
// здесь уже можно проводить проверу d.
// если не ровно код ниже (25%) выполнять не обязательно
c:= d + lrot32(c + (d xor a xor b) + data[15] + $1fa27cf8,16);
// здесь уже можно проводить проверу c.
b:= c + lrot32(b + (c xor d xor a) + data[ 2] + $c4ac5665,23);
// здесь уже можно проводить проверу b.
a:= b + lrot32(a + (c xor (b or (not d))) + data[ 0] + $f4292244,6);
// здесь уже можно проводить проверу a.
// до этого места md5 (снизу вверх) можно выполнить в обратом порядке
d:= a + lrot32(d + (b xor (a or (not c))) + data[ 7] + $432aff97,10);
c:= d + lrot32(c + (a xor (d or (not b))) + data[14] + $ab9423a7,15);
b:= c + lrot32(b + (d xor (c or (not a))) + data[ 5] + $fc93a039,21);
a:= b + lrot32(a + (c xor (b or (not d))) + data[12] + $655b59c3,6);
d:= a + lrot32(d + (b xor (a or (not c))) + data[ 3] + $8f0ccc92,10);
c:= d + lrot32(c + (a xor (d or (not b))) + data[10] + $ffeff47d,15);
b:= c + lrot32(b + (d xor (c or (not a))) + data[ 1] + $85845dd1,21);
a:= b + lrot32(a + (c xor (b or (not d))) + data[ 8] + $6fa87e4f,6);
d:= a + lrot32(d + (b xor (a or (not c))) + data[15] + $fe2ce6e0,10);
c:= d + lrot32(c + (a xor (d or (not b))) + data[ 6] + $a3014314,15);
b:= c + lrot32(b + (d xor (c or (not a))) + data[13] + $4e0811a1,21);
a:= b + lrot32(a + (c xor (b or (not d))) + data[ 4] + $f7537e82,6);
d:= a + lrot32(d + (b xor (a or (not c))) + data[11] + $bd3af235,10);
c:= d + lrot32(c + (a xor (d or (not b))) + data[ 2] + $2ad7d2bb,15);
b:= c + lrot32(b + (d xor (c or (not a))) + data[ 9] + $eb86d391,21);

currenthash[0]:= $67452301+a;
currenthash[1]:= $efcdab89+b;
currenthash[2]:= $98badcfe+c;
currenthash[3]:= $10325476]+d;
end;
Еще один пример2 как md5 выполняется в обратном порядке:
Код:
procedure rev_md5;
var a,b,c,d,e:dword;
begin
// в currenthash наш xеш, пароль от которого нужно найти
a:=currenthash[0]-$67452301;
b:=currenthash[1]-$efcdab89;
c:=currenthash[2]-$98badcfe;
d:=currenthash[3]-$10325476;
b:=b-c;
b:= ((b shr 21) or (b shl (32-21)));
b:= b - ((d xor (c or (not a))) + $eb86d391);
c:=c-d;
c:= ((c shr 15) or (c shl (32-15)));
c:= c - ((a xor (d or (not b))) + data[ 2] + $2ad7d2bb);
d:=d-a;
d:= ((d shr 10) or (d shl (32-10)));
d:= d - ((b xor (a or (not c))) + $bd3af235);
a:=a-b;
a:= ((a shr 6) or (a shl (32-6)));
a:= a - ((c xor (b or (not d))) + data[ 4] + $f7537e82);

b:=b-c;
b:= ((b shr 21) or (b shl (32-21)));
b:= b - ((d xor (c or (not a))) + $4e0811a1);
c:=c-d;
c:= ((c shr 15) or (c shl (32-15)));
c:= c - ((a xor (d or (not b))) + $a3014314);
d:=d-a;
d:= ((d shr 10) or (d shl (32-10)));
d:= d - ((b xor (a or (not c))) + $fe2ce6e0);
a:=a-b;
a:= ((a shr 6) or (a shl (32-6)));
a:= a - ((c xor (b or (not d))) + $6fa87e4f);

b:=b-c;
b:= ((b shr 21) or (b shl (32-21)));
b:= b - ((d xor (c or (not a))) + data[ 1] + $85845dd1);
c:=c-d;
c:= ((c shr 15) or (c shl (32-15)));
c:= c - ((a xor (d or (not b))) + $ffeff47d);
d:=d-a;
d:= ((d shr 10) or (d shl (32-10)));
d:= d - ((b xor (a or (not c))) + data[ 3] + $8f0ccc92);
a:=a-b;
a:= ((a shr 6) or (a shl (32-6)));
a:= a - ((c xor (b or (not d))) + $655b59c3);
b:=b-c;
b:= ((b shr 21) or (b shl (32-21)));
b:= b - ((d xor (c or (not a))) + $fc93a039);
c:=c-d;
c:= ((c shr 15) or (c shl (32-15)));
c:= c - ((a xor (d or (not b))) + data[$e] + $ab9423a7);
d:=d-a;
d:= ((d shr 10) or (d shl (32-10)));
d:= d - ((b xor (a or (not c))) + $432aff97);
// a,b,c,d для ускоренной проверки
srhash0:=a; 
srhash1:=b;
srhash2:=c;
srhash3:=d;
end;
Вообще то, если известен пароль (который содержится в data[] ) , мд5 можно выполнить полностью в обратном порядке и получить исходные константы в a,b,c,d

Но пароль не известен, поэтому остановимся на первом data[ 0], это первые 4 символа пароля.

Алгоритм перебора получается такой:
Заполняем data[1]..data[x] данными.
выполняем procedure rev_md5
и теперь заполняя data[0] (это четыре байта), перебираем и сравниваем сокращенным md5;
Если совпали srhash0==a;srhash1==b;srhash2:==c;srhash3==d; пароль у нас на экране.

Как можно еще, заметить отсутствуют data[ 4], data[ 5]…
Просто найти пароль длинной более 23 символов, нереально, так и незачем нагружать процессор заставляя его прибавлять нули.

Исходники и программу выкладывать не буду, тк
Допустил ошибку , выбрав в данном случае Delphi (умучился алгоритм оптимизировать), нужно сразу было на Си.
Но все равно 7.1 млн п/c вместо 5.5млн получилось.

Зы но 9 лет вместо 10 почти не радует .
 
Ответить с цитированием

  #2  
Старый 24.01.2008, 22:05
AFoST
Members of Antichat - Level 5
Регистрация: 28.05.2007
Сообщений: 729
Провел на форуме:
5571194

Репутация: 1934


Отправить сообщение для AFoST с помощью ICQ
По умолчанию

По-моему, дела делаются так:
Если взялся сделать что-то, то сделать это так, чтобы лучше тебя больше не сделал никто. Поэтому лучше всего сделать единожды охринительный брутфорсер на АСМЕ (соответственно сообразить самый быстрый алгоритм) и этим пользоваться вечно, пока мд5 ещё будет использоваться.
 
Ответить с цитированием

  #3  
Старый 24.01.2008, 22:23
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от AFoST  
охринительный брутфорсер на АСМЕ
Без языка высокого уровня оптимизировать:
Код:
 a:=$67452301;b:=$efcdab89;c:=$98badcfe;d:=$10325476;
a:= b + lrot32(a + (d xor (b and (c xor d))) + data[ 0] + $d76aa478,7);
d:= a + lrot32(d + (c xor (a and (b xor c))) + data[ 1] + $e8c7b756,12);
В - (те же три строчки на asm)
Код:
// a-eax,b-ebx,c-ecx,d-edx
MOV EDX,$EFCDAB89
MOV ECX,$98BADCFE

MOV EAX,DWORD PTR DS:[ESI]
DEC EAX
ADD EAX,$D76AA478
ROL EAX,$7
ADD EAX,EDX

MOV EBX,EAX
AND EBX,$77777777
XOR EBX,ECX
ADD EBX,DWORD PTR DS:[ESI+$4]
ADD EBX,$f8fa0bcc
ROL EBX,$0C
ADD EBX,EAX
Времени 19 лет уйдет.
 
Ответить с цитированием

  #4  
Старый 24.01.2008, 22:30
AFoST
Members of Antichat - Level 5
Регистрация: 28.05.2007
Сообщений: 729
Провел на форуме:
5571194

Репутация: 1934


Отправить сообщение для AFoST с помощью ICQ
По умолчанию

Поделить код на несколько частей и каждую часть отдать отдельному программеру. Стоящие вещи пишутся не в один день...
 
Ответить с цитированием

  #5  
Старый 30.01.2008, 23:39
ProTeuS
HARDstasy
Регистрация: 26.11.2004
Сообщений: 1,367
Провел на форуме:
4226592

Репутация: 2175


Отправить сообщение для ProTeuS с помощью ICQ
По умолчанию

http://www.rewolf.cjb.net/
http://cracklab.ru/f/index.php?action=vthread&topic=5787&forum=6&page=-1
 
Ответить с цитированием

  #6  
Старый 31.01.2008, 03:00
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Код:
MOV EDX,$EFCDAB89
MOV ECX,$98BADCFE

MOV EAX,DWORD PTR DS:[ESI]
DEC EAX
ADD EAX,$D76AA478
ROL EAX,$7
ADD EAX,EDX

MOV EBX,EAX
AND EBX,$77777777
XOR EBX,ECX
ADD EBX,DWORD PTR DS:[ESI+$4]
ADD EBX,$f8fa0bcc
ROL EBX,$0C
ADD EBX,EAX
оптимизация? рассмешил ...
особенно
DEC EAX\ADD EAX,$D76AA478 подряд...
 
Ответить с цитированием

  #7  
Старый 31.01.2008, 09:24
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от kez  
оптимизация? рассмешил ...
особенно
Dec Eax\add Eax,$d76aa478 подряд...
Это компилятор Си смешной.

Откомпилил в си вставил в Delphi:
Предварительный рабочий вариант:
http://filesurf.ru/25687/keygenme.rar.html
10 хешей перебирает быстрее, чем PasswordsPro один.
Ответ создателя PasswordsPro о возможности добавить агоритм:
Цитата:
Интересная мысль, но думаю, что пока вряд ли она будет реализована в PPro, т.к. ваш алгоритм хорош для брутфорсера, заточенного "чисто" под MD5. Я же пока стремлюсь сделать ядро PPro универсальным - чтобы оно одними и теми же функциями работало с любым алгоритмом. И в очередной версии программы все алгоритмы будут вынесены в отдельные DLL-модули, что также будет очередным шагом на пути поддержки многопоточности. А затем уже можно будет приступать к точечной оптимизации каждого алгоритма внутри DLL-модуля. Но ваше предложение я учту, т.к. идея этого алгоритма теоретически может быть использована не только в MD5.

Последний раз редактировалось Xserg; 31.01.2008 в 11:16..
 
Ответить с цитированием

  #8  
Старый 13.02.2008, 23:54
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от Xserg  
Зы но 9 лет вместо 10 почти не радует .
Подумалось, нельзя ли еще побыстрее? Оказалось можно.

Необходимые компоненты:

[+] Microsoft Visual Studio 2005 или старше (в смысле поновее)
[+] CUDA for Windows Тут
[-] Видеокарта Nvidia GeForce8800 Ultra … [+]GeForce8500GT (1.8т.руб) в десять раз медленнее
[+] немного мозгов , для написания программы


Вот так не сложно запускается 128 потоков одновременно
Код:
 unsigned int * data;
  cudaMalloc((void**)&data, sizeof(hdata));
  cudaMemcpy(data, hdata, sizeof(hdata), cudaMemcpyHostToDevice);
  md5<<<16,8>>>(data);//16-мультипроцуссоров * 8 шейдеров =128 threads
  cudaMemcpy(hdata, data, sizeof(hdata), cudaMemcpyDeviceToHost);
Так пишется программа для синхронного выполнения 128 шейдерными процессорами.
Код:
__global__ void md5(unsigned int * data)
{
unsigned int Pdata[16];
for (int i=0;i<16;i++) Pdata[i]=data[(blockIdx.x*16 + threadIdx.x*8) +i];
__syncthreads();
unsigned int a=0x67452301;
unsigned int b=0xefcdab89;
unsigned int c=0x98badcfe;
unsigned int d=0x10325476;
a= a + (d ^ (b & (c ^ d))) + Pdata[ 0] + 0xd76aa478; a=(a<< 7)|(a>>(32- 7)); a= b + a;
d= d + (c ^ (a & (b ^ c))) + Pdata[ 1] + 0xe8c7b756; d=(d<<12)|(d>>(32-12)); d= a + d;
c= c + (b ^ (d & (a ^ b))) + Pdata[ 2] + 0x242070db; c=(c<<17)|(c>>(32-17)); c= d + c;
b= b + (a ^ (c & (d ^ a))) + Pdata[ 3] + 0xc1bdceee; b=(b<<22)|(b>>(32-22)); b= c + b;
// и т.д.
Совсем не сложно .

Получаем перебор 320 000 000 паролей в секунду.

Зы 2 месяца вместо 9 лет уже радует.

Последний раз редактировалось Xserg; 14.02.2008 в 00:47..
 
Ответить с цитированием

  #9  
Старый 14.02.2008, 00:12
Nova
OpenVPN.CC
Регистрация: 15.07.2005
Сообщений: 1,599
Провел на форуме:
7670961

Репутация: 1034


Отправить сообщение для Nova с помощью ICQ
По умолчанию

Цитата:
Сообщение от Xserg  
Получаем перебор 320 000 000 паролей в секунду.
ММм а можно поинтересоваться это на каком железе ?
и с какими вениками ?
 
Ответить с цитированием

  #10  
Старый 14.02.2008, 00:33
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от Nova  
на каком железе ?
http://www.nvidia.com/page/geforce8.html
GeForce 8800 Ultra - 320 млн.пас/cek (10т.руб накапливаю)
GeForce 8800 GTX - 288 млн.пас/cek
GeForce 8800 GTS(1) - 192 млн.пас/cek, SLI(2) - 384 млн.пас/cek

У меня в наличии:
GeForce 8500 GT - 27 млн.пас/cek , но это не предел оптимизирую до 32. тогда данные выше станут реальными, а не предполагаемыми.
+ вся оптимизация затачивается на нахождение одного пароля.
Универсальная программа будет поскромнее.

Последний раз редактировалось Xserg; 14.02.2008 в 00:37..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Античат online crack md5 service (тестим!) -=lebed=- Расшифровка хешей 1653 09.06.2010 22:49
Криптануть брут mZHel АнтиАдмин 3 23.01.2008 00:49
Взлом Md5 хеша за 8 часов madnet Мировые новости 11 02.04.2005 10:17
Хеш пароля в Md5 nnn Расшифровка хешей 5 15.12.2004 19:30
БРУТ PUMA E-Mail 8 21.09.2004 16:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ